From 673d64c1e9ea720e99328ba55e7dc4501d116d6a Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:51:57 +0000 Subject: [PATCH 01/20] Added contract typings and some modifications to update new implementation of wallet. WIP - issues with ERC4337Utils.ts --- .gitignore | 9 +- examples/1-get-address.ts | 6 +- examples/2-transfer-funds.ts | 8 +- package.json | 1 + src/base/BaseAccountAPI.ts | 260 ++-- src/base/EtherspotAccountAPI.ts | 110 -- src/base/EtherspotWalletAPI.ts | 106 ++ src/base/Provider.ts | 46 +- src/base/index.ts | 20 +- src/common/ERC4337Utils.ts | 166 ++- src/contracts/BLS.ts | 157 -- src/contracts/BLSAccount.ts | 684 --------- src/contracts/BLSAccountFactory.ts | 166 --- src/contracts/BLSHelper.ts | 157 -- src/contracts/BLSOpen.ts | 231 --- src/contracts/UserOperationLib.ts | 157 -- src/contracts/common.ts | 30 +- .../factories/BLSAccountFactory__factory.ts | 146 -- .../factories/BLSAccount__factory.ts | 517 ------- src/contracts/factories/BLSHelper__factory.ts | 109 -- src/contracts/factories/BLSOpen__factory.ts | 159 -- .../BLSSignatureAggregator__factory.ts | 616 -------- src/contracts/factories/BLS__factory.ts | 106 -- .../factories/DepositPaymaster__factory.ts | 522 ------- .../factories/EntryPoint__factory.ts | 1278 ---------------- .../EtherspotAccountFactory__factory.ts | 142 -- .../factories/EtherspotAccount__factory.ts | 424 ------ .../factories/SenderCreator__factory.ts | 77 - src/contracts/factories/index.ts | 5 + .../aa-4337/bls/BLSAccountFactory__factory.ts | 160 ++ .../src/aa-4337/bls/BLSAccount__factory.ts | 813 ++++++++++ .../bls/BLSSignatureAggregator__factory.ts | 618 ++++++++ .../aa-4337/bls}/IBLSAccount__factory.ts | 38 +- .../factories/src/aa-4337/bls/index.ts | 8 + .../src/aa-4337/bls/lib/BLSOpen__factory.ts | 164 +++ .../lib/hubble-contracts/contracts/index.ts | 4 + ...PairingPrecompileCostEstimator__factory.ts | 123 ++ .../hubble-contracts/contracts/libs/index.ts | 4 + .../aa-4337/bls/lib/hubble-contracts/index.ts | 4 + .../factories/src/aa-4337/bls/lib/index.ts | 5 + .../aa-4337/core}/BaseAccount__factory.ts | 16 +- .../aa-4337/core}/BasePaymaster__factory.ts | 24 +- .../src/aa-4337/core/EntryPoint__factory.ts | 1303 ++++++++++++++++ .../aa-4337/core/SenderCreator__factory.ts | 82 ++ .../aa-4337/core}/StakeManager__factory.ts | 21 +- .../factories/src/aa-4337/core/index.ts | 8 + src/contracts/factories/src/aa-4337/index.ts | 8 + .../aa-4337/interfaces}/IAccount__factory.ts | 16 +- .../IAggregatedAccount__factory.ts | 13 +- .../interfaces}/IAggregator__factory.ts | 11 +- .../interfaces}/ICreate2Deployer__factory.ts | 6 +- .../interfaces}/IEntryPoint__factory.ts | 70 +- .../interfaces}/IPaymaster__factory.ts | 11 +- .../interfaces}/IStakeManager__factory.ts | 15 +- .../factories/src/aa-4337/interfaces/index.ts | 10 + .../samples/DepositPaymaster__factory.ts | 511 +++++++ .../src/aa-4337/samples/IOracle__factory.ts | 45 + .../samples/SimpleAccountFactory__factory.ts | 144 ++ .../aa-4337/samples/SimpleAccount__factory.ts | 421 ++++++ .../TestAggregatedAccountFactory__factory.ts | 164 +++ .../samples/TestAggregatedAccount__factory.ts | 765 ++++++++++ .../samples/TokenPaymaster__factory.ts | 664 +++++++++ .../samples/VerifyingPaymaster__factory.ts | 488 ++++++ .../factories/src/aa-4337/samples/index.ts | 9 + .../BrokenBLSAccountFactory__factory.ts | 164 +++ .../BrokenBLSAccount__factory.ts | 803 ++++++++++ .../test/BrokenBlsAccount.sol/index.ts | 5 + .../aa-4337/test/MaliciousAccount__factory.ts | 168 +++ .../TestAggregatedAccountFactory__factory.ts | 164 +++ .../test/TestAggregatedAccount__factory.ts | 752 ++++++++++ .../src/aa-4337/test/TestCounter__factory.ts | 166 +++ .../test/TestExpirePaymaster__factory.ts | 329 +++++ .../test/TestExpiryAccount__factory.ts | 785 ++++++++++ .../src/aa-4337/test/TestHelpers__factory.ts | 205 +++ .../src/aa-4337/test/TestOracle__factory.ts | 82 ++ .../test/TestPaymasterAcceptAll__factory.ts | 333 +++++ .../test/TestRevertAccount__factory.ts | 181 +++ .../test/TestSignatureAggregator__factory.ts | 312 ++++ .../src/aa-4337/test/TestToken__factory.ts | 356 +++++ .../src/aa-4337/test/TestUtil__factory.ts | 139 ++ .../test/TestWarmColdAccount__factory.ts | 213 +++ .../factories/src/aa-4337/test/index.ts | 18 + .../AccountController__factory.ts | 195 +++ .../AccountRegistryMock__factory.ts | 139 ++ .../Account__factory.ts | 167 +++ .../GatewayRecipient__factory.ts | 81 + .../PersonalAccountRegistry__factory.ts | 587 ++++++++ .../backward_compatibility_helpers/index.ts | 8 + src/contracts/factories/src/index.ts | 10 + .../IPaymaster__factory.ts | 242 +++ .../IEtherspotPaymaster.sol/index.ts | 4 + .../src/interfaces/IWhitelist__factory.ts | 102 ++ .../factories/src/interfaces/index.ts | 5 + .../src/libs/ValidationConstants__factory.ts | 128 ++ src/contracts/factories/src/libs/index.ts | 4 + .../paymaster/EtherspotPaymaster__factory.ts | 753 ++++++++++ .../src/paymaster/Whitelist__factory.ts | 310 ++++ .../factories/src/paymaster/index.ts | 5 + .../src/test/TestEtherspotWallet__factory.ts | 719 +++++++++ src/contracts/factories/src/test/index.ts | 4 + .../wallet/EtherspotWalletFactory__factory.ts | 153 ++ .../src/wallet/EtherspotWallet__factory.ts | 719 +++++++++ .../helpers/AccountRegistry__factory.ts | 84 ++ .../helpers/WalletCompatability__factory.ts | 287 ++++ .../factories/src/wallet/helpers/index.ts | 5 + src/contracts/factories/src/wallet/index.ts | 6 + src/contracts/index.ts | 176 ++- src/contracts/src/aa-4337/bls/BLSAccount.ts | 1305 +++++++++++++++++ .../src/aa-4337/bls/BLSAccountFactory.ts | 263 ++++ .../aa-4337/bls}/BLSSignatureAggregator.ts | 106 +- .../{ => src/aa-4337/bls}/IBLSAccount.ts | 136 +- src/contracts/src/aa-4337/bls/index.ts | 9 + src/contracts/src/aa-4337/bls/lib/BLSOpen.ts | 337 +++++ .../lib/hubble-contracts/contracts/index.ts | 5 + .../libs/BNPairingPrecompileCostEstimator.ts | 159 ++ .../hubble-contracts/contracts/libs/index.ts | 4 + .../aa-4337/bls/lib/hubble-contracts/index.ts | 5 + src/contracts/src/aa-4337/bls/lib/index.ts | 6 + .../{ => src/aa-4337/core}/BaseAccount.ts | 81 +- .../{ => src/aa-4337/core}/BasePaymaster.ts | 300 ++-- .../{ => src/aa-4337/core}/EntryPoint.ts | 744 ++++++---- .../{ => src/aa-4337/core}/SenderCreator.ts | 36 +- .../{ => src/aa-4337/core}/StakeManager.ts | 316 ++-- src/contracts/src/aa-4337/core/index.ts | 8 + src/contracts/src/aa-4337/index.ts | 13 + .../{ => src/aa-4337/interfaces}/IAccount.ts | 79 +- .../aa-4337/interfaces}/IAggregatedAccount.ts | 81 +- .../aa-4337/interfaces}/IAggregator.ts | 57 +- .../aa-4337/interfaces}/ICreate2Deployer.ts | 46 +- .../aa-4337/interfaces}/IEntryPoint.ts | 519 ++++--- .../aa-4337/interfaces}/IPaymaster.ts | 120 +- .../aa-4337/interfaces}/IStakeManager.ts | 285 ++-- src/contracts/src/aa-4337/interfaces/index.ts | 10 + .../aa-4337/samples}/DepositPaymaster.ts | 544 +++---- src/contracts/src/aa-4337/samples/IOracle.ts | 104 ++ .../aa-4337/samples/SimpleAccount.ts} | 404 ++--- .../aa-4337/samples/SimpleAccountFactory.ts} | 81 +- .../aa-4337/samples/TestAggregatedAccount.ts | 1124 ++++++++++++++ .../samples/TestAggregatedAccountFactory.ts | 203 +++ .../src/aa-4337/samples/TokenPaymaster.ts | 964 ++++++++++++ .../src/aa-4337/samples/VerifyingPaymaster.ts | 660 +++++++++ src/contracts/src/aa-4337/samples/index.ts | 9 + .../BrokenBlsAccount.sol/BrokenBLSAccount.ts | 1238 ++++++++++++++++ .../BrokenBLSAccountFactory.ts | 263 ++++ .../test/BrokenBlsAccount.sol/index.ts | 5 + .../src/aa-4337/test/MaliciousAccount.ts | 160 ++ .../src/aa-4337/test/TestAggregatedAccount.ts | 1104 ++++++++++++++ .../test/TestAggregatedAccountFactory.ts | 203 +++ src/contracts/src/aa-4337/test/TestCounter.ts | 265 ++++ .../aa-4337/test/TestExpirePaymaster.ts} | 362 ++--- .../src/aa-4337/test/TestExpiryAccount.ts | 1200 +++++++++++++++ src/contracts/src/aa-4337/test/TestHelpers.ts | 243 +++ src/contracts/src/aa-4337/test/TestOracle.ts | 104 ++ .../aa-4337/test/TestPaymasterAcceptAll.ts | 506 +++++++ .../src/aa-4337/test/TestRevertAccount.ts | 193 +++ .../aa-4337/test/TestSignatureAggregator.ts | 261 ++++ src/contracts/src/aa-4337/test/TestToken.ts | 501 +++++++ src/contracts/src/aa-4337/test/TestUtil.ts | 141 ++ .../src/aa-4337/test/TestWarmColdAccount.ts | 232 +++ src/contracts/src/aa-4337/test/index.ts | 19 + .../backward_compatibility_helpers/Account.ts | 192 +++ .../AccountController.ts | 235 +++ .../AccountRegistryMock.ts | 211 +++ .../GatewayRecipient.ts | 82 ++ .../PersonalAccountRegistry.ts | 921 ++++++++++++ .../backward_compatibility_helpers/index.ts | 8 + src/contracts/src/index.ts | 17 + .../IEtherspotPaymaster.sol/IPaymaster.ts | 307 ++++ .../IEtherspotPaymaster.sol/index.ts | 4 + src/contracts/src/interfaces/IWhitelist.ts | 241 +++ src/contracts/src/interfaces/index.ts | 6 + src/contracts/src/libs/ValidationConstants.ts | 201 +++ src/contracts/src/libs/index.ts | 4 + .../src/paymaster/EtherspotPaymaster.ts | 1110 ++++++++++++++ src/contracts/src/paymaster/Whitelist.ts | 499 +++++++ src/contracts/src/paymaster/index.ts | 5 + src/contracts/src/test/TestEtherspotWallet.ts | 1087 ++++++++++++++ src/contracts/src/test/index.ts | 4 + src/contracts/src/wallet/EtherspotWallet.ts | 1087 ++++++++++++++ .../src/wallet/EtherspotWalletFactory.ts | 203 +++ .../src/wallet/helpers/AccountRegistry.ts | 169 +++ .../src/wallet/helpers/WalletCompatability.ts | 436 ++++++ src/contracts/src/wallet/helpers/index.ts | 5 + src/contracts/src/wallet/index.ts | 7 + src/sdk.ts | 46 +- 185 files changed, 38405 insertions(+), 8054 deletions(-) delete mode 100644 src/base/EtherspotAccountAPI.ts create mode 100644 src/base/EtherspotWalletAPI.ts delete mode 100644 src/contracts/BLS.ts delete mode 100644 src/contracts/BLSAccount.ts delete mode 100644 src/contracts/BLSAccountFactory.ts delete mode 100644 src/contracts/BLSHelper.ts delete mode 100644 src/contracts/BLSOpen.ts delete mode 100644 src/contracts/UserOperationLib.ts delete mode 100644 src/contracts/factories/BLSAccountFactory__factory.ts delete mode 100644 src/contracts/factories/BLSAccount__factory.ts delete mode 100644 src/contracts/factories/BLSHelper__factory.ts delete mode 100644 src/contracts/factories/BLSOpen__factory.ts delete mode 100644 src/contracts/factories/BLSSignatureAggregator__factory.ts delete mode 100644 src/contracts/factories/BLS__factory.ts delete mode 100644 src/contracts/factories/DepositPaymaster__factory.ts delete mode 100644 src/contracts/factories/EntryPoint__factory.ts delete mode 100644 src/contracts/factories/EtherspotAccountFactory__factory.ts delete mode 100644 src/contracts/factories/EtherspotAccount__factory.ts delete mode 100644 src/contracts/factories/SenderCreator__factory.ts create mode 100644 src/contracts/factories/index.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts rename src/contracts/factories/{ => src/aa-4337/bls}/IBLSAccount__factory.ts (83%) create mode 100644 src/contracts/factories/src/aa-4337/bls/index.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts create mode 100644 src/contracts/factories/src/aa-4337/bls/lib/index.ts rename src/contracts/factories/{ => src/aa-4337/core}/BaseAccount__factory.ts (91%) rename src/contracts/factories/{ => src/aa-4337/core}/BasePaymaster__factory.ts (92%) create mode 100644 src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts rename src/contracts/factories/{ => src/aa-4337/core}/StakeManager__factory.ts (94%) create mode 100644 src/contracts/factories/src/aa-4337/core/index.ts create mode 100644 src/contracts/factories/src/aa-4337/index.ts rename src/contracts/factories/{ => src/aa-4337/interfaces}/IAccount__factory.ts (90%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/IAggregatedAccount__factory.ts (92%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/IAggregator__factory.ts (96%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/ICreate2Deployer__factory.ts (88%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/IEntryPoint__factory.ts (95%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/IPaymaster__factory.ts (93%) rename src/contracts/factories/{ => src/aa-4337/interfaces}/IStakeManager__factory.ts (94%) create mode 100644 src/contracts/factories/src/aa-4337/interfaces/index.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/samples/index.ts create mode 100644 src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts create mode 100644 src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestToken__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/test/index.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts create mode 100644 src/contracts/factories/src/backward_compatibility_helpers/index.ts create mode 100644 src/contracts/factories/src/index.ts create mode 100644 src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts create mode 100644 src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts create mode 100644 src/contracts/factories/src/interfaces/IWhitelist__factory.ts create mode 100644 src/contracts/factories/src/interfaces/index.ts create mode 100644 src/contracts/factories/src/libs/ValidationConstants__factory.ts create mode 100644 src/contracts/factories/src/libs/index.ts create mode 100644 src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts create mode 100644 src/contracts/factories/src/paymaster/Whitelist__factory.ts create mode 100644 src/contracts/factories/src/paymaster/index.ts create mode 100644 src/contracts/factories/src/test/TestEtherspotWallet__factory.ts create mode 100644 src/contracts/factories/src/test/index.ts create mode 100644 src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts create mode 100644 src/contracts/factories/src/wallet/EtherspotWallet__factory.ts create mode 100644 src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts create mode 100644 src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts create mode 100644 src/contracts/factories/src/wallet/helpers/index.ts create mode 100644 src/contracts/factories/src/wallet/index.ts create mode 100644 src/contracts/src/aa-4337/bls/BLSAccount.ts create mode 100644 src/contracts/src/aa-4337/bls/BLSAccountFactory.ts rename src/contracts/{ => src/aa-4337/bls}/BLSSignatureAggregator.ts (80%) rename src/contracts/{ => src/aa-4337/bls}/IBLSAccount.ts (54%) create mode 100644 src/contracts/src/aa-4337/bls/index.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/BLSOpen.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts create mode 100644 src/contracts/src/aa-4337/bls/lib/index.ts rename src/contracts/{ => src/aa-4337/core}/BaseAccount.ts (66%) rename src/contracts/{ => src/aa-4337/core}/BasePaymaster.ts (56%) rename src/contracts/{ => src/aa-4337/core}/EntryPoint.ts (51%) rename src/contracts/{ => src/aa-4337/core}/SenderCreator.ts (68%) rename src/contracts/{ => src/aa-4337/core}/StakeManager.ts (52%) create mode 100644 src/contracts/src/aa-4337/core/index.ts create mode 100644 src/contracts/src/aa-4337/index.ts rename src/contracts/{ => src/aa-4337/interfaces}/IAccount.ts (58%) rename src/contracts/{ => src/aa-4337/interfaces}/IAggregatedAccount.ts (63%) rename src/contracts/{ => src/aa-4337/interfaces}/IAggregator.ts (78%) rename src/contracts/{ => src/aa-4337/interfaces}/ICreate2Deployer.ts (62%) rename src/contracts/{ => src/aa-4337/interfaces}/IEntryPoint.ts (54%) rename src/contracts/{ => src/aa-4337/interfaces}/IPaymaster.ts (52%) rename src/contracts/{ => src/aa-4337/interfaces}/IStakeManager.ts (52%) create mode 100644 src/contracts/src/aa-4337/interfaces/index.ts rename src/contracts/{ => src/aa-4337/samples}/DepositPaymaster.ts (54%) create mode 100644 src/contracts/src/aa-4337/samples/IOracle.ts rename src/contracts/{EtherspotAccount.ts => src/aa-4337/samples/SimpleAccount.ts} (51%) rename src/contracts/{EtherspotAccountFactory.ts => src/aa-4337/samples/SimpleAccountFactory.ts} (62%) create mode 100644 src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts create mode 100644 src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts create mode 100644 src/contracts/src/aa-4337/samples/TokenPaymaster.ts create mode 100644 src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts create mode 100644 src/contracts/src/aa-4337/samples/index.ts create mode 100644 src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts create mode 100644 src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts create mode 100644 src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts create mode 100644 src/contracts/src/aa-4337/test/MaliciousAccount.ts create mode 100644 src/contracts/src/aa-4337/test/TestAggregatedAccount.ts create mode 100644 src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts create mode 100644 src/contracts/src/aa-4337/test/TestCounter.ts rename src/contracts/{VerifyingPaymaster.ts => src/aa-4337/test/TestExpirePaymaster.ts} (53%) create mode 100644 src/contracts/src/aa-4337/test/TestExpiryAccount.ts create mode 100644 src/contracts/src/aa-4337/test/TestHelpers.ts create mode 100644 src/contracts/src/aa-4337/test/TestOracle.ts create mode 100644 src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts create mode 100644 src/contracts/src/aa-4337/test/TestRevertAccount.ts create mode 100644 src/contracts/src/aa-4337/test/TestSignatureAggregator.ts create mode 100644 src/contracts/src/aa-4337/test/TestToken.ts create mode 100644 src/contracts/src/aa-4337/test/TestUtil.ts create mode 100644 src/contracts/src/aa-4337/test/TestWarmColdAccount.ts create mode 100644 src/contracts/src/aa-4337/test/index.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/Account.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/AccountController.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts create mode 100644 src/contracts/src/backward_compatibility_helpers/index.ts create mode 100644 src/contracts/src/index.ts create mode 100644 src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts create mode 100644 src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts create mode 100644 src/contracts/src/interfaces/IWhitelist.ts create mode 100644 src/contracts/src/interfaces/index.ts create mode 100644 src/contracts/src/libs/ValidationConstants.ts create mode 100644 src/contracts/src/libs/index.ts create mode 100644 src/contracts/src/paymaster/EtherspotPaymaster.ts create mode 100644 src/contracts/src/paymaster/Whitelist.ts create mode 100644 src/contracts/src/paymaster/index.ts create mode 100644 src/contracts/src/test/TestEtherspotWallet.ts create mode 100644 src/contracts/src/test/index.ts create mode 100644 src/contracts/src/wallet/EtherspotWallet.ts create mode 100644 src/contracts/src/wallet/EtherspotWalletFactory.ts create mode 100644 src/contracts/src/wallet/helpers/AccountRegistry.ts create mode 100644 src/contracts/src/wallet/helpers/WalletCompatability.ts create mode 100644 src/contracts/src/wallet/helpers/index.ts create mode 100644 src/contracts/src/wallet/index.ts diff --git a/.gitignore b/.gitignore index 6f1879a0..53f6627c 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,11 @@ demo test.js # .env file -.env \ No newline at end of file +.env + +# contracts exposed +src/contracts/factories/contracts-exposed/ + +#oz typings +src/contracts/@openzeppelin/ +src/contracts/factories/@openzeppelin/ \ No newline at end of file diff --git a/examples/1-get-address.ts b/examples/1-get-address.ts index 5da08fe8..f9426ef6 100644 --- a/examples/1-get-address.ts +++ b/examples/1-get-address.ts @@ -9,13 +9,13 @@ async function main() { 'mumbai-aa.etherspot.dev', 80001, '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17' + '0xPeRs0Na1AcC0Un7R3g157ry01233444555666777', + '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', ); const address = await sdk.getCounterFactualAddress(); console.log(`AA-Wallet address: ${address}`); } - main() .catch(console.error) - .finally(() => process.exit()); \ No newline at end of file + .finally(() => process.exit()); diff --git a/examples/2-transfer-funds.ts b/examples/2-transfer-funds.ts index 4d05c19b..1db4ccc8 100644 --- a/examples/2-transfer-funds.ts +++ b/examples/2-transfer-funds.ts @@ -10,7 +10,8 @@ async function main() { 'mumbai-aa.etherspot.dev', 80001, '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17' + '0xPeRs0Na1AcC0Un7R3g157ry01233444555666777', + '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', ); // creating and signing userOp... @@ -23,10 +24,9 @@ async function main() { // sending to the bundler... const txHash = await sdk.send(userOp); - console.log(`Transaction hash: ${txHash}`) + console.log(`Transaction hash: ${txHash}`); } - main() .catch(console.error) - .finally(() => process.exit()); \ No newline at end of file + .finally(() => process.exit()); diff --git a/package.json b/package.json index 6b4b6e6d..154ec983 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "types": "./dist/index.d.ts", "scripts": { "start": "exit 1", + "01-get-address": "./node_modules/.bin/ts-node ./examples/1-get-address", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", diff --git a/src/base/BaseAccountAPI.ts b/src/base/BaseAccountAPI.ts index c399e509..935776df 100644 --- a/src/base/BaseAccountAPI.ts +++ b/src/base/BaseAccountAPI.ts @@ -1,27 +1,25 @@ -import { ethers, BigNumber, BigNumberish } from 'ethers' -import { Provider } from '@ethersproject/providers' -import { - EntryPoint, EntryPoint__factory, - UserOperationStruct -} from '../contracts' - -import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' -import { resolveProperties } from 'ethers/lib/utils' -import { PaymasterAPI } from './PaymasterAPI' -import { getUserOpHash, packUserOp } from '../common' -import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas' +import { ethers, BigNumber, BigNumberish } from 'ethers'; +import { Provider } from '@ethersproject/providers'; +import { EntryPoint, EntryPoint__factory, UserOperationStruct } from '../contracts'; + +import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; +import { resolveProperties } from 'ethers/lib/utils'; +import { PaymasterAPI } from './PaymasterAPI'; +import { getUserOpHash, packUserOp } from '../common'; +import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; export interface BaseApiParams { - provider: Provider - entryPointAddress: string - accountAddress?: string - overheads?: Partial - paymasterAPI?: PaymasterAPI + provider: Provider; + entryPointAddress: string; + registryAddress: string; + accountAddress?: string; + overheads?: Partial; + paymasterAPI?: PaymasterAPI; } export interface UserOpResult { - transactionHash: string - success: boolean + transactionHash: string; + success: boolean; } /** @@ -38,51 +36,62 @@ export interface UserOpResult { * - createSignedUserOp - helper to call the above createUnsignedUserOp, and then extract the userOpHash and sign it */ export abstract class BaseAccountAPI { - private senderAddress!: string - private isPhantom = true + private senderAddress!: string; + private isPhantom = true; + // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - protected readonly entryPointView: EntryPoint + protected readonly entryPointView: EntryPoint; - provider: Provider - overheads?: Partial - entryPointAddress: string - accountAddress?: string - paymasterAPI?: PaymasterAPI + provider: Provider; + overheads?: Partial; + entryPointAddress: string; + registryAddress: string; + accountAddress?: string; + paymasterAPI?: PaymasterAPI; /** * base constructor. * subclass SHOULD add parameters that define the owner (signer) of this wallet */ - protected constructor (params: BaseApiParams) { - this.provider = params.provider - this.overheads = params.overheads - this.entryPointAddress = params.entryPointAddress - this.accountAddress = params.accountAddress - this.paymasterAPI = params.paymasterAPI + protected constructor(params: BaseApiParams) { + this.provider = params.provider; + this.overheads = params.overheads; + this.entryPointAddress = params.entryPointAddress; + this.registryAddress = params.registryAddress; + this.accountAddress = params.accountAddress; + this.paymasterAPI = params.paymasterAPI; // factory "connect" define the contract address. the contract "connect" defines the "from" address. - this.entryPointView = EntryPoint__factory.connect(params.entryPointAddress, params.provider).connect(ethers.constants.AddressZero) + this.entryPointView = EntryPoint__factory.connect(params.entryPointAddress, params.provider).connect( + ethers.constants.AddressZero, + ); } - async init (): Promise { - if (await this.provider.getCode(this.entryPointAddress) === '0x') { - throw new Error(`entryPoint not deployed at ${this.entryPointAddress}`) + async init(): Promise { + // check EntryPoint is deployed at given address + if ((await this.provider.getCode(this.entryPointAddress)) === '0x') { + throw new Error(`entryPoint not deployed at ${this.entryPointAddress}`); + } + + // check PersonalAccountRegistry is deployed at given address + if ((await this.provider.getCode(this.registryAddress)) === '0x') { + throw new Error(`registry not deployed at ${this.registryAddress}`); } - await this.getAccountAddress() - return this + await this.getAccountAddress(); + return this; } /** * return the value to put into the "initCode" field, if the contract is not yet deployed. * this value holds the "factory" address, followed by this account's information */ - abstract getAccountInitCode (): Promise + abstract getAccountInitCode(): Promise; /** * return current account's nonce. */ - abstract getNonce (): Promise + abstract getNonce(): Promise; /** * encode the call from entryPoint through our account to the target contract. @@ -90,101 +99,105 @@ export abstract class BaseAccountAPI { * @param value * @param data */ - abstract encodeExecute (target: string, value: BigNumberish, data: string): Promise + abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise; /** * sign a userOp's hash (userOpHash). * @param userOpHash */ - abstract signUserOpHash (userOpHash: string): Promise + abstract signUserOpHash(userOpHash: string): Promise; /** * check if the contract is already deployed. */ - async checkAccountPhantom (): Promise { + async checkAccountPhantom(): Promise { if (!this.isPhantom) { // already deployed. no need to check anymore. - return this.isPhantom + return this.isPhantom; } - const senderAddressCode = await this.provider.getCode(this.getAccountAddress()) + const senderAddressCode = await this.provider.getCode(this.getAccountAddress()); if (senderAddressCode.length > 2) { // console.log(`SimpleAccount Contract already deployed at ${this.senderAddress}`) - this.isPhantom = false + this.isPhantom = false; } else { // console.log(`SimpleAccount Contract is NOT YET deployed at ${this.senderAddress} - working in "phantom account" mode.`) } - return this.isPhantom + return this.isPhantom; } /** * calculate the account address even before it is deployed */ - async getCounterFactualAddress (): Promise { - const initCode = await this.getAccountInitCode() + async getCounterFactualAddress(): Promise { + const initCode = await this.getAccountInitCode(); // use entryPoint to query account address (factory can provide a helper method to do the same, but // this method attempts to be generic try { - await this.entryPointView.callStatic.getSenderAddress(initCode) + await this.entryPointView.callStatic.getSenderAddress(initCode); } catch (e: any) { - return e.errorArgs.sender + return e.errorArgs.sender; } - throw new Error('must handle revert') + throw new Error('must handle revert'); } /** * return initCode value to into the UserOp. * (either deployment code, or empty hex if contract already deployed) */ - async getInitCode (): Promise { + async getInitCode(): Promise { if (await this.checkAccountPhantom()) { - return await this.getAccountInitCode() + return await this.getAccountInitCode(); } - return '0x' + return '0x'; } /** * return maximum gas used for verification. * NOTE: createUnsignedUserOp will add to this value the cost of creation, if the contract is not yet created. */ - async getVerificationGasLimit (): Promise { - return 100000 + async getVerificationGasLimit(): Promise { + return 100000; } /** * should cover cost of putting calldata on-chain, and some overhead. * actual overhead depends on the expected bundle size */ - async getPreVerificationGas (userOp: Partial): Promise { - const p = await resolveProperties(userOp) - return calcPreVerificationGas(p, this.overheads) + async getPreVerificationGas(userOp: Partial): Promise { + const p = await resolveProperties(userOp); + return calcPreVerificationGas(p, this.overheads); } /** * ABI-encode a user operation. used for calldata cost estimation */ - packUserOp (userOp: UserOperationStruct): string { - return packUserOp(userOp, false) + packUserOp(userOp: UserOperationStruct): string { + return packUserOp(userOp, false); } - async encodeUserOpCallDataAndGasLimit (detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string, callGasLimit: BigNumber }> { - function parseNumber (a: any): BigNumber | null { - if (a == null || a === '') return null - return BigNumber.from(a.toString()) + async encodeUserOpCallDataAndGasLimit( + detailsForUserOp: TransactionDetailsForUserOp, + ): Promise<{ callData: string; callGasLimit: BigNumber }> { + function parseNumber(a: any): BigNumber | null { + if (a == null || a === '') return null; + return BigNumber.from(a.toString()); } - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); - const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? await this.provider.estimateGas({ - from: this.entryPointAddress, - to: this.getAccountAddress(), - data: callData - }) + const callGasLimit = + parseNumber(detailsForUserOp.gasLimit) ?? + (await this.provider.estimateGas({ + from: this.entryPointAddress, + to: this.getAccountAddress(), + data: callData, + })); return { callData, - callGasLimit - } + callGasLimit, + }; } /** @@ -192,32 +205,32 @@ export abstract class BaseAccountAPI { * This value matches entryPoint.getUserOpHash (calculated off-chain, to avoid a view call) * @param userOp userOperation, (signature field ignored) */ - async getUserOpHash (userOp: UserOperationStruct): Promise { - const op = await resolveProperties(userOp) - const chainId = await this.provider.getNetwork().then(net => net.chainId) - return getUserOpHash(op, this.entryPointAddress, chainId) + async getUserOpHash(userOp: UserOperationStruct): Promise { + const op = await resolveProperties(userOp); + const chainId = await this.provider.getNetwork().then((net) => net.chainId); + return getUserOpHash(op, this.entryPointAddress, chainId); } /** * return the account's address. * this value is valid even before deploying the contract. */ - async getAccountAddress (): Promise { + async getAccountAddress(): Promise { if (this.senderAddress == null) { if (this.accountAddress != null) { - this.senderAddress = this.accountAddress + this.senderAddress = this.accountAddress; } else { - this.senderAddress = await this.getCounterFactualAddress() + this.senderAddress = await this.getCounterFactualAddress(); } } - return this.senderAddress + return this.senderAddress; } - async estimateCreationGas (initCode?: string): Promise { - if (initCode == null || initCode === '0x') return 0 - const deployerAddress = initCode.substring(0, 42) - const deployerCallData = '0x' + initCode.substring(42) - return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }) + async estimateCreationGas(initCode?: string): Promise { + if (initCode == null || initCode === '0x') return 0; + const deployerAddress = initCode.substring(0, 42); + const deployerCallData = '0x' + initCode.substring(42); + return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); } /** @@ -226,28 +239,21 @@ export abstract class BaseAccountAPI { * - if gas or nonce are missing, read them from the chain (note that we can't fill gaslimit before the account is created) * @param info */ - async createUnsignedUserOp (info: TransactionDetailsForUserOp): Promise { - const { - callData, - callGasLimit - } = await this.encodeUserOpCallDataAndGasLimit(info) - const initCode = await this.getInitCode() + async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { + const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info); + const initCode = await this.getInitCode(); - const initGas = await this.estimateCreationGas(initCode) - const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()) - .add(initGas) + const initGas = await this.estimateCreationGas(initCode); + const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()).add(initGas); - let { - maxFeePerGas, - maxPriorityFeePerGas - } = info + let { maxFeePerGas, maxPriorityFeePerGas } = info; if (maxFeePerGas == null || maxPriorityFeePerGas == null) { - const feeData = await this.provider.getFeeData() + const feeData = await this.provider.getFeeData(); if (maxFeePerGas == null) { - maxFeePerGas = feeData.maxFeePerGas ?? undefined + maxFeePerGas = feeData.maxFeePerGas ?? undefined; } if (maxPriorityFeePerGas == null) { - maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined + maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined; } } @@ -259,45 +265,45 @@ export abstract class BaseAccountAPI { callGasLimit, verificationGasLimit, maxFeePerGas, - maxPriorityFeePerGas - } + maxPriorityFeePerGas, + }; - let paymasterAndData: string | undefined + let paymasterAndData: string | undefined; if (this.paymasterAPI != null) { // fill (partial) preVerificationGas (all except the cost of the generated paymasterAndData) const userOpForPm = { ...partialUserOp, - preVerificationGas: this.getPreVerificationGas(partialUserOp) - } - paymasterAndData = await this.paymasterAPI.getPaymasterAndData(userOpForPm) + preVerificationGas: this.getPreVerificationGas(partialUserOp), + }; + paymasterAndData = await this.paymasterAPI.getPaymasterAndData(userOpForPm); } - partialUserOp.paymasterAndData = paymasterAndData ?? '0x' + partialUserOp.paymasterAndData = paymasterAndData ?? '0x'; return { ...partialUserOp, preVerificationGas: this.getPreVerificationGas(partialUserOp), - signature: '' - } + signature: '', + }; } /** * Sign the filled userOp. * @param userOp the UserOperation to sign (with signature field ignored) */ - async signUserOp (userOp: UserOperationStruct): Promise { - const userOpHash = await this.getUserOpHash(userOp) - const signature = await this.signUserOpHash(userOpHash) + async signUserOp(userOp: UserOperationStruct): Promise { + const userOpHash = await this.getUserOpHash(userOp); + const signature = await this.signUserOpHash(userOpHash); return { ...userOp, - signature - } + signature, + }; } /** * helper method: create and sign a user operation. * @param info transaction details for the userOp */ - async createSignedUserOp (info: TransactionDetailsForUserOp): Promise { - return await this.signUserOp(await this.createUnsignedUserOp(info)) + async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { + return await this.signUserOp(await this.createUnsignedUserOp(info)); } /** @@ -307,15 +313,15 @@ export abstract class BaseAccountAPI { * @param interval time to wait between polls. * @return the transactionHash this userOp was mined, or null if not found. */ - async getUserOpReceipt (userOpHash: string, timeout = 30000, interval = 5000): Promise { - const endtime = Date.now() + timeout + async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { + const endtime = Date.now() + timeout; while (Date.now() < endtime) { - const events = await this.entryPointView.queryFilter(this.entryPointView.filters.UserOperationEvent(userOpHash)) + const events = await this.entryPointView.queryFilter(this.entryPointView.filters.UserOperationEvent(userOpHash)); if (events.length > 0) { - return events[0].transactionHash + return events[0].transactionHash; } - await new Promise(resolve => setTimeout(resolve, interval)) + await new Promise((resolve) => setTimeout(resolve, interval)); } - return null + return null; } } diff --git a/src/base/EtherspotAccountAPI.ts b/src/base/EtherspotAccountAPI.ts deleted file mode 100644 index 0a5bd573..00000000 --- a/src/base/EtherspotAccountAPI.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { BigNumber, BigNumberish } from 'ethers' -import { - EtherspotAccount, - EtherspotAccount__factory, - EtherspotAccountFactory, - EtherspotAccountFactory__factory -} from '../contracts' - -import { arrayify, hexConcat } from 'ethers/lib/utils' -import { Signer } from '@ethersproject/abstract-signer' -import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI' - -/** - * constructor params, added no top of base params: - * @param owner the signer object for the account owner - * @param factoryAddress address of contract "factory" to deploy new contracts (not needed if account already deployed) - * @param index nonce value used when creating multiple accounts for the same owner - */ -export interface EtherspotAccountApiParams extends BaseApiParams { - owner: Signer - factoryAddress?: string - index?: number - -} - -/** - * An implementation of the BaseAccountAPI using the EtherspotAccount contract. - * - contract deployer gets "entrypoint", "owner" addresses and "index" nonce - * - owner signs requests using normal "Ethereum Signed Message" (ether's signer.signMessage()) - * - nonce method is "nonce()" - * - execute method is "execFromEntryPoint()" - */ -export class EtherspotAccountAPI extends BaseAccountAPI { - factoryAddress?: string - owner: Signer - index: number - - /** - * our account contract. - * should support the "execFromEntryPoint" and "nonce" methods - */ - accountContract?: EtherspotAccount - - factory?: EtherspotAccountFactory - - constructor (params: EtherspotAccountApiParams) { - super(params) - this.factoryAddress = params.factoryAddress - this.owner = params.owner - this.index = params.index ?? 0 - } - - async _getAccountContract (): Promise { - if (this.accountContract == null) { - this.accountContract = EtherspotAccount__factory.connect(await this.getAccountAddress(), this.provider) - } - return this.accountContract - } - - /** - * return the value to put into the "initCode" field, if the account is not yet deployed. - * this value holds the "factory" address, followed by this account's information - */ - async getAccountInitCode (): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = EtherspotAccountFactory__factory.connect(this.factoryAddress, this.provider) - } else { - throw new Error('no factory to get initCode') - } - } - return hexConcat([ - this.factory.address, - `0x5fbfb9cf000000000000000000000000${(await this.owner.getAddress()).slice(2)}0000000000000000000000000000000000000000000000000000000000000000` - ]) - } - - async getNonce (): Promise { - if (await this.checkAccountPhantom()) { - return BigNumber.from(0) - } - const accountContract = await this._getAccountContract() - return await accountContract.nonce() - } - - /** - * encode a method call from entryPoint to our contract - * @param target - * @param value - * @param data - */ - async encodeExecute (target: string, value: BigNumberish, data: string): Promise { - const accountContract = await this._getAccountContract() - return accountContract.interface.encodeFunctionData( - 'executeTransaction', - [ - target, - value, - data - ]) - } - - async signUserOpHash (userOpHash: string): Promise { - return await this.owner.signMessage(arrayify(userOpHash)) - } - - get epView() { - return this.entryPointView; - } -} diff --git a/src/base/EtherspotWalletAPI.ts b/src/base/EtherspotWalletAPI.ts new file mode 100644 index 00000000..833c3ee5 --- /dev/null +++ b/src/base/EtherspotWalletAPI.ts @@ -0,0 +1,106 @@ +import { BigNumber, BigNumberish } from 'ethers'; +import { + EtherspotWallet, + EtherspotWallet__factory, + EtherspotWalletFactory, + EtherspotWalletFactory__factory, + UserOperationStruct, +} from '../contracts'; +import { arrayify, hexConcat } from 'ethers/lib/utils'; +import { Signer } from '@ethersproject/abstract-signer'; +import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI'; +import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; + +/** + * constructor params, added no top of base params: + * @param owner the signer object for the account owner + * @param factoryAddress address of contract "factory" to deploy new contracts (not needed if account already deployed) + * @param index nonce value used when creating multiple accounts for the same owner + */ +export interface EtherspotWalletApiParams extends BaseApiParams { + owner: Signer; + factoryAddress?: string; + index?: number; +} + +/** + * An implementation of the BaseAccountAPI using the EtherspotWallet contract. + * - contract deployer gets "entrypoint", "owner" addresses and "index" nonce + * - owner signs requests using normal "Ethereum Signed Message" (ether's signer.signMessage()) + * - nonce method is "nonce()" + * - execute method is "execFromEntryPoint()" + */ +export class EtherspotWalletAPI extends BaseAccountAPI { + factoryAddress?: string; + owner: Signer; + index: number; + + /** + * our account contract. + * should support the "execFromEntryPoint" and "nonce" methods + */ + accountContract?: EtherspotWallet; + + factory?: EtherspotWalletFactory; + + constructor(params: EtherspotWalletApiParams) { + super(params); + this.factoryAddress = params.factoryAddress; + this.owner = params.owner; + this.index = params.index ?? 0; + } + + async _getAccountContract(): Promise { + if (this.accountContract == null) { + this.accountContract = EtherspotWallet__factory.connect(await this.getAccountAddress(), this.provider); + } + return this.accountContract; + } + + /** + * return the value to put into the "initCode" field, if the account is not yet deployed. + * this value holds the "factory" address, followed by this account's information + */ + async getAccountInitCode(): Promise { + if (this.factory == null) { + if (this.factoryAddress != null && this.factoryAddress !== '') { + this.factory = EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider); + } else { + throw new Error('no factory to get initCode'); + } + } + return hexConcat([ + this.factory.address, + `0x5fbfb9cf000000000000000000000000${(await this.owner.getAddress()).slice( + 2, + )}0000000000000000000000000000000000000000000000000000000000000000`, + ]); + } + + async getNonce(): Promise { + if (await this.checkAccountPhantom()) { + return BigNumber.from(0); + } + const accountContract = await this._getAccountContract(); + return await accountContract.nonce(); + } + + /** + * encode a method call from entryPoint to our contract + * @param target + * @param value + * @param data + */ + async encodeExecute(target: string, value: BigNumberish, data: string): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData('execute', [target, value, data]); + } + + async signUserOpHash(userOpHash: string): Promise { + return await this.owner.signMessage(arrayify(userOpHash)); + } + + get epView() { + return this.entryPointView; + } +} diff --git a/src/base/Provider.ts b/src/base/Provider.ts index 4ecb81fb..330cc8a2 100644 --- a/src/base/Provider.ts +++ b/src/base/Provider.ts @@ -1,16 +1,16 @@ -import { JsonRpcProvider } from '@ethersproject/providers' +import { JsonRpcProvider } from '@ethersproject/providers'; -import { EntryPoint__factory, EtherspotAccountFactory__factory } from '../contracts' +import { EntryPoint__factory, EtherspotWalletFactory__factory } from '../contracts'; -import { ClientConfig } from './ClientConfig' -import { EtherspotAccountAPI } from './EtherspotAccountAPI' -import { ERC4337EthersProvider } from './ERC4337EthersProvider' -import { HttpRpcClient } from './HttpRpcClient' -import { DeterministicDeployer } from './DeterministicDeployer' -import { Signer } from '@ethersproject/abstract-signer' -import Debug from 'debug' +import { ClientConfig } from './ClientConfig'; +import { EtherspotWalletAPI } from './EtherspotWalletAPI'; +import { ERC4337EthersProvider } from './ERC4337EthersProvider'; +import { HttpRpcClient } from './HttpRpcClient'; +import { DeterministicDeployer } from './DeterministicDeployer'; +import { Signer } from '@ethersproject/abstract-signer'; +import Debug from 'debug'; -const debug = Debug('aa.wrapProvider') +const debug = Debug('aa.wrapProvider'); /** * wrap an existing provider to tunnel requests through Account Abstraction. @@ -18,25 +18,25 @@ const debug = Debug('aa.wrapProvider') * @param config see ClientConfig for more info * @param originalSigner use this signer as the owner. of this wallet. By default, use the provider's signer */ -export async function wrapProvider ( +export async function wrapProvider( originalProvider: JsonRpcProvider, config: ClientConfig, - originalSigner: Signer = originalProvider.getSigner() + originalSigner: Signer = originalProvider.getSigner(), ): Promise { - const entryPoint = EntryPoint__factory.connect(config.entryPointAddress, originalProvider) + const entryPoint = EntryPoint__factory.connect(config.entryPointAddress, originalProvider); // Initial SimpleAccount instance is not deployed and exists just for the interface - const detDeployer = new DeterministicDeployer(originalProvider) - const simpleAccountDeployer = await detDeployer.deterministicDeploy(EtherspotAccountFactory__factory.bytecode) - const smartAccountAPI = new EtherspotAccountAPI({ + const detDeployer = new DeterministicDeployer(originalProvider); + const simpleAccountDeployer = await detDeployer.deterministicDeploy(EtherspotWalletFactory__factory.bytecode); + const smartAccountAPI = new EtherspotWalletAPI({ provider: originalProvider, entryPointAddress: entryPoint.address, owner: originalSigner, factoryAddress: simpleAccountDeployer, - paymasterAPI: config.paymasterAPI - }) - debug('config=', config) - const chainId = await originalProvider.getNetwork().then(net => net.chainId) - const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, chainId) + paymasterAPI: config.paymasterAPI, + }); + debug('config=', config); + const chainId = await originalProvider.getNetwork().then((net) => net.chainId); + const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, chainId); return await new ERC4337EthersProvider( chainId, config, @@ -44,6 +44,6 @@ export async function wrapProvider ( originalProvider, httpRpcClient, entryPoint, - smartAccountAPI - ).init() + smartAccountAPI, + ).init(); } diff --git a/src/base/index.ts b/src/base/index.ts index 8e164e98..d669b7f6 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -1,10 +1,10 @@ -export { EtherspotAccountAPI } from './EtherspotAccountAPI' -export { PaymasterAPI } from './PaymasterAPI' -export { wrapProvider } from './Provider' -export { ERC4337EthersSigner } from './ERC4337EthersSigner' -export { ERC4337EthersProvider } from './ERC4337EthersProvider' -export { ClientConfig } from './ClientConfig' -export { HttpRpcClient } from './HttpRpcClient' -export { DeterministicDeployer } from './DeterministicDeployer' -export { BLSAccountAPI } from './BLSAccountAPI' -export * from './calcPreVerificationGas' +export { EtherspotWalletAPI } from './EtherspotWalletAPI'; +export { PaymasterAPI } from './PaymasterAPI'; +export { wrapProvider } from './Provider'; +export { ERC4337EthersSigner } from './ERC4337EthersSigner'; +export { ERC4337EthersProvider } from './ERC4337EthersProvider'; +export { ClientConfig } from './ClientConfig'; +export { HttpRpcClient } from './HttpRpcClient'; +export { DeterministicDeployer } from './DeterministicDeployer'; +export { BLSAccountAPI } from './BLSAccountAPI'; +export * from './calcPreVerificationGas'; diff --git a/src/common/ERC4337Utils.ts b/src/common/ERC4337Utils.ts index badbeb13..242d75d2 100644 --- a/src/common/ERC4337Utils.ts +++ b/src/common/ERC4337Utils.ts @@ -1,22 +1,31 @@ -import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from 'ethers/lib/utils' -import { UserOperationStruct, EntryPoint__factory } from '../contracts' -import { ethers } from 'ethers' +import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from 'ethers/lib/utils'; +import { EntryPoint__factory, UserOperationStruct } from '../contracts'; +import { ethers } from 'ethers'; const entryPointAbi = EntryPoint__factory.abi; // UserOperation is the first parameter of validateUseOp -const validateUserOpMethod = 'simulateValidation' -const UserOpType = entryPointAbi.find(entry => entry.name === validateUserOpMethod)?.inputs[0] +const validateUserOpMethod = 'simulateValidation'; +const UserOpType = entryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs; if (UserOpType == null) { - throw new Error(`unable to find method ${validateUserOpMethod} in EP ${entryPointAbi.filter(x => x.type === 'function').map(x => x.name).join(',')}`) + throw new Error( + `unable to find method ${validateUserOpMethod} in EP ${entryPointAbi + .filter((x) => x.type === 'function') + .map((x) => x[0].name) + .join(',')}`, + ); } -export const AddressZero = ethers.constants.AddressZero +export const AddressZero = ethers.constants.AddressZero; -function encode (typevalues: Array<{ type: string, val: any }>, forSignature: boolean): string { - const types = typevalues.map(typevalue => typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type) - const values = typevalues.map((typevalue) => typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val) - return defaultAbiCoder.encode(types, values) +function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { + const types = typevalues.map((typevalue) => + typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type, + ); + const values = typevalues.map((typevalue) => + typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val, + ); + return defaultAbiCoder.encode(types, values); } /** @@ -25,75 +34,80 @@ function encode (typevalues: Array<{ type: string, val: any }>, forSignature: bo * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. */ -export function packUserOp (op: UserOperationStruct, forSignature = true): string { +export function packUserOp(op: UserOperationStruct, forSignature = true): string { if (forSignature) { // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value const userOpType = { components: [ { type: 'address', - name: 'sender' + name: 'sender', }, { type: 'uint256', - name: 'nonce' + name: 'nonce', }, { type: 'bytes', - name: 'initCode' + name: 'initCode', }, { type: 'bytes', - name: 'callData' + name: 'callData', }, { type: 'uint256', - name: 'callGasLimit' + name: 'callGasLimit', }, { type: 'uint256', - name: 'verificationGasLimit' + name: 'verificationGasLimit', }, { type: 'uint256', - name: 'preVerificationGas' + name: 'preVerificationGas', }, { type: 'uint256', - name: 'maxFeePerGas' + name: 'maxFeePerGas', }, { type: 'uint256', - name: 'maxPriorityFeePerGas' + name: 'maxPriorityFeePerGas', }, { type: 'bytes', - name: 'paymasterAndData' + name: 'paymasterAndData', }, { type: 'bytes', - name: 'signature' - } + name: 'signature', + }, ], name: 'userOp', - type: 'tuple' - } + type: 'tuple', + }; // console.log('hard-coded userOpType', userOpType) // console.log('from ABI userOpType', UserOpType) - let encoded = defaultAbiCoder.encode([userOpType as any], [{ - ...op, - signature: '0x' - }]) + let encoded = defaultAbiCoder.encode( + [userOpType as any], + [ + { + ...op, + signature: '0x', + }, + ], + ); // remove leading word (total length) and trailing word (zero-length signature) - encoded = '0x' + encoded.slice(66, encoded.length - 64) - return encoded + encoded = '0x' + encoded.slice(66, encoded.length - 64); + return encoded; } - const typevalues = (UserOpType as any).components.map((c: { name: keyof typeof op, type: string }) => ({ + const typevalues = (UserOpType as any).components.map((c: { name: keyof typeof op; type: string }) => ({ type: c.type, - val: op[c.name] - })) - return encode(typevalues, forSignature) + val: op[c.name], + })); + return encode(typevalues, forSignature); } /** @@ -105,36 +119,34 @@ export function packUserOp (op: UserOperationStruct, forSignature = true): strin * @param entryPoint * @param chainId */ -export function getUserOpHash (op: UserOperationStruct, entryPoint: string, chainId: number): string { - const userOpHash = keccak256(packUserOp(op, true)) - const enc = defaultAbiCoder.encode( - ['bytes32', 'address', 'uint256'], - [userOpHash, entryPoint, chainId]) - return keccak256(enc) +export function getUserOpHash(op: UserOperationStruct, entryPoint: string, chainId: number): string { + const userOpHash = keccak256(packUserOp(op, true)); + const enc = defaultAbiCoder.encode(['bytes32', 'address', 'uint256'], [userOpHash, entryPoint, chainId]); + return keccak256(enc); } -const ErrorSig = keccak256(Buffer.from('Error(string)')).slice(0, 10) // 0x08c379a0 -const FailedOpSig = keccak256(Buffer.from('FailedOp(uint256,string)')).slice(0, 10) // 0x220266b6 +const ErrorSig = keccak256(Buffer.from('Error(string)')).slice(0, 10); // 0x08c379a0 +const FailedOpSig = keccak256(Buffer.from('FailedOp(uint256,string)')).slice(0, 10); // 0x220266b6 interface DecodedError { - message: string - opIndex?: number + message: string; + opIndex?: number; } /** * decode bytes thrown by revert as Error(message) or FailedOp(opIndex,paymaster,message) */ -export function decodeErrorReason (error: string): DecodedError | undefined { +export function decodeErrorReason(error: string): DecodedError | undefined { if (error.startsWith(ErrorSig)) { - const [message] = defaultAbiCoder.decode(['string'], '0x' + error.substring(10)) - return { message } + const [message] = defaultAbiCoder.decode(['string'], '0x' + error.substring(10)); + return { message }; } else if (error.startsWith(FailedOpSig)) { - let [opIndex, message] = defaultAbiCoder.decode(['uint256', 'string'], '0x' + error.substring(10)) - message = `FailedOp: ${message as string}` + let [opIndex, message] = defaultAbiCoder.decode(['uint256', 'string'], '0x' + error.substring(10)); + message = `FailedOp: ${message as string}`; return { message, - opIndex - } + opIndex, + }; } } @@ -144,55 +156,57 @@ export function decodeErrorReason (error: string): DecodedError | undefined { * tested on geth, hardhat-node * usage: entryPoint.handleOps().catch(decodeError) */ -export function rethrowError (e: any): any { - let error = e - let parent = e +export function rethrowError(e: any): any { + let error = e; + let parent = e; if (error?.error != null) { - error = error.error + error = error.error; } while (error?.data != null) { - parent = error - error = error.data + parent = error; + error = error.data; } - const decoded = typeof error === 'string' && error.length > 2 ? decodeErrorReason(error) : undefined + const decoded = typeof error === 'string' && error.length > 2 ? decodeErrorReason(error) : undefined; if (decoded != null) { - e.message = decoded.message + e.message = decoded.message; if (decoded.opIndex != null) { // helper for chai: convert our FailedOp error into "Error(msg)" - const errorWithMsg = hexConcat([ErrorSig, defaultAbiCoder.encode(['string'], [decoded.message])]) + const errorWithMsg = hexConcat([ErrorSig, defaultAbiCoder.encode(['string'], [decoded.message])]); // modify in-place the error object: - parent.data = errorWithMsg + parent.data = errorWithMsg; } } - throw e + throw e; } /** * hexlify all members of object, recursively * @param obj */ -export function deepHexlify (obj: any): any { +export function deepHexlify(obj: any): any { if (typeof obj === 'function') { - return undefined + return undefined; } if (obj == null || typeof obj === 'string' || typeof obj === 'boolean') { - return obj + return obj; } else if (obj._isBigNumber != null || typeof obj !== 'object') { - return hexlify(obj).replace(/^0x0/, '0x') + return hexlify(obj).replace(/^0x0/, '0x'); } if (Array.isArray(obj)) { - return obj.map(member => deepHexlify(member)) + return obj.map((member) => deepHexlify(member)); } - return Object.keys(obj) - .reduce((set, key) => ({ + return Object.keys(obj).reduce( + (set, key) => ({ ...set, - [key]: deepHexlify(obj[key]) - }), {}) + [key]: deepHexlify(obj[key]), + }), + {}, + ); } // resolve all property and hexlify. // (UserOpMethodHandler receives data from the network, so we need to pack our generated values) -export function resolveHexlify (a: any): any { - return deepHexlify(a) -} \ No newline at end of file +export function resolveHexlify(a: any): any { + return deepHexlify(a); +} diff --git a/src/contracts/BLS.ts b/src/contracts/BLS.ts deleted file mode 100644 index 49b7bbdb..00000000 --- a/src/contracts/BLS.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface BLSInterface extends utils.Interface { - functions: { - "c_618a6e70(bytes8)": FunctionFragment; - "c_false618a6e70(bytes8)": FunctionFragment; - "c_true618a6e70(bytes8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "c_618a6e70", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_false618a6e70", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_true618a6e70", - values: [BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "c_618a6e70", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "c_false618a6e70", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_true618a6e70", - data: BytesLike - ): Result; - - events: {}; -} - -export interface BLS extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BLSInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - c_618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_false618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - c_true618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - c_618a6e70(c__618a6e70: BytesLike, overrides?: CallOverrides): Promise; - - c_false618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - c_618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - c_618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - c_618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true618a6e70( - c__618a6e70: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/BLSAccount.ts b/src/contracts/BLSAccount.ts deleted file mode 100644 index 68d478fb..00000000 --- a/src/contracts/BLSAccount.ts +++ /dev/null @@ -1,684 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface BLSAccountInterface extends utils.Interface { - functions: { - "addDeposit()": FunctionFragment; - "aggregator()": FunctionFragment; - "entryPoint()": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "executeTransaction(address,uint256,bytes)": FunctionFragment; - "getAggregator()": FunctionFragment; - "getBlsPublicKey()": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address)": FunctionFragment; - "nonce()": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "setBlsPublicKey(uint256[4])": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "addDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "aggregator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "entryPoint", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "executeBatch", - values: [string[], BytesLike[]] - ): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getAggregator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getBlsPublicKey", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getDeposit", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "initialize", values: [string]): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "proxiableUUID", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setBlsPublicKey", - values: [[BigNumberish, BigNumberish, BigNumberish, BigNumberish]] - ): string; - encodeFunctionData(functionFragment: "upgradeTo", values: [string]): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "withdrawDepositTo", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAggregator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getBlsPublicKey", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proxiableUUID", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setBlsPublicKey", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeToAndCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawDepositTo", - data: BytesLike - ): Result; - - events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "EtherspotInitialized(address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export type AdminChangedEvent = TypedEvent< - [string, string], - { previousAdmin: string; newAdmin: string } ->; - -export type AdminChangedEventFilter = TypedEventFilter; - -export type BeaconUpgradedEvent = TypedEvent<[string], { beacon: string }>; - -export type BeaconUpgradedEventFilter = TypedEventFilter; - -export type EtherspotInitializedEvent = TypedEvent< - [string, string], - { entryPoint: string; owner: string } ->; - -export type EtherspotInitializedEventFilter = - TypedEventFilter; - -export type InitializedEvent = TypedEvent<[number], { version: number }>; - -export type InitializedEventFilter = TypedEventFilter; - -export type PublicKeyChangedEvent = TypedEvent< - [ - [BigNumber, BigNumber, BigNumber, BigNumber], - [BigNumber, BigNumber, BigNumber, BigNumber] - ], - { - oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; - newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; - } ->; - -export type PublicKeyChangedEventFilter = - TypedEventFilter; - -export type UpgradedEvent = TypedEvent<[string], { implementation: string }>; - -export type UpgradedEventFilter = TypedEventFilter; - -export interface BLSAccount extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BLSAccountInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - aggregator(overrides?: CallOverrides): Promise<[string]>; - - entryPoint(overrides?: CallOverrides): Promise<[string]>; - - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAggregator(overrides?: CallOverrides): Promise<[string]>; - - getBlsPublicKey( - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; - - getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - - "initialize(address)"( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(uint256[4])"( - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - nonce(overrides?: CallOverrides): Promise<[BigNumber]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - - setBlsPublicKey( - newPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - aggregator(overrides?: CallOverrides): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAggregator(overrides?: CallOverrides): Promise; - - getBlsPublicKey( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - getDeposit(overrides?: CallOverrides): Promise; - - "initialize(address)"( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(uint256[4])"( - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - setBlsPublicKey( - newPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addDeposit(overrides?: CallOverrides): Promise; - - aggregator(overrides?: CallOverrides): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: CallOverrides - ): Promise; - - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: CallOverrides - ): Promise; - - getAggregator(overrides?: CallOverrides): Promise; - - getBlsPublicKey( - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; - - getDeposit(overrides?: CallOverrides): Promise; - - "initialize(address)"( - anOwner: string, - overrides?: CallOverrides - ): Promise; - - "initialize(uint256[4])"( - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - setBlsPublicKey( - newPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: CallOverrides - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: CallOverrides - ): Promise; - - withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AdminChanged(address,address)"( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - AdminChanged( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - - "BeaconUpgraded(address)"( - beacon?: string | null - ): BeaconUpgradedEventFilter; - BeaconUpgraded(beacon?: string | null): BeaconUpgradedEventFilter; - - "EtherspotInitialized(address,address)"( - entryPoint?: string | null, - owner?: string | null - ): EtherspotInitializedEventFilter; - EtherspotInitialized( - entryPoint?: string | null, - owner?: string | null - ): EtherspotInitializedEventFilter; - - "Initialized(uint8)"(version?: null): InitializedEventFilter; - Initialized(version?: null): InitializedEventFilter; - - "PublicKeyChanged(uint256[4],uint256[4])"( - oldPublicKey?: null, - newPublicKey?: null - ): PublicKeyChangedEventFilter; - PublicKeyChanged( - oldPublicKey?: null, - newPublicKey?: null - ): PublicKeyChangedEventFilter; - - "Upgraded(address)"(implementation?: string | null): UpgradedEventFilter; - Upgraded(implementation?: string | null): UpgradedEventFilter; - }; - - estimateGas: { - addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - aggregator(overrides?: CallOverrides): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAggregator(overrides?: CallOverrides): Promise; - - getBlsPublicKey(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - "initialize(address)"( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(uint256[4])"( - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - setBlsPublicKey( - newPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - aggregator(overrides?: CallOverrides): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAggregator(overrides?: CallOverrides): Promise; - - getBlsPublicKey(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - "initialize(address)"( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(uint256[4])"( - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - setBlsPublicKey( - newPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/src/contracts/BLSAccountFactory.ts b/src/contracts/BLSAccountFactory.ts deleted file mode 100644 index 7ac54f04..00000000 --- a/src/contracts/BLSAccountFactory.ts +++ /dev/null @@ -1,166 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface BLSAccountFactoryInterface extends utils.Interface { - functions: { - "accountImplementation()": FunctionFragment; - "createAccount(uint256,uint256[4])": FunctionFragment; - "getAddress(uint256,uint256[4])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "accountImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "createAccount", - values: [ - BigNumberish, - [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ] - ): string; - encodeFunctionData( - functionFragment: "getAddress", - values: [ - BigNumberish, - [BigNumberish, BigNumberish, BigNumberish, BigNumberish] - ] - ): string; - - decodeFunctionResult( - functionFragment: "accountImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "createAccount", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; - - events: {}; -} - -export interface BLSAccountFactory extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BLSAccountFactoryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accountImplementation(overrides?: CallOverrides): Promise<[string]>; - - createAccount( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise<[string]>; - }; - - accountImplementation(overrides?: CallOverrides): Promise; - - createAccount( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - callStatic: { - accountImplementation(overrides?: CallOverrides): Promise; - - createAccount( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - getAddress( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - accountImplementation(overrides?: CallOverrides): Promise; - - createAccount( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - accountImplementation( - overrides?: CallOverrides - ): Promise; - - createAccount( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getAddress( - salt: BigNumberish, - aPublicKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/BLSHelper.ts b/src/contracts/BLSHelper.ts deleted file mode 100644 index 55d01249..00000000 --- a/src/contracts/BLSHelper.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface BLSHelperInterface extends utils.Interface { - functions: { - "c_falseffed44a6(bytes8)": FunctionFragment; - "c_ffed44a6(bytes8)": FunctionFragment; - "c_trueffed44a6(bytes8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "c_falseffed44a6", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_ffed44a6", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_trueffed44a6", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "c_falseffed44a6", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "c_ffed44a6", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "c_trueffed44a6", - data: BytesLike - ): Result; - - events: {}; -} - -export interface BLSHelper extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BLSHelperInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - c_falseffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - c_ffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_trueffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - c_falseffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_ffed44a6(c__ffed44a6: BytesLike, overrides?: CallOverrides): Promise; - - c_trueffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - c_falseffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_ffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_trueffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - c_falseffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_ffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_trueffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - c_falseffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_ffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_trueffed44a6( - c__ffed44a6: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/BLSOpen.ts b/src/contracts/BLSOpen.ts deleted file mode 100644 index 5fc7cbfd..00000000 --- a/src/contracts/BLSOpen.ts +++ /dev/null @@ -1,231 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface BLSOpenInterface extends utils.Interface { - functions: { - "hashToPoint(bytes32,bytes)": FunctionFragment; - "isZeroBLSKey(uint256[4])": FunctionFragment; - "verifyMultiple(uint256[2],uint256[4][],uint256[2][])": FunctionFragment; - "verifySingle(uint256[2],uint256[4],uint256[2])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "hashToPoint", - values: [BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isZeroBLSKey", - values: [[BigNumberish, BigNumberish, BigNumberish, BigNumberish]] - ): string; - encodeFunctionData( - functionFragment: "verifyMultiple", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - [BigNumberish, BigNumberish][] - ] - ): string; - encodeFunctionData( - functionFragment: "verifySingle", - values: [ - [BigNumberish, BigNumberish], - [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - [BigNumberish, BigNumberish] - ] - ): string; - - decodeFunctionResult( - functionFragment: "hashToPoint", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isZeroBLSKey", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "verifyMultiple", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "verifySingle", - data: BytesLike - ): Result; - - events: {}; -} - -export interface BLSOpen extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: BLSOpenInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - hashToPoint( - domain: BytesLike, - message: BytesLike, - overrides?: CallOverrides - ): Promise<[[BigNumber, BigNumber]]>; - - isZeroBLSKey( - blsKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise<[boolean]>; - - verifyMultiple( - signature: [BigNumberish, BigNumberish], - pubkeys: [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - messages: [BigNumberish, BigNumberish][], - overrides?: CallOverrides - ): Promise<[boolean]>; - - verifySingle( - signature: [BigNumberish, BigNumberish], - pubkey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - message: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - hashToPoint( - domain: BytesLike, - message: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - isZeroBLSKey( - blsKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - verifyMultiple( - signature: [BigNumberish, BigNumberish], - pubkeys: [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - messages: [BigNumberish, BigNumberish][], - overrides?: CallOverrides - ): Promise; - - verifySingle( - signature: [BigNumberish, BigNumberish], - pubkey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - message: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - callStatic: { - hashToPoint( - domain: BytesLike, - message: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber, BigNumber]>; - - isZeroBLSKey( - blsKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - verifyMultiple( - signature: [BigNumberish, BigNumberish], - pubkeys: [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - messages: [BigNumberish, BigNumberish][], - overrides?: CallOverrides - ): Promise; - - verifySingle( - signature: [BigNumberish, BigNumberish], - pubkey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - message: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - hashToPoint( - domain: BytesLike, - message: BytesLike, - overrides?: CallOverrides - ): Promise; - - isZeroBLSKey( - blsKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - verifyMultiple( - signature: [BigNumberish, BigNumberish], - pubkeys: [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - messages: [BigNumberish, BigNumberish][], - overrides?: CallOverrides - ): Promise; - - verifySingle( - signature: [BigNumberish, BigNumberish], - pubkey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - message: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - hashToPoint( - domain: BytesLike, - message: BytesLike, - overrides?: CallOverrides - ): Promise; - - isZeroBLSKey( - blsKey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - - verifyMultiple( - signature: [BigNumberish, BigNumberish], - pubkeys: [BigNumberish, BigNumberish, BigNumberish, BigNumberish][], - messages: [BigNumberish, BigNumberish][], - overrides?: CallOverrides - ): Promise; - - verifySingle( - signature: [BigNumberish, BigNumberish], - pubkey: [BigNumberish, BigNumberish, BigNumberish, BigNumberish], - message: [BigNumberish, BigNumberish], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/UserOperationLib.ts b/src/contracts/UserOperationLib.ts deleted file mode 100644 index e1067153..00000000 --- a/src/contracts/UserOperationLib.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface UserOperationLibInterface extends utils.Interface { - functions: { - "c_37cac050(bytes8)": FunctionFragment; - "c_false37cac050(bytes8)": FunctionFragment; - "c_true37cac050(bytes8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "c_37cac050", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_false37cac050", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "c_true37cac050", - values: [BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "c_37cac050", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "c_false37cac050", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "c_true37cac050", - data: BytesLike - ): Result; - - events: {}; -} - -export interface UserOperationLib extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: UserOperationLibInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - c_37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise<[void]>; - - c_false37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - c_true37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - c_37cac050(c__37cac050: BytesLike, overrides?: CallOverrides): Promise; - - c_false37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - c_37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - c_37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - c_37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_false37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - - c_true37cac050( - c__37cac050: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/common.ts b/src/contracts/common.ts index 2fc40c7f..35f31be9 100644 --- a/src/contracts/common.ts +++ b/src/contracts/common.ts @@ -1,18 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; +import type { Listener } from '@ethersproject/providers'; +import type { Event, EventFilter } from 'ethers'; -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { +export interface TypedEvent = any, TArgsObject = any> extends Event { args: TArgsArray & TArgsObject; } -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} +export interface TypedEventFilter<_TEvent extends TypedEvent> extends EventFilter {} export interface TypedListener { (...listenerArg: [...__TypechainArgsArray, TEvent]): void; @@ -21,10 +17,7 @@ export interface TypedListener { type __TypechainArgsArray = T extends TypedEvent ? U : never; export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; + (eventFilter: TypedEventFilter, listener: TypedListener): TRes; (eventName: string, listener: Listener): TRes; } @@ -32,13 +25,8 @@ export type MinEthersFactory = { deploy(...a: ARGS[]): Promise; }; -export type GetContractTypeFromFactory = F extends MinEthersFactory< - infer C, - any -> - ? C - : never; +export type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; -export type GetARGsTypeFromFactory = F extends MinEthersFactory - ? Parameters - : never; +export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; + +export type PromiseOrValue = T | Promise; diff --git a/src/contracts/factories/BLSAccountFactory__factory.ts b/src/contracts/factories/BLSAccountFactory__factory.ts deleted file mode 100644 index 952048d8..00000000 --- a/src/contracts/factories/BLSAccountFactory__factory.ts +++ /dev/null @@ -1,146 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BLSAccountFactory, - BLSAccountFactoryInterface, -} from "../BLSAccountFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "accountImplementation", - outputs: [ - { - internalType: "contract BLSAccount", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "aPublicKey", - type: "uint256[4]", - }, - ], - name: "createAccount", - outputs: [ - { - internalType: "contract BLSAccount", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - { - internalType: "uint256[4]", - name: "aPublicKey", - type: "uint256[4]", - }, - ], - name: "getAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620049433803806200494383398181016040528101906200003791906200016a565b81816040516200004790620000ad565b620000549291906200022d565b604051809103906000f08015801562000071573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050506200025a565b612fd8806200196b83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ed82620000c0565b9050919050565b60006200010182620000e0565b9050919050565b6200011381620000f4565b81146200011f57600080fd5b50565b600081519050620001338162000108565b92915050565b6200014481620000e0565b81146200015057600080fd5b50565b600081519050620001648162000139565b92915050565b60008060408385031215620001845762000183620000bb565b5b6000620001948582860162000122565b9250506020620001a78582860162000153565b9150509250929050565b6000819050919050565b6000620001dc620001d6620001d084620000c0565b620001b1565b620000c0565b9050919050565b6000620001f082620001bb565b9050919050565b60006200020482620001e3565b9050919050565b6200021681620001f7565b82525050565b6200022781620000e0565b82525050565b60006040820190506200024460008301856200020b565b6200025360208301846200021c565b9392505050565b6080516116e8620002836000396000818160db01528181610145015261023601526116e86000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806319c2a1b2146200006d578063de3398dd14620000a3575b600080fd5b62000055620000d9565b604051620000649190620003fc565b60405180910390f35b6200008b6004803603810190620000859190620005c6565b620000fd565b6040516200009a9190620003fc565b60405180910390f35b620000c16004803603810190620000bb9190620005c6565b62000204565b604051620000d0919062000632565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010c848462000204565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200013f578192505050620001fe565b8460001b7f0000000000000000000000000000000000000000000000000000000000000000856040516024016200017791906200070a565b60405160208183030381529060405263ee472f3660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001ca9062000363565b620001d7929190620007ba565b8190604051809103906000f5905080158015620001f8573d6000803e3d6000fd5b50925050505b92915050565b6000620002fe8360001b60405180602001620002209062000363565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000856040516024016200026891906200070a565b60405160208183030381529060405263ee472f3660e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002c0929190620007ba565b604051602081830303815290604052604051602001620002e292919062000830565b6040516020818303038152906040528051906020012062000306565b905092915050565b6000620003158383306200031d565b905092915050565b60008060ff60f81b8386866040516020016200033d949392919062000928565b6040516020818303038152906040528051906020012090508060001c9150509392505050565b610d5d806200097f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003bc620003b6620003b08462000371565b62000391565b62000371565b9050919050565b6000620003d0826200039b565b9050919050565b6000620003e482620003c3565b9050919050565b620003f681620003d7565b82525050565b6000602082019050620004136000830184620003eb565b92915050565b6000604051905090565b600080fd5b6000819050919050565b6200043d8162000428565b81146200044957600080fd5b50565b6000813590506200045d8162000432565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004b38262000468565b810181811067ffffffffffffffff82111715620004d557620004d462000479565b5b80604052505050565b6000620004ea62000419565b9050620004f88282620004a8565b919050565b600067ffffffffffffffff8211156200051b576200051a62000479565b5b602082029050919050565b600080fd5b6000620005426200053c84620004fd565b620004de565b905080602084028301858111156200055f576200055e62000526565b5b835b818110156200058c57806200057788826200044c565b84526020840193505060208101905062000561565b5050509392505050565b600082601f830112620005ae57620005ad62000463565b5b6004620005bd8482856200052b565b91505092915050565b60008060a08385031215620005e057620005df62000423565b5b6000620005f0858286016200044c565b9250506020620006038582860162000596565b9150509250929050565b60006200061a8262000371565b9050919050565b6200062c816200060d565b82525050565b600060208201905062000649600083018462000621565b92915050565b600060049050919050565b600081905092915050565b6000819050919050565b6200067a8162000428565b82525050565b60006200068e83836200066f565b60208301905092915050565b6000602082019050919050565b620006b2816200064f565b620006be81846200065a565b9250620006cb8262000665565b8060005b8381101562000702578151620006e6878262000680565b9650620006f3836200069a565b925050600181019050620006cf565b505050505050565b6000608082019050620007216000830184620006a7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200076357808201518184015260208101905062000746565b8381111562000773576000848401525b50505050565b6000620007868262000727565b62000792818562000732565b9350620007a481856020860162000743565b620007af8162000468565b840191505092915050565b6000604082019050620007d1600083018562000621565b8181036020830152620007e5818462000779565b90509392505050565b600081905092915050565b6000620008068262000727565b620008128185620007ee565b93506200082481856020860162000743565b80840191505092915050565b60006200083e8285620007f9565b91506200084c8284620007f9565b91508190509392505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b620008a36200089d8262000858565b62000884565b82525050565b60008160601b9050919050565b6000620008c382620008a9565b9050919050565b6000620008d782620008b6565b9050919050565b620008f3620008ed826200060d565b620008ca565b82525050565b6000819050919050565b6000819050919050565b620009226200091c82620008f9565b62000903565b82525050565b60006200093682876200088e565b600182019150620009488286620008de565b6014820191506200095a82856200090d565b6020820191506200096c82846200090d565b6020820191508190509594505050505056fe608060405260405162000d5d38038062000d5d8339818101604052810190620000299190620005d4565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6200005b919062000673565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b14620000935762000092620006ae565b5b620000a782826000620000af60201b60201c565b5050620008f4565b620000c083620000f260201b60201c565b600082511180620000ce5750805b15620000ed57620000eb83836200014960201b620000371760201c565b505b505050565b62000103816200017f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606062000177838360405180606001604052806027815260200162000d36602791396200025560201b60201c565b905092915050565b62000195816200033960201b620000641760201c565b620001d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ce9062000764565b60405180910390fd5b80620002117f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200035c60201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606062000268846200033960201b60201c565b620002aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a190620007fc565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002d491906200086b565b600060405180830381855af49150503d806000811462000311576040519150601f19603f3d011682016040523d82523d6000602084013e62000316565b606091505b50915091506200032e8282866200036660201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200037857829050620003cb565b6000835111156200038c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c29190620008d0565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041382620003e6565b9050919050565b620004258162000406565b81146200043157600080fd5b50565b60008151905062000445816200041a565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004a08262000455565b810181811067ffffffffffffffff82111715620004c257620004c162000466565b5b80604052505050565b6000620004d7620003d2565b9050620004e5828262000495565b919050565b600067ffffffffffffffff82111562000508576200050762000466565b5b620005138262000455565b9050602081019050919050565b60005b838110156200054057808201518184015260208101905062000523565b8381111562000550576000848401525b50505050565b60006200056d6200056784620004ea565b620004cb565b9050828152602081018484840111156200058c576200058b62000450565b5b6200059984828562000520565b509392505050565b600082601f830112620005b957620005b86200044b565b5b8151620005cb84826020860162000556565b91505092915050565b60008060408385031215620005ee57620005ed620003dc565b5b6000620005fe8582860162000434565b925050602083015167ffffffffffffffff811115620006225762000621620003e1565b5b6200063085828601620005a1565b9150509250929050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000680826200063a565b91506200068d836200063a565b925082821015620006a357620006a262000644565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006200074c602d83620006dd565b91506200075982620006ee565b604082019050919050565b600060208201905081810360008301526200077f816200073d565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000620007e4602683620006dd565b9150620007f18262000786565b604082019050919050565b600060208201905081810360008301526200081781620007d5565b9050919050565b600081519050919050565b600081905092915050565b600062000841826200081e565b6200084d818562000829565b93506200085f81856020860162000520565b80840191505092915050565b600062000879828462000834565b915081905092915050565b600081519050919050565b60006200089c8262000884565b620008a88185620006dd565b9350620008ba81856020860162000520565b620008c58162000455565b840191505092915050565b60006020820190508181036000830152620008ec81846200088f565b905092915050565b61043280620009046000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103ff602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d610195565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606100d384610064565b610112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610109906102d6565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161013a9190610370565b600060405180830381855af49150503d8060008114610175576040519150601f19603f3d011682016040523d82523d6000602084013e61017a565b606091505b509150915061018a8282866101ec565b925050509392505050565b60006101c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156101fc5782905061024c565b60008351111561020f5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024391906103dc565b60405180910390fd5b9392505050565b600082825260208201905092915050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006102c0602683610253565b91506102cb82610264565b604082019050919050565b600060208201905081810360008301526102ef816102b3565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561032a57808201518184015260208101905061030f565b83811115610339576000848401525b50505050565b600061034a826102f6565b6103548185610301565b935061036481856020860161030c565b80840191505092915050565b600061037c828461033f565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b60006103ae82610387565b6103b88185610253565b93506103c881856020860161030c565b6103d181610392565b840191505092915050565b600060208201905081810360008301526103f681846103a3565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080c000a416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080c000a60e06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162002fd838038062002fd883398181016040528101906200006a91906200018b565b818073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050620001d2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200010e82620000e1565b9050919050565b6000620001228262000101565b9050919050565b620001348162000115565b81146200014057600080fd5b50565b600081519050620001548162000129565b92915050565b620001658162000101565b81146200017157600080fd5b50565b60008151905062000185816200015a565b92915050565b60008060408385031215620001a557620001a4620000dc565b5b6000620001b58582860162000143565b9250506020620001c88582860162000174565b9150509250929050565b60805160a05160c051612da562000233600039600081816105aa015281816107590152610dda015260008181610b2901526115120152600081816105ce0152818161065d015281816108dc0152818161096b0152610a1b0152612da56000f3fe60806040526004361061010d5760003560e01c80634f1ef28611610095578063b0d691fe11610064578063b0d691fe14610320578063c399ec881461034b578063c4d66de814610376578063e02afbae1461039f578063ee472f36146103ca57610114565b80634f1ef2861461028357806352d1902d1461029f5780638da5cb5b146102ca578063affed0e0146102f557610114565b80633659cfe6116100dc5780633659cfe6146101d35780633ad59dbc146101fc5780633f579f42146102275780634a58db19146102505780634d44560d1461025a57610114565b80630825d1fc1461011957806318dfb3c71461015657806318fc5c441461017f578063245a7bfc146101a857610114565b3661011457005b600080fd5b34801561012557600080fd5b50610140600480360381019061013b91906119c4565b6103f3565b60405161014d9190611a56565b60405180910390f35b34801561016257600080fd5b5061017d60048036038101906101789190611b2c565b61043f565b005b34801561018b57600080fd5b506101a660048036038101906101a19190611cea565b610551565b005b3480156101b457600080fd5b506101bd6105a8565b6040516101ca9190611d26565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611d41565b6105cc565b005b34801561020857600080fd5b50610211610755565b60405161021e9190611d26565b60405180910390f35b34801561023357600080fd5b5061024e60048036038101906102499190611dc4565b61077d565b005b6102586107da565b005b34801561026657600080fd5b50610281600480360381019061027c9190611e76565b61085a565b005b61029d60048036038101906102989190611f6b565b6108da565b005b3480156102ab57600080fd5b506102b4610a17565b6040516102c19190611fd6565b60405180910390f35b3480156102d657600080fd5b506102df610ad0565b6040516102ec9190611d26565b60405180910390f35b34801561030157600080fd5b5061030a610af6565b6040516103179190611a56565b60405180910390f35b34801561032c57600080fd5b50610335610b25565b6040516103429190612050565b60405180910390f35b34801561035757600080fd5b50610360610b4d565b60405161036d9190611a56565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190611d41565b610bd5565b005b3480156103ab57600080fd5b506103b4610c6b565b6040516103c19190612116565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190611cea565b610cb6565b005b60006103fd610d5f565b610408858585610dd6565b9050600085806040019061041c9190612140565b9050141561042e5761042d85610e71565b5b61043782610f1f565b949350505050565b610447610fbb565b81819050848490501461048f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048690612226565b60405180910390fd5b60005b8484905081101561054a576105378585838181106104b3576104b2612246565b5b90506020020160208101906104c89190611d41565b60008585858181106104dd576104dc612246565b5b90506020028101906104ef9190612140565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061108a565b8080610542906122a4565b915050610492565b5050505050565b61055961110e565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a8360028260405161058b9291906123b1565b60405180910390a18060029060046105a4929190611842565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561065b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106529061244d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661069a6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e7906124df565b60405180910390fd5b6106f98161122d565b61075281600067ffffffffffffffff81111561071857610717611bbe565b5b6040519080825280601f01601f19166020018201604052801561074a5781602001600182028036833780820191505090505b506000611238565b50565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610785610fbb565b6107d4848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061108a565b50505050565b60006107e4610b25565b73ffffffffffffffffffffffffffffffffffffffff163460405161080790612530565b60006040518083038185875af1925050503d8060008114610844576040519150601f19603f3d011682016040523d82523d6000602084013e610849565b606091505b505090508061085757600080fd5b50565b61086261110e565b61086a610b25565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016108a4929190612554565b600060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061244d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166109a86111d6565b73ffffffffffffffffffffffffffffffffffffffff16146109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906124df565b60405180910390fd5b610a078261122d565b610a1382826001611238565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e906125ef565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000610b57610b25565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b8f9190611d26565b602060405180830381865afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190612624565b905090565b6000610be160016113a6565b90508015610c05576001600060016101000a81548160ff0219169083151502179055505b610c0e82611496565b8015610c675760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c5e9190612699565b60405180910390a15b5050565b610c73611882565b6002600480602002604051908101604052809291908260048015610cac576020028201915b815481526020019060010190808311610c98575b5050505050905090565b6000610cc260016113a6565b90508015610ce6576001600060016101000a81548160ff0219169083151502179055505b610cf06000611496565b816002906004610d01929190611842565b508015610d5b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d529190612699565b60405180910390a15b5050565b610d67610b25565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90612726565b60405180910390fd5b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90612792565b60405180910390fd5b600090509392505050565b80602001356000600281819054906101000a90046bffffffffffffffffffffffff1680929190610ea0906127ca565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061284b565b60405180910390fd5b50565b60008114610fb85760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051610f6f90612530565b600060405180830381858888f193505050503d8060008114610fad576040519150601f19603f3d011682016040523d82523d6000602084013e610fb2565b606091505b50509050505b50565b610fc3610b25565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110495750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906128dd565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516110b3919061296c565b60006040518083038185875af1925050503d80600081146110f0576040519150601f19603f3d011682016040523d82523d6000602084013e6110f5565b606091505b50915091508161110757805160208201fd5b5050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061119557503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb906129cf565b60405180910390fd5b565b60006112047f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611576565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61123561110e565b50565b6112647f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611580565b60000160009054906101000a900460ff1615611288576112838361158a565b6113a1565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112f057506040513d601f19601f820116820180604052508101906112ed9190612a04565b60015b61132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690612aa3565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90612b35565b60405180910390fd5b506113a0838383611643565b5b505050565b60008060019054906101000a900460ff161561141d5760018260ff161480156113d557506113d33061166f565b155b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90612bc7565b60405180910390fd5b60009050611491565b8160ff1660008054906101000a900460ff1660ff1610611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990612bc7565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167fc053dd35e22ddb3ae5f46f48289137bbba99fdd1068c0f7d3069bb62dab393fd60405160405180910390a350565b6000819050919050565b6000819050919050565b6115938161166f565b6115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c990612c59565b60405180910390fd5b806115ff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611576565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61164c83611692565b6000825111806116595750805b1561166a5761166883836116e1565b505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61169b8161158a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606117068383604051806060016040528060278152602001612d726027913961170e565b905092915050565b60606117198461166f565b611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90612ceb565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611780919061296c565b600060405180830381855af49150503d80600081146117bb576040519150601f19603f3d011682016040523d82523d6000602084013e6117c0565b606091505b50915091506117d08282866117db565b925050509392505050565b606083156117eb5782905061183b565b6000835111156117fe5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329190612d4f565b60405180910390fd5b9392505050565b8260048101928215611871579160200282015b82811115611870578251825591602001919060010190611855565b5b50905061187e91906118a4565b5090565b6040518060800160405280600490602082028036833780820191505090505090565b5b808211156118bd5760008160009055506001016118a5565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600061016082840312156118f1576118f06118d5565b5b81905092915050565b6000819050919050565b61190d816118fa565b811461191857600080fd5b50565b60008135905061192a81611904565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061195b82611930565b9050919050565b61196b81611950565b811461197657600080fd5b50565b60008135905061198881611962565b92915050565b6000819050919050565b6119a18161198e565b81146119ac57600080fd5b50565b6000813590506119be81611998565b92915050565b600080600080608085870312156119de576119dd6118cb565b5b600085013567ffffffffffffffff8111156119fc576119fb6118d0565b5b611a08878288016118da565b9450506020611a198782880161191b565b9350506040611a2a87828801611979565b9250506060611a3b878288016119af565b91505092959194509250565b611a508161198e565b82525050565b6000602082019050611a6b6000830184611a47565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611a9657611a95611a71565b5b8235905067ffffffffffffffff811115611ab357611ab2611a76565b5b602083019150836020820283011115611acf57611ace611a7b565b5b9250929050565b60008083601f840112611aec57611aeb611a71565b5b8235905067ffffffffffffffff811115611b0957611b08611a76565b5b602083019150836020820283011115611b2557611b24611a7b565b5b9250929050565b60008060008060408587031215611b4657611b456118cb565b5b600085013567ffffffffffffffff811115611b6457611b636118d0565b5b611b7087828801611a80565b9450945050602085013567ffffffffffffffff811115611b9357611b926118d0565b5b611b9f87828801611ad6565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611bf682611bad565b810181811067ffffffffffffffff82111715611c1557611c14611bbe565b5b80604052505050565b6000611c286118c1565b9050611c348282611bed565b919050565b600067ffffffffffffffff821115611c5457611c53611bbe565b5b602082029050919050565b6000611c72611c6d84611c39565b611c1e565b90508060208402830185811115611c8c57611c8b611a7b565b5b835b81811015611cb55780611ca188826119af565b845260208401935050602081019050611c8e565b5050509392505050565b600082601f830112611cd457611cd3611a71565b5b6004611ce1848285611c5f565b91505092915050565b600060808284031215611d0057611cff6118cb565b5b6000611d0e84828501611cbf565b91505092915050565b611d2081611950565b82525050565b6000602082019050611d3b6000830184611d17565b92915050565b600060208284031215611d5757611d566118cb565b5b6000611d6584828501611979565b91505092915050565b60008083601f840112611d8457611d83611a71565b5b8235905067ffffffffffffffff811115611da157611da0611a76565b5b602083019150836001820283011115611dbd57611dbc611a7b565b5b9250929050565b60008060008060608587031215611dde57611ddd6118cb565b5b6000611dec87828801611979565b9450506020611dfd878288016119af565b935050604085013567ffffffffffffffff811115611e1e57611e1d6118d0565b5b611e2a87828801611d6e565b925092505092959194509250565b6000611e4382611930565b9050919050565b611e5381611e38565b8114611e5e57600080fd5b50565b600081359050611e7081611e4a565b92915050565b60008060408385031215611e8d57611e8c6118cb565b5b6000611e9b85828601611e61565b9250506020611eac858286016119af565b9150509250929050565b600080fd5b600067ffffffffffffffff821115611ed657611ed5611bbe565b5b611edf82611bad565b9050602081019050919050565b82818337600083830152505050565b6000611f0e611f0984611ebb565b611c1e565b905082815260208101848484011115611f2a57611f29611eb6565b5b611f35848285611eec565b509392505050565b600082601f830112611f5257611f51611a71565b5b8135611f62848260208601611efb565b91505092915050565b60008060408385031215611f8257611f816118cb565b5b6000611f9085828601611979565b925050602083013567ffffffffffffffff811115611fb157611fb06118d0565b5b611fbd85828601611f3d565b9150509250929050565b611fd0816118fa565b82525050565b6000602082019050611feb6000830184611fc7565b92915050565b6000819050919050565b600061201661201161200c84611930565b611ff1565b611930565b9050919050565b600061202882611ffb565b9050919050565b600061203a8261201d565b9050919050565b61204a8161202f565b82525050565b60006020820190506120656000830184612041565b92915050565b600060049050919050565b600081905092915050565b6000819050919050565b6120948161198e565b82525050565b60006120a6838361208b565b60208301905092915050565b6000602082019050919050565b6120c88161206b565b6120d28184612076565b92506120dd82612081565b8060005b8381101561210e5781516120f5878261209a565b9650612100836120b2565b9250506001810190506120e1565b505050505050565b600060808201905061212b60008301846120bf565b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261215d5761215c612131565b5b80840192508235915067ffffffffffffffff82111561217f5761217e612136565b5b60208301925060018202360383131561219b5761219a61213b565b5b509250929050565b600082825260208201905092915050565b7f457468657273706f744163636f756e743a3a206578656375746542617463682060008201527f2d2077726f6e67206172726179206c656e677468730000000000000000000000602082015250565b60006122106035836121a3565b915061221b826121b4565b604082019050919050565b6000602082019050818103600083015261223f81612203565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122af8261198e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122e2576122e1612275565b5b600182019050919050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b600061232c61232783612302565b61230f565b9050919050565b600061233f8254612319565b9050919050565b6000600182019050919050565b61235c816122ed565b6123668184612076565b9250612371826122f8565b8060005b838110156123a95761238682612333565b612390878261209a565b965061239b83612346565b925050600181019050612375565b505050505050565b6000610100820190506123c76000830185612353565b6123d460808301846120bf565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612437602c836121a3565b9150612442826123db565b604082019050919050565b600060208201905081810360008301526124668161242a565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006124c9602c836121a3565b91506124d48261246d565b604082019050919050565b600060208201905081810360008301526124f8816124bc565b9050919050565b600081905092915050565b50565b600061251a6000836124ff565b91506125258261250a565b600082019050919050565b600061253b8261250d565b9150819050919050565b61254e81611e38565b82525050565b60006040820190506125696000830185612545565b6125766020830184611a47565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006125d96038836121a3565b91506125e48261257d565b604082019050919050565b60006020820190508181036000830152612608816125cc565b9050919050565b60008151905061261e81611998565b92915050565b60006020828403121561263a576126396118cb565b5b60006126488482850161260f565b91505092915050565b6000819050919050565b600060ff82169050919050565b600061268361267e61267984612651565b611ff1565b61265b565b9050919050565b61269381612668565b82525050565b60006020820190506126ae600083018461268a565b92915050565b7f457468657273706f744163636f756e743a204e6f742066726f6d20456e74727960008201527f506f696e74000000000000000000000000000000000000000000000000000000602082015250565b60006127106025836121a3565b915061271b826126b4565b604082019050919050565b6000602082019050818103600083015261273f81612703565b9050919050565b7f424c534163636f756e743a2077726f6e672061676772656761746f7200000000600082015250565b600061277c601c836121a3565b915061278782612746565b602082019050919050565b600060208201905081810360008301526127ab8161276f565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006127d5826127b2565b91506bffffffffffffffffffffffff8214156127f4576127f3612275565b5b600182019050919050565b7f457468657273706f744163636f756e743a3a20496e76616c6964206e6f6e6365600082015250565b60006128356020836121a3565b9150612840826127ff565b602082019050919050565b6000602082019050818103600083015261286481612828565b9050919050565b7f457468657273706f744163636f756e743a3a204e6f74204f776e6572206f722060008201527f456e747279506f696e7400000000000000000000000000000000000000000000602082015250565b60006128c7602a836121a3565b91506128d28261286b565b604082019050919050565b600060208201905081810360008301526128f6816128ba565b9050919050565b600081519050919050565b60005b8381101561292657808201518184015260208101905061290b565b83811115612935576000848401525b50505050565b6000612946826128fd565b61295081856124ff565b9350612960818560208601612908565b80840191505092915050565b6000612978828461293b565b915081905092915050565b7f457468657273706f744163636f756e743a3a204f6e6c79206f776e6572000000600082015250565b60006129b9601d836121a3565b91506129c482612983565b602082019050919050565b600060208201905081810360008301526129e8816129ac565b9050919050565b6000815190506129fe81611904565b92915050565b600060208284031215612a1a57612a196118cb565b5b6000612a28848285016129ef565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612a8d602e836121a3565b9150612a9882612a31565b604082019050919050565b60006020820190508181036000830152612abc81612a80565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612b1f6029836121a3565b9150612b2a82612ac3565b604082019050919050565b60006020820190508181036000830152612b4e81612b12565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612bb1602e836121a3565b9150612bbc82612b55565b604082019050919050565b60006020820190508181036000830152612be081612ba4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000612c43602d836121a3565b9150612c4e82612be7565b604082019050919050565b60006020820190508181036000830152612c7281612c36565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000612cd56026836121a3565b9150612ce082612c79565b604082019050919050565b60006020820190508181036000830152612d0481612cc8565b9050919050565b600081519050919050565b6000612d2182612d0b565b612d2b81856121a3565b9350612d3b818560208601612908565b612d4481611bad565b840191505092915050565b60006020820190508181036000830152612d698184612d16565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080c000a"; - -type BLSAccountFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSAccountFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BLSAccountFactory__factory extends ContractFactory { - constructor(...args: BLSAccountFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - entryPoint: string, - aggregator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - entryPoint, - aggregator, - overrides || {} - ) as Promise; - } - getDeployTransaction( - entryPoint: string, - aggregator: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(entryPoint, aggregator, overrides || {}); - } - attach(address: string): BLSAccountFactory { - return super.attach(address) as BLSAccountFactory; - } - connect(signer: Signer): BLSAccountFactory__factory { - return super.connect(signer) as BLSAccountFactory__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSAccountFactoryInterface { - return new utils.Interface(_abi) as BLSAccountFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSAccountFactory { - return new Contract(address, _abi, signerOrProvider) as BLSAccountFactory; - } -} diff --git a/src/contracts/factories/BLSAccount__factory.ts b/src/contracts/factories/BLSAccount__factory.ts deleted file mode 100644 index 0572a311..00000000 --- a/src/contracts/factories/BLSAccount__factory.ts +++ /dev/null @@ -1,517 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { BLSAccount, BLSAccountInterface } from "../BLSAccount"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - { - internalType: "address", - name: "anAggregator", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "beacon", - type: "address", - }, - ], - name: "BeaconUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "EtherspotInitialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256[4]", - name: "oldPublicKey", - type: "uint256[4]", - }, - { - indexed: false, - internalType: "uint256[4]", - name: "newPublicKey", - type: "uint256[4]", - }, - ], - name: "PublicKeyChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "aggregator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "executeTransaction", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getAggregator", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getBlsPublicKey", - outputs: [ - { - internalType: "uint256[4]", - name: "", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "anOwner", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "aPublicKey", - type: "uint256[4]", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "newPublicKey", - type: "uint256[4]", - }, - ], - name: "setBlsPublicKey", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60e06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162002fd838038062002fd883398181016040528101906200006a91906200018b565b818073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050620001d2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200010e82620000e1565b9050919050565b6000620001228262000101565b9050919050565b620001348162000115565b81146200014057600080fd5b50565b600081519050620001548162000129565b92915050565b620001658162000101565b81146200017157600080fd5b50565b60008151905062000185816200015a565b92915050565b60008060408385031215620001a557620001a4620000dc565b5b6000620001b58582860162000143565b9250506020620001c88582860162000174565b9150509250929050565b60805160a05160c051612da562000233600039600081816105aa015281816107590152610dda015260008181610b2901526115120152600081816105ce0152818161065d015281816108dc0152818161096b0152610a1b0152612da56000f3fe60806040526004361061010d5760003560e01c80634f1ef28611610095578063b0d691fe11610064578063b0d691fe14610320578063c399ec881461034b578063c4d66de814610376578063e02afbae1461039f578063ee472f36146103ca57610114565b80634f1ef2861461028357806352d1902d1461029f5780638da5cb5b146102ca578063affed0e0146102f557610114565b80633659cfe6116100dc5780633659cfe6146101d35780633ad59dbc146101fc5780633f579f42146102275780634a58db19146102505780634d44560d1461025a57610114565b80630825d1fc1461011957806318dfb3c71461015657806318fc5c441461017f578063245a7bfc146101a857610114565b3661011457005b600080fd5b34801561012557600080fd5b50610140600480360381019061013b91906119c4565b6103f3565b60405161014d9190611a56565b60405180910390f35b34801561016257600080fd5b5061017d60048036038101906101789190611b2c565b61043f565b005b34801561018b57600080fd5b506101a660048036038101906101a19190611cea565b610551565b005b3480156101b457600080fd5b506101bd6105a8565b6040516101ca9190611d26565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611d41565b6105cc565b005b34801561020857600080fd5b50610211610755565b60405161021e9190611d26565b60405180910390f35b34801561023357600080fd5b5061024e60048036038101906102499190611dc4565b61077d565b005b6102586107da565b005b34801561026657600080fd5b50610281600480360381019061027c9190611e76565b61085a565b005b61029d60048036038101906102989190611f6b565b6108da565b005b3480156102ab57600080fd5b506102b4610a17565b6040516102c19190611fd6565b60405180910390f35b3480156102d657600080fd5b506102df610ad0565b6040516102ec9190611d26565b60405180910390f35b34801561030157600080fd5b5061030a610af6565b6040516103179190611a56565b60405180910390f35b34801561032c57600080fd5b50610335610b25565b6040516103429190612050565b60405180910390f35b34801561035757600080fd5b50610360610b4d565b60405161036d9190611a56565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190611d41565b610bd5565b005b3480156103ab57600080fd5b506103b4610c6b565b6040516103c19190612116565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190611cea565b610cb6565b005b60006103fd610d5f565b610408858585610dd6565b9050600085806040019061041c9190612140565b9050141561042e5761042d85610e71565b5b61043782610f1f565b949350505050565b610447610fbb565b81819050848490501461048f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048690612226565b60405180910390fd5b60005b8484905081101561054a576105378585838181106104b3576104b2612246565b5b90506020020160208101906104c89190611d41565b60008585858181106104dd576104dc612246565b5b90506020028101906104ef9190612140565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061108a565b8080610542906122a4565b915050610492565b5050505050565b61055961110e565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a8360028260405161058b9291906123b1565b60405180910390a18060029060046105a4929190611842565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561065b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106529061244d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661069a6111d6565b73ffffffffffffffffffffffffffffffffffffffff16146106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e7906124df565b60405180910390fd5b6106f98161122d565b61075281600067ffffffffffffffff81111561071857610717611bbe565b5b6040519080825280601f01601f19166020018201604052801561074a5781602001600182028036833780820191505090505b506000611238565b50565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610785610fbb565b6107d4848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061108a565b50505050565b60006107e4610b25565b73ffffffffffffffffffffffffffffffffffffffff163460405161080790612530565b60006040518083038185875af1925050503d8060008114610844576040519150601f19603f3d011682016040523d82523d6000602084013e610849565b606091505b505090508061085757600080fd5b50565b61086261110e565b61086a610b25565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016108a4929190612554565b600060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061244d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166109a86111d6565b73ffffffffffffffffffffffffffffffffffffffff16146109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906124df565b60405180910390fd5b610a078261122d565b610a1382826001611238565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e906125ef565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6000610b57610b25565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b8f9190611d26565b602060405180830381865afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd09190612624565b905090565b6000610be160016113a6565b90508015610c05576001600060016101000a81548160ff0219169083151502179055505b610c0e82611496565b8015610c675760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610c5e9190612699565b60405180910390a15b5050565b610c73611882565b6002600480602002604051908101604052809291908260048015610cac576020028201915b815481526020019060010190808311610c98575b5050505050905090565b6000610cc260016113a6565b90508015610ce6576001600060016101000a81548160ff0219169083151502179055505b610cf06000611496565b816002906004610d01929190611842565b508015610d5b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d529190612699565b60405180910390a15b5050565b610d67610b25565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90612726565b60405180910390fd5b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90612792565b60405180910390fd5b600090509392505050565b80602001356000600281819054906101000a90046bffffffffffffffffffffffff1680929190610ea0906127ca565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061284b565b60405180910390fd5b50565b60008114610fb85760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051610f6f90612530565b600060405180830381858888f193505050503d8060008114610fad576040519150601f19603f3d011682016040523d82523d6000602084013e610fb2565b606091505b50509050505b50565b610fc3610b25565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110495750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906128dd565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516110b3919061296c565b60006040518083038185875af1925050503d80600081146110f0576040519150601f19603f3d011682016040523d82523d6000602084013e6110f5565b606091505b50915091508161110757805160208201fd5b5050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061119557503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb906129cf565b60405180910390fd5b565b60006112047f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611576565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61123561110e565b50565b6112647f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611580565b60000160009054906101000a900460ff1615611288576112838361158a565b6113a1565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112f057506040513d601f19601f820116820180604052508101906112ed9190612a04565b60015b61132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690612aa3565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90612b35565b60405180910390fd5b506113a0838383611643565b5b505050565b60008060019054906101000a900460ff161561141d5760018260ff161480156113d557506113d33061166f565b155b611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90612bc7565b60405180910390fd5b60009050611491565b8160ff1660008054906101000a900460ff1660ff1610611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990612bc7565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167fc053dd35e22ddb3ae5f46f48289137bbba99fdd1068c0f7d3069bb62dab393fd60405160405180910390a350565b6000819050919050565b6000819050919050565b6115938161166f565b6115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c990612c59565b60405180910390fd5b806115ff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611576565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61164c83611692565b6000825111806116595750805b1561166a5761166883836116e1565b505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61169b8161158a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606117068383604051806060016040528060278152602001612d726027913961170e565b905092915050565b60606117198461166f565b611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90612ceb565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611780919061296c565b600060405180830381855af49150503d80600081146117bb576040519150601f19603f3d011682016040523d82523d6000602084013e6117c0565b606091505b50915091506117d08282866117db565b925050509392505050565b606083156117eb5782905061183b565b6000835111156117fe5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329190612d4f565b60405180910390fd5b9392505050565b8260048101928215611871579160200282015b82811115611870578251825591602001919060010190611855565b5b50905061187e91906118a4565b5090565b6040518060800160405280600490602082028036833780820191505090505090565b5b808211156118bd5760008160009055506001016118a5565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600061016082840312156118f1576118f06118d5565b5b81905092915050565b6000819050919050565b61190d816118fa565b811461191857600080fd5b50565b60008135905061192a81611904565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061195b82611930565b9050919050565b61196b81611950565b811461197657600080fd5b50565b60008135905061198881611962565b92915050565b6000819050919050565b6119a18161198e565b81146119ac57600080fd5b50565b6000813590506119be81611998565b92915050565b600080600080608085870312156119de576119dd6118cb565b5b600085013567ffffffffffffffff8111156119fc576119fb6118d0565b5b611a08878288016118da565b9450506020611a198782880161191b565b9350506040611a2a87828801611979565b9250506060611a3b878288016119af565b91505092959194509250565b611a508161198e565b82525050565b6000602082019050611a6b6000830184611a47565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611a9657611a95611a71565b5b8235905067ffffffffffffffff811115611ab357611ab2611a76565b5b602083019150836020820283011115611acf57611ace611a7b565b5b9250929050565b60008083601f840112611aec57611aeb611a71565b5b8235905067ffffffffffffffff811115611b0957611b08611a76565b5b602083019150836020820283011115611b2557611b24611a7b565b5b9250929050565b60008060008060408587031215611b4657611b456118cb565b5b600085013567ffffffffffffffff811115611b6457611b636118d0565b5b611b7087828801611a80565b9450945050602085013567ffffffffffffffff811115611b9357611b926118d0565b5b611b9f87828801611ad6565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611bf682611bad565b810181811067ffffffffffffffff82111715611c1557611c14611bbe565b5b80604052505050565b6000611c286118c1565b9050611c348282611bed565b919050565b600067ffffffffffffffff821115611c5457611c53611bbe565b5b602082029050919050565b6000611c72611c6d84611c39565b611c1e565b90508060208402830185811115611c8c57611c8b611a7b565b5b835b81811015611cb55780611ca188826119af565b845260208401935050602081019050611c8e565b5050509392505050565b600082601f830112611cd457611cd3611a71565b5b6004611ce1848285611c5f565b91505092915050565b600060808284031215611d0057611cff6118cb565b5b6000611d0e84828501611cbf565b91505092915050565b611d2081611950565b82525050565b6000602082019050611d3b6000830184611d17565b92915050565b600060208284031215611d5757611d566118cb565b5b6000611d6584828501611979565b91505092915050565b60008083601f840112611d8457611d83611a71565b5b8235905067ffffffffffffffff811115611da157611da0611a76565b5b602083019150836001820283011115611dbd57611dbc611a7b565b5b9250929050565b60008060008060608587031215611dde57611ddd6118cb565b5b6000611dec87828801611979565b9450506020611dfd878288016119af565b935050604085013567ffffffffffffffff811115611e1e57611e1d6118d0565b5b611e2a87828801611d6e565b925092505092959194509250565b6000611e4382611930565b9050919050565b611e5381611e38565b8114611e5e57600080fd5b50565b600081359050611e7081611e4a565b92915050565b60008060408385031215611e8d57611e8c6118cb565b5b6000611e9b85828601611e61565b9250506020611eac858286016119af565b9150509250929050565b600080fd5b600067ffffffffffffffff821115611ed657611ed5611bbe565b5b611edf82611bad565b9050602081019050919050565b82818337600083830152505050565b6000611f0e611f0984611ebb565b611c1e565b905082815260208101848484011115611f2a57611f29611eb6565b5b611f35848285611eec565b509392505050565b600082601f830112611f5257611f51611a71565b5b8135611f62848260208601611efb565b91505092915050565b60008060408385031215611f8257611f816118cb565b5b6000611f9085828601611979565b925050602083013567ffffffffffffffff811115611fb157611fb06118d0565b5b611fbd85828601611f3d565b9150509250929050565b611fd0816118fa565b82525050565b6000602082019050611feb6000830184611fc7565b92915050565b6000819050919050565b600061201661201161200c84611930565b611ff1565b611930565b9050919050565b600061202882611ffb565b9050919050565b600061203a8261201d565b9050919050565b61204a8161202f565b82525050565b60006020820190506120656000830184612041565b92915050565b600060049050919050565b600081905092915050565b6000819050919050565b6120948161198e565b82525050565b60006120a6838361208b565b60208301905092915050565b6000602082019050919050565b6120c88161206b565b6120d28184612076565b92506120dd82612081565b8060005b8381101561210e5781516120f5878261209a565b9650612100836120b2565b9250506001810190506120e1565b505050505050565b600060808201905061212b60008301846120bf565b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261215d5761215c612131565b5b80840192508235915067ffffffffffffffff82111561217f5761217e612136565b5b60208301925060018202360383131561219b5761219a61213b565b5b509250929050565b600082825260208201905092915050565b7f457468657273706f744163636f756e743a3a206578656375746542617463682060008201527f2d2077726f6e67206172726179206c656e677468730000000000000000000000602082015250565b60006122106035836121a3565b915061221b826121b4565b604082019050919050565b6000602082019050818103600083015261223f81612203565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122af8261198e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156122e2576122e1612275565b5b600182019050919050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b600061232c61232783612302565b61230f565b9050919050565b600061233f8254612319565b9050919050565b6000600182019050919050565b61235c816122ed565b6123668184612076565b9250612371826122f8565b8060005b838110156123a95761238682612333565b612390878261209a565b965061239b83612346565b925050600181019050612375565b505050505050565b6000610100820190506123c76000830185612353565b6123d460808301846120bf565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612437602c836121a3565b9150612442826123db565b604082019050919050565b600060208201905081810360008301526124668161242a565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006124c9602c836121a3565b91506124d48261246d565b604082019050919050565b600060208201905081810360008301526124f8816124bc565b9050919050565b600081905092915050565b50565b600061251a6000836124ff565b91506125258261250a565b600082019050919050565b600061253b8261250d565b9150819050919050565b61254e81611e38565b82525050565b60006040820190506125696000830185612545565b6125766020830184611a47565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006125d96038836121a3565b91506125e48261257d565b604082019050919050565b60006020820190508181036000830152612608816125cc565b9050919050565b60008151905061261e81611998565b92915050565b60006020828403121561263a576126396118cb565b5b60006126488482850161260f565b91505092915050565b6000819050919050565b600060ff82169050919050565b600061268361267e61267984612651565b611ff1565b61265b565b9050919050565b61269381612668565b82525050565b60006020820190506126ae600083018461268a565b92915050565b7f457468657273706f744163636f756e743a204e6f742066726f6d20456e74727960008201527f506f696e74000000000000000000000000000000000000000000000000000000602082015250565b60006127106025836121a3565b915061271b826126b4565b604082019050919050565b6000602082019050818103600083015261273f81612703565b9050919050565b7f424c534163636f756e743a2077726f6e672061676772656761746f7200000000600082015250565b600061277c601c836121a3565b915061278782612746565b602082019050919050565b600060208201905081810360008301526127ab8161276f565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006127d5826127b2565b91506bffffffffffffffffffffffff8214156127f4576127f3612275565b5b600182019050919050565b7f457468657273706f744163636f756e743a3a20496e76616c6964206e6f6e6365600082015250565b60006128356020836121a3565b9150612840826127ff565b602082019050919050565b6000602082019050818103600083015261286481612828565b9050919050565b7f457468657273706f744163636f756e743a3a204e6f74204f776e6572206f722060008201527f456e747279506f696e7400000000000000000000000000000000000000000000602082015250565b60006128c7602a836121a3565b91506128d28261286b565b604082019050919050565b600060208201905081810360008301526128f6816128ba565b9050919050565b600081519050919050565b60005b8381101561292657808201518184015260208101905061290b565b83811115612935576000848401525b50505050565b6000612946826128fd565b61295081856124ff565b9350612960818560208601612908565b80840191505092915050565b6000612978828461293b565b915081905092915050565b7f457468657273706f744163636f756e743a3a204f6e6c79206f776e6572000000600082015250565b60006129b9601d836121a3565b91506129c482612983565b602082019050919050565b600060208201905081810360008301526129e8816129ac565b9050919050565b6000815190506129fe81611904565b92915050565b600060208284031215612a1a57612a196118cb565b5b6000612a28848285016129ef565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612a8d602e836121a3565b9150612a9882612a31565b604082019050919050565b60006020820190508181036000830152612abc81612a80565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612b1f6029836121a3565b9150612b2a82612ac3565b604082019050919050565b60006020820190508181036000830152612b4e81612b12565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612bb1602e836121a3565b9150612bbc82612b55565b604082019050919050565b60006020820190508181036000830152612be081612ba4565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000612c43602d836121a3565b9150612c4e82612be7565b604082019050919050565b60006020820190508181036000830152612c7281612c36565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000612cd56026836121a3565b9150612ce082612c79565b604082019050919050565b60006020820190508181036000830152612d0481612cc8565b9050919050565b600081519050919050565b6000612d2182612d0b565b612d2b81856121a3565b9350612d3b818560208601612908565b612d4481611bad565b840191505092915050565b60006020820190508181036000830152612d698184612d16565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080c000a"; - -type BLSAccountConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSAccountConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BLSAccount__factory extends ContractFactory { - constructor(...args: BLSAccountConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - anEntryPoint: string, - anAggregator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - anEntryPoint, - anAggregator, - overrides || {} - ) as Promise; - } - getDeployTransaction( - anEntryPoint: string, - anAggregator: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - anEntryPoint, - anAggregator, - overrides || {} - ); - } - attach(address: string): BLSAccount { - return super.attach(address) as BLSAccount; - } - connect(signer: Signer): BLSAccount__factory { - return super.connect(signer) as BLSAccount__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSAccountInterface { - return new utils.Interface(_abi) as BLSAccountInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSAccount { - return new Contract(address, _abi, signerOrProvider) as BLSAccount; - } -} diff --git a/src/contracts/factories/BLSHelper__factory.ts b/src/contracts/factories/BLSHelper__factory.ts deleted file mode 100644 index 5de6bd02..00000000 --- a/src/contracts/factories/BLSHelper__factory.ts +++ /dev/null @@ -1,109 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { BLSHelper, BLSHelperInterface } from "../BLSHelper"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes8", - name: "c__ffed44a6", - type: "bytes8", - }, - ], - name: "c_falseffed44a6", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes8", - name: "c__ffed44a6", - type: "bytes8", - }, - ], - name: "c_ffed44a6", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes8", - name: "c__ffed44a6", - type: "bytes8", - }, - ], - name: "c_trueffed44a6", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x6101ae610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806320a3b04f14610050578063433f966a14610080578063a7b7bd241461009c575b600080fd5b61006a6004803603810190610065919061013e565b6100cc565b6040516100779190610186565b60405180910390f35b61009a6004803603810190610095919061013e565b6100d3565b005b6100b660048036038101906100b1919061013e565b6100d6565b6040516100c39190610186565b60405180910390f35b6000919050565b50565b600060019050919050565b600080fd5b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b61011b816100e6565b811461012657600080fd5b50565b60008135905061013881610112565b92915050565b600060208284031215610154576101536100e1565b5b600061016284828501610129565b91505092915050565b60008115159050919050565b6101808161016b565b82525050565b600060208201905061019b6000830184610177565b9291505056fea164736f6c634300080f000a"; - -type BLSHelperConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSHelperConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BLSHelper__factory extends ContractFactory { - constructor(...args: BLSHelperConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BLSHelper { - return super.attach(address) as BLSHelper; - } - connect(signer: Signer): BLSHelper__factory { - return super.connect(signer) as BLSHelper__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSHelperInterface { - return new utils.Interface(_abi) as BLSHelperInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSHelper { - return new Contract(address, _abi, signerOrProvider) as BLSHelper; - } -} diff --git a/src/contracts/factories/BLSOpen__factory.ts b/src/contracts/factories/BLSOpen__factory.ts deleted file mode 100644 index 9251b62d..00000000 --- a/src/contracts/factories/BLSOpen__factory.ts +++ /dev/null @@ -1,159 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { BLSOpen, BLSOpenInterface } from "../BLSOpen"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes32", - name: "domain", - type: "bytes32", - }, - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - ], - name: "hashToPoint", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[4]", - name: "blsKey", - type: "uint256[4]", - }, - ], - name: "isZeroBLSKey", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "signature", - type: "uint256[2]", - }, - { - internalType: "uint256[4][]", - name: "pubkeys", - type: "uint256[4][]", - }, - { - internalType: "uint256[2][]", - name: "messages", - type: "uint256[2][]", - }, - ], - name: "verifyMultiple", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256[2]", - name: "signature", - type: "uint256[2]", - }, - { - internalType: "uint256[4]", - name: "pubkey", - type: "uint256[4]", - }, - { - internalType: "uint256[2]", - name: "message", - type: "uint256[2]", - }, - ], - name: "verifySingle", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6127b061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063914137631461005b578063a850a90914610083578063c2ad5b98146100a3578063ebbdac91146100b6575b600080fd5b61006e6100693660046123f6565b6100c9565b60405190151581526020015b60405180910390f35b6100966100913660046124cd565b6100f1565b60405161007a919061258a565b61006e6100b13660046125bb565b61010a565b61006e6100c43660046125d7565b610155565b60008060006100d9868686610227565b915091508080156100e75750815b9695505050505050565b6100f96121cd565b61010383836107bd565b9392505050565b60006001815b81801561011d5750600481105b1561014e578381600481106101345761013461261e565b6020020151159150806101468161267c565b915050610110565b5092915050565b604080516001808252818301909252600091829190816020015b6101776121eb565b81526020019060019003908161016f57505060408051600180825281830190925291925060009190602082015b6101ac6121cd565b8152602001906001900390816101a457905050905084826000815181106101d5576101d561261e565b602002602001018190525083816000815181106101f4576101f461261e565b602002602001018190525060008061020d888585610227565b9150915080801561021b5750815b98975050505050505050565b81516000908190806102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f424c533a206e756d626572206f66207075626c6963206b6579206973207a657260448201527f6f0000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b83518114610350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d60448201527f65737361676573206d75737420626520657175616c000000000000000000000060648201526084016102b7565b600061035d8260016126b4565b6103689060066126cc565b905060008167ffffffffffffffff81111561038557610385612227565b6040519080825280602002602001820160405280156103ae578160200160208202803683370190505b5090508760006020020151816000815181106103cc576103cc61261e565b60209081029190910101528760016020020151816001815181106103f2576103f261261e565b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106104325761043261261e565b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed816003815181106104725761047261261e565b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec816004815181106104b2576104b261261e565b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d816005815181106104f2576104f261261e565b60200260200101818152505060005b838110156107725786818151811061051b5761051b61261e565b60200260200101516000600281106105355761053561261e565b6020020151826105468360066126cc565b6105519060066126b4565b815181106105615761056161261e565b60200260200101818152505086818151811061057f5761057f61261e565b60200260200101516001600281106105995761059961261e565b6020020151826105aa8360066126cc565b6105b59060076126b4565b815181106105c5576105c561261e565b6020026020010181815250508781815181106105e3576105e361261e565b60200260200101516001600481106105fd576105fd61261e565b60200201518261060e8360066126cc565b6106199060086126b4565b815181106106295761062961261e565b6020026020010181815250508781815181106106475761064761261e565b60200260200101516000600481106106615761066161261e565b6020020151826106728360066126cc565b61067d9060096126b4565b8151811061068d5761068d61261e565b6020026020010181815250508781815181106106ab576106ab61261e565b60200260200101516003600481106106c5576106c561261e565b6020020151826106d68360066126cc565b6106e190600a6126b4565b815181106106f1576106f161261e565b60200260200101818152505087818151811061070f5761070f61261e565b60200260200101516002600481106107295761072961261e565b60200201518261073a8360066126cc565b61074590600b6126b4565b815181106107555761075561261e565b60209081029190910101528061076a8161267c565b915050610501565b5061077b612209565b60005a90506020826020860260208601600885fa9550856107a7576000809650965050505050506107b5565b505115159450600193505050505b935093915050565b6107c56121cd565b60006107d184846108ad565b905060006107e582825b60200201516109fb565b905060006107f48360016107db565b90506107fe6121eb565b825181526020808401518282015282516040808401919091529083015160608301526000908460808460066107d05a03fa9050808061083957fe5b50806108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f424c533a20626e206164642063616c6c206661696c656400000000000000000060448201526064016102b7565b50919695505050505050565b6108b56121cd565b60006108c18484611044565b90506000806000806018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b610a036121cd565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d60448201527f656e74000000000000000000000000000000000000000000000000000000000060648201526084016102b7565b816000610abe826112e1565b91505060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610af157610af1612709565b83840990507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760048208905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4777b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd8509905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478383099050610b8e8161131c565b90507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610c4d837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612738565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe0894507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4785860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4785830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476003830891506000610ce7836112e1565b90935090508015610d415784610d2457610d21837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612738565b92505b505060408051808201909152938452602084015250909392505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760018708610d90907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612738565b95507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600384089250610e0e836112e1565b90935090508015610e485784610d2457610d21837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612738565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784850995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476001870895507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600384089250610f83836112e1565b909350905080611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960448201527f6f6e00000000000000000000000000000000000000000000000000000000000060648201526084016102b7565b84610d2457610d21837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612738565b805160609060006110568260206126b4565b6110619060406126b4565b61106c9060046126b4565b67ffffffffffffffff81111561108457611084612227565b6040519080825280601f01601f1916602001820160405280156110ae576020820181803683370190505b5060408051606080825260808201909252919250600091906020820181803683370190505090506060820160005b848110156110f657602081880181015183830152016110dc565b508301600081536001016060815360010160008153600181018790526021016020815350600060028360405161112c919061274f565b602060405180830381855afa158015611149573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061116c919061278a565b90506000604294508484528160208501526001604085015360418401889052602060618501536002846040516111a2919061274f565b602060405180830381855afa1580156111bf573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111e2919061278a565b905080602084015280821880602086015250600260408501536041840188905260206061850153600284604051611219919061274f565b602060405180830381855afa158015611236573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611259919061278a565b905080604084015280821880602086015250600360408501536041840188905260206061850153600284604051611290919061274f565b602060405180830381855afa1580156112ad573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906112d0919061278a565b606084015250909695505050505050565b6000806112ed8361132d565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b600061132782611a74565b92915050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561229d5761229d612227565b604052919050565b600082601f8301126122b657600080fd5b6040516040810181811067ffffffffffffffff821117156122d9576122d9612227565b80604052508060408401858111156122f057600080fd5b845b8181101561230a5780358352602092830192016122f2565b509195945050505050565b600067ffffffffffffffff82111561232f5761232f612227565b5060051b60200190565b600082601f83011261234a57600080fd5b6040516080810181811067ffffffffffffffff8211171561236d5761236d612227565b6040528060808401858111156122f057600080fd5b600082601f83011261239357600080fd5b813560206123a86123a383612315565b612256565b82815260069290921b840181019181810190868411156123c757600080fd5b8286015b848110156123eb576123dd88826122a5565b8352918301916040016123cb565b509695505050505050565b6000806000608080858703121561240c57600080fd5b61241686866122a5565b9350604085013567ffffffffffffffff8082111561243357600080fd5b818701915087601f83011261244757600080fd5b813560206124576123a383612315565b82815260079290921b8401810191818101908b84111561247657600080fd5b948201945b8386101561249c5761248d8c87612339565b8252948601949082019061247b565b975050505060608701359250808311156124b557600080fd5b50506124c386828701612382565b9150509250925092565b600080604083850312156124e057600080fd5b8235915060208084013567ffffffffffffffff8082111561250057600080fd5b818601915086601f83011261251457600080fd5b81358181111561252657612526612227565b612556847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612256565b9150808252878482850101111561256c57600080fd5b80848401858401376000848284010152508093505050509250929050565b60408101818360005b60028110156125b2578151835260209283019290910190600101612593565b50505092915050565b6000608082840312156125cd57600080fd5b6101038383612339565b600080600061010084860312156125ed57600080fd5b6125f785856122a5565b92506126068560408601612339565b91506126158560c086016122a5565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126ad576126ad61264d565b5060010190565b600082198211156126c7576126c761264d565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127045761270461264d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008282101561274a5761274a61264d565b500390565b6000825160005b818110156127705760208186018101518583015201612756565b8181111561277f576000828501525b509190910192915050565b60006020828403121561279c57600080fd5b505191905056fea164736f6c634300080f000a"; - -type BLSOpenConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSOpenConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BLSOpen__factory extends ContractFactory { - constructor(...args: BLSOpenConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BLSOpen { - return super.attach(address) as BLSOpen; - } - connect(signer: Signer): BLSOpen__factory { - return super.connect(signer) as BLSOpen__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSOpenInterface { - return new utils.Interface(_abi) as BLSOpenInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSOpen { - return new Contract(address, _abi, signerOrProvider) as BLSOpen; - } -} diff --git a/src/contracts/factories/BLSSignatureAggregator__factory.ts b/src/contracts/factories/BLSSignatureAggregator__factory.ts deleted file mode 100644 index f918f2bd..00000000 --- a/src/contracts/factories/BLSSignatureAggregator__factory.ts +++ /dev/null @@ -1,616 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - BLSSignatureAggregator, - BLSSignatureAggregatorInterface, -} from "../BLSSignatureAggregator"; - -const _abi = [ - { - inputs: [], - name: "BLS_DOMAIN", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "N", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - internalType: "uint32", - name: "delay", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "userOps", - type: "tuple[]", - }, - ], - name: "aggregateSignatures", - outputs: [ - { - internalType: "bytes", - name: "aggregatesSignature", - type: "bytes", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "getTrailingPublicKey", - outputs: [ - { - internalType: "uint256[4]", - name: "publicKey", - type: "uint256[4]", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpPublicKey", - outputs: [ - { - internalType: "uint256[4]", - name: "publicKey", - type: "uint256[4]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "userOpToMessage", - outputs: [ - { - internalType: "uint256[2]", - name: "", - type: "uint256[2]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "userOps", - type: "tuple[]", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "validateSignatures", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "validateUserOpSignature", - outputs: [ - { - internalType: "bytes", - name: "sigForUserOp", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50612cce806100206000396000f3fe6080604052600436106100905760003560e01c806364c530cd1161005957806364c530cd14610193578063a6193531146101d0578063b7620eb41461020d578063c9e525df1461024a578063e3563a4f1461027557610090565b80629d925014610095578063275e2d79146100c057806340864431146100fd578063451711591461013a57806357f09b7214610156575b600080fd5b3480156100a157600080fd5b506100aa61029e565b6040516100b7919061161f565b60405180910390f35b3480156100cc57600080fd5b506100e760048036038101906100e291906116b3565b6102c2565b6040516100f49190611799565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190611b05565b61041f565b6040516101319190611bf9565b60405180910390f35b610154600480360381019061014f9190611c8e565b610446565b005b34801561016257600080fd5b5061017d60048036038101906101789190611b05565b6104b6565b60405161018a9190611d52565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b59190611d92565b610563565b6040516101c79190611799565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190611b05565b610705565b604051610204919061161f565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190611ddb565b610725565b6040516102419190611d52565b60405180910390f35b34801561025657600080fd5b5061025f6107a5565b60405161026c9190611e33565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611ea4565b6107c9565b005b7fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b81565b606060008383905067ffffffffffffffff8111156102e3576102e26117c0565b5b60405190808252806020026020018201604052801561031c57816020015b6103096115a8565b8152602001906001900390816103015790505b50905060005b81518110156103bc5760008086868481811061034157610340611f25565b5b90506020028101906103539190611f63565b8061014001906103639190611f8c565b8101906103709190611fef565b9150915060405180604001604052808381526020018281525084848151811061039c5761039b611f25565b5b6020026020010181905250505080806103b49061205e565b915050610322565b5060006103e9827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610af4565b9050806000015181602001516040516020016104069291906120a7565b6040516020818303038152906040529250505092915050565b6104276115c2565b600061043283610bf7565b905061043e8382610c2f565b915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161048091906120df565b6000604051808303818588803b15801561049957600080fd5b505af11580156104ad573d6000803e3d6000fd5b50505050505050565b6104be6115e4565b6000826040015190506000815111156104e1576104da81610725565b915061055c565b826000015173ffffffffffffffffffffffffffffffffffffffff1663e02afbae6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055491906121c0565b91505061055e565b505b919050565b60606000828061014001906105789190611f8c565b810190610585919061229e565b9050600061059b84610596906122cb565b6104b6565b905060006105b1856105ac906122cb565b61041f565b905073__$b9791500c16b639726521ab5391f2dd20a$__63ebbdac918484846040518463ffffffff1660e01b81526004016105ee939291906123c9565b602060405180830381865af415801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190612439565b5073__$b9791500c16b639726521ab5391f2dd20a$__63ebbdac918484846040518463ffffffff1660e01b815260040161066b939291906123c9565b602060405180830381865af4158015610688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ac9190612439565b6106eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e2906124c3565b60405180910390fd5b604051806020016040528060008152509350505050919050565b60008061071183610bf7565b905061071d8382610d06565b915050919050565b61072d6115e4565b60008251905060808111610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d9061252f565b60405180910390fd5b606081840103805183526020810151602084015260408101516040840152606081015160608401525050919050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781565b6040828290501461080f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108069061259b565b60405180910390fd5b60008282810190610820919061229e565b9050600085859050905060008167ffffffffffffffff811115610846576108456117c0565b5b60405190808252806020026020018201604052801561087f57816020015b61086c6115e4565b8152602001906001900390816108645790505b50905060008267ffffffffffffffff81111561089e5761089d6117c0565b5b6040519080825280602002602001820160405280156108d757816020015b6108c46115c2565b8152602001906001900390816108bc5790505b50905060005b83811015610a2e5760008989838181106108fa576108f9611f25565b5b905060200281019061090c9190611f63565b610915906122cb565b90506000816000015190508073ffffffffffffffffffffffffffffffffffffffff1663e02afbae6175306040518263ffffffff1660e01b81526004016080604051808303818786fa15801561096e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061099391906121c0565b8584815181106109a6576109a5611f25565b5b60200260200101819052506109fb828685815181106109c8576109c7611f25565b5b60200260200101516040516020016109e09190611d52565b60405160208183030381529060405280519060200120610c2f565b848481518110610a0e57610a0d611f25565b5b602002602001018190525050508080610a269061205e565b9150506108dd565b5073__$b9791500c16b639726521ab5391f2dd20a$__63914137638584846040518463ffffffff1660e01b8152600401610a6a939291906127dd565b602060405180830381865af4158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab9190612439565b610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061286e565b60405180910390fd5b5050505050505050565b610afc6115a8565b600083600081518110610b1257610b11611f25565b5b6020026020010151600001519050600084600081518110610b3657610b35611f25565b5b60200260200101516020015190506000600190506000600190505b8651811015610bc557610ba68484848a8581518110610b7357610b72611f25565b5b6020026020010151600001518b8681518110610b9257610b91611f25565b5b60200260200101516020015160018c610d45565b8094508195508296505050508080610bbd9061205e565b915050610b51565b50610bd2838383886113c4565b8093508194505050828460000181815250508184602001818152505050505092915050565b6000610c02826104b6565b604051602001610c129190611d52565b604051602081830303815290604052805190602001209050919050565b610c376115c2565b6000610c438484610d06565b905073__$b9791500c16b639726521ab5391f2dd20a$__63a850a9097fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b83604051602001610c9191906128af565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610cbd929190612923565b6040805180830381865af4158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd91906129de565b91505092915050565b6000610d118361143b565b823046604051602001610d279493929190612a1a565b60405160208183030381529060405280519060200120905092915050565b6000806000808a148015610d595750600089145b15610d6c578686869250925092506113b7565b600087148015610d7c5750600086145b15610d8f578989899250925092506113b7565b610d976115e4565b8480610da657610da5612a5f565b5b898a0981600060048110610dbd57610dbc611f25565b5b6020020181815250508480610dd557610dd4612a5f565b5b81600060048110610de957610de8611f25565b5b60200201518a0981600160048110610e0457610e03611f25565b5b6020020181815250508480610e1c57610e1b612a5f565b5b86870981600260048110610e3357610e32611f25565b5b6020020181815250508480610e4b57610e4a612a5f565b5b81600260048110610e5f57610e5e611f25565b5b6020020151870981600360048110610e7a57610e79611f25565b5b60200201818152505060405180608001604052808680610e9d57610e9c612a5f565b5b83600260048110610eb157610eb0611f25565b5b60200201518e0981526020018680610ecc57610ecb612a5f565b5b83600360048110610ee057610edf611f25565b5b60200201518d0981526020018680610efb57610efa612a5f565b5b83600060048110610f0f57610f0e611f25565b5b60200201518b0981526020018680610f2a57610f29612a5f565b5b83600160048110610f3e57610f3d611f25565b5b60200201518a09815250905080600260048110610f5e57610f5d611f25565b5b602002015181600060048110610f7757610f76611f25565b5b6020020151141580610fb9575080600360048110610f9857610f97611f25565b5b602002015181600160048110610fb157610fb0611f25565b5b602002015114155b610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90612ada565b60405180910390fd5b6110006115e4565b858061100f5761100e612a5f565b5b8260006004811061102357611022611f25565b5b6020020151876110339190612afa565b8360026004811061104757611046611f25565b5b6020020151088160006004811061106157611060611f25565b5b602002018181525050858061107957611078612a5f565b5b8260016004811061108d5761108c611f25565b5b60200201518761109d9190612afa565b836003600481106110b1576110b0611f25565b5b602002015108816001600481106110cb576110ca611f25565b5b60200201818152505085806110e3576110e2612a5f565b5b816000600481106110f7576110f6611f25565b5b6020020151826000600481106111105761110f611f25565b5b6020020151098160026004811061112a57611129611f25565b5b602002018181525050858061114257611141612a5f565b5b8160006004811061115657611155611f25565b5b60200201518260026004811061116f5761116e611f25565b5b6020020151098160036004811061118957611188611f25565b5b602002018181525050600086806111a3576111a2612a5f565b5b826003600481106111b7576111b6611f25565b5b6020020151886111c79190612afa565b88806111d6576111d5612a5f565b5b846001600481106111ea576111e9611f25565b5b60200201518560016004811061120357611202611f25565b5b602002015109089050868061121b5761121a612a5f565b5b878061122a57611229612a5f565b5b888061123957611238612a5f565b5b8460026004811061124d5761124c611f25565b5b60200201518660006004811061126657611265611f25565b5b6020020151096002098861127a9190612afa565b820890506000878061128f5761128e612a5f565b5b888061129e5761129d612a5f565b5b838a6112aa9190612afa565b8a806112b9576112b8612a5f565b5b866002600481106112cd576112cc611f25565b5b6020020151886000600481106112e6576112e5611f25565b5b602002015109088460016004811061130157611300611f25565b5b6020020151099050878061131857611317612a5f565b5b888061132757611326612a5f565b5b8460036004811061133b5761133a611f25565b5b60200201518660016004811061135457611353611f25565b5b602002015109896113659190612afa565b820890506000888061137a57611379612a5f565b5b898061138957611388612a5f565b5b8b8f09856000600481106113a05761139f611f25565b5b602002015109905082828297509750975050505050505b9750975097945050505050565b60008060006113d385856114bc565b9050600084806113e6576113e5612a5f565b5b8283099050600085806113fc576113fb612a5f565b5b828a0990506000868061141257611411612a5f565b5b878061142157611420612a5f565b5b8486098a0990508181955095505050505094509492505050565b60008160000151826020015183604001518051906020012084606001518051906020012085608001518660a001518760c001518860e001518961010001518a61012001518051906020012060405160200161149f9a99989796959493929190612b2e565b604051602081830303815290604052805190602001209050919050565b60008083141580156114ce5750818314155b80156114db575060008214155b61151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190612c16565b60405180910390fd5b60008060019050600084905060005b6000871461159b57868261153d9190612c36565b905082868061154f5761154e612a5f565b5b878061155e5761155d612a5f565b5b8584098861156c9190612afa565b860880945081955050508687826115839190612c67565b8361158e9190612afa565b8098508193505050611529565b8394505050505092915050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b61161981611606565b82525050565b60006020820190506116346000830184611610565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126116735761167261164e565b5b8235905067ffffffffffffffff8111156116905761168f611653565b5b6020830191508360208202830111156116ac576116ab611658565b5b9250929050565b600080602083850312156116ca576116c9611644565b5b600083013567ffffffffffffffff8111156116e8576116e7611649565b5b6116f48582860161165d565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561173a57808201518184015260208101905061171f565b83811115611749576000848401525b50505050565b6000601f19601f8301169050919050565b600061176b82611700565b611775818561170b565b935061178581856020860161171c565b61178e8161174f565b840191505092915050565b600060208201905081810360008301526117b38184611760565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6117f88261174f565b810181811067ffffffffffffffff82111715611817576118166117c0565b5b80604052505050565b600061182a61163a565b905061183682826117ef565b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061186b82611840565b9050919050565b61187b81611860565b811461188657600080fd5b50565b60008135905061189881611872565b92915050565b6000819050919050565b6118b18161189e565b81146118bc57600080fd5b50565b6000813590506118ce816118a8565b92915050565b600080fd5b600067ffffffffffffffff8211156118f4576118f36117c0565b5b6118fd8261174f565b9050602081019050919050565b82818337600083830152505050565b600061192c611927846118d9565b611820565b905082815260208101848484011115611948576119476118d4565b5b61195384828561190a565b509392505050565b600082601f8301126119705761196f61164e565b5b8135611980848260208601611919565b91505092915050565b600061016082840312156119a05761199f6117bb565b5b6119ab610160611820565b905060006119bb84828501611889565b60008301525060206119cf848285016118bf565b602083015250604082013567ffffffffffffffff8111156119f3576119f261183b565b5b6119ff8482850161195b565b604083015250606082013567ffffffffffffffff811115611a2357611a2261183b565b5b611a2f8482850161195b565b6060830152506080611a43848285016118bf565b60808301525060a0611a57848285016118bf565b60a08301525060c0611a6b848285016118bf565b60c08301525060e0611a7f848285016118bf565b60e083015250610100611a94848285016118bf565b6101008301525061012082013567ffffffffffffffff811115611aba57611ab961183b565b5b611ac68482850161195b565b6101208301525061014082013567ffffffffffffffff811115611aec57611aeb61183b565b5b611af88482850161195b565b6101408301525092915050565b600060208284031215611b1b57611b1a611644565b5b600082013567ffffffffffffffff811115611b3957611b38611649565b5b611b4584828501611989565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b611b778161189e565b82525050565b6000611b898383611b6e565b60208301905092915050565b6000602082019050919050565b611bab81611b4e565b611bb58184611b59565b9250611bc082611b64565b8060005b83811015611bf1578151611bd88782611b7d565b9650611be383611b95565b925050600181019050611bc4565b505050505050565b6000604082019050611c0e6000830184611ba2565b92915050565b6000611c1f82611860565b9050919050565b611c2f81611c14565b8114611c3a57600080fd5b50565b600081359050611c4c81611c26565b92915050565b600063ffffffff82169050919050565b611c6b81611c52565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b60008060408385031215611ca557611ca4611644565b5b6000611cb385828601611c3d565b9250506020611cc485828601611c79565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b611d0481611cce565b611d0e8184611cd9565b9250611d1982611ce4565b8060005b83811015611d4a578151611d318782611b7d565b9650611d3c83611cee565b925050600181019050611d1d565b505050505050565b6000608082019050611d676000830184611cfb565b92915050565b600080fd5b60006101608284031215611d8957611d88611d6d565b5b81905092915050565b600060208284031215611da857611da7611644565b5b600082013567ffffffffffffffff811115611dc657611dc5611649565b5b611dd284828501611d72565b91505092915050565b600060208284031215611df157611df0611644565b5b600082013567ffffffffffffffff811115611e0f57611e0e611649565b5b611e1b8482850161195b565b91505092915050565b611e2d8161189e565b82525050565b6000602082019050611e486000830184611e24565b92915050565b60008083601f840112611e6457611e6361164e565b5b8235905067ffffffffffffffff811115611e8157611e80611653565b5b602083019150836001820283011115611e9d57611e9c611658565b5b9250929050565b60008060008060408587031215611ebe57611ebd611644565b5b600085013567ffffffffffffffff811115611edc57611edb611649565b5b611ee88782880161165d565b9450945050602085013567ffffffffffffffff811115611f0b57611f0a611649565b5b611f1787828801611e4e565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112611f8057611f7f611f54565b5b80830191505092915050565b60008083356001602003843603038112611fa957611fa8611f54565b5b80840192508235915067ffffffffffffffff821115611fcb57611fca611f59565b5b602083019250600182023603831315611fe757611fe6611f5e565b5b509250929050565b6000806040838503121561200657612005611644565b5b6000612014858286016118bf565b9250506020612025858286016118bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120698261189e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561209c5761209b61202f565b5b600182019050919050565b60006040820190506120bc6000830185611e24565b6120c96020830184611e24565b9392505050565b6120d981611c52565b82525050565b60006020820190506120f460008301846120d0565b92915050565b600067ffffffffffffffff821115612115576121146117c0565b5b602082029050919050565b60008151905061212f816118a8565b92915050565b6000612148612143846120fa565b611820565b9050806020840283018581111561216257612161611658565b5b835b8181101561218b57806121778882612120565b845260208401935050602081019050612164565b5050509392505050565b600082601f8301126121aa576121a961164e565b5b60046121b7848285612135565b91505092915050565b6000608082840312156121d6576121d5611644565b5b60006121e484828501612195565b91505092915050565b600067ffffffffffffffff821115612208576122076117c0565b5b602082029050919050565b6000612226612221846121ed565b611820565b905080602084028301858111156122405761223f611658565b5b835b81811015612269578061225588826118bf565b845260208401935050602081019050612242565b5050509392505050565b600082601f8301126122885761228761164e565b5b6002612295848285612213565b91505092915050565b6000604082840312156122b4576122b3611644565b5b60006122c284828501612273565b91505092915050565b60006122d73683611989565b9050919050565b600081905092915050565b6122f28161189e565b82525050565b600061230483836122e9565b60208301905092915050565b61231981611b4e565b61232381846122de565b925061232e82611b64565b8060005b8381101561235f57815161234687826122f8565b965061235183611b95565b925050600181019050612332565b505050505050565b600081905092915050565b61237b81611cce565b6123858184612367565b925061239082611ce4565b8060005b838110156123c15781516123a887826122f8565b96506123b383611cee565b925050600181019050612394565b505050505050565b6000610100820190506123df6000830186612310565b6123ec6040830185612372565b6123f960c0830184612310565b949350505050565b60008115159050919050565b61241681612401565b811461242157600080fd5b50565b6000815190506124338161240d565b92915050565b60006020828403121561244f5761244e611644565b5b600061245d84828501612424565b91505092915050565b600082825260208201905092915050565b7f424c533a2077726f6e6720736967000000000000000000000000000000000000600082015250565b60006124ad600e83612466565b91506124b882612477565b602082019050919050565b600060208201905081810360008301526124dc816124a0565b9050919050565b7f6461746120746f2073686f727420666f72207369670000000000000000000000600082015250565b6000612519601583612466565b9150612524826124e3565b602082019050919050565b600060208201905081810360008301526125488161250c565b9050919050565b7f424c533a20696e76616c6964207369676e617475726500000000000000000000600082015250565b6000612585601683612466565b91506125908261254f565b602082019050919050565b600060208201905081810360008301526125b481612578565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b6125fb81611cce565b61260581846125e7565b925061261082611ce4565b8060005b8381101561264157815161262887826122f8565b965061263383611cee565b925050600181019050612614565b505050505050565b600061265583836125f2565b60808301905092915050565b6000602082019050919050565b6000612679826125bb565b61268381856125c6565b935061268e836125d7565b8060005b838110156126bf5781516126a68882612649565b97506126b183612661565b925050600181019050612692565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61270c81611b4e565b61271681846126f8565b925061272182611b64565b8060005b8381101561275257815161273987826122f8565b965061274483611b95565b925050600181019050612725565b505050505050565b60006127668383612703565b60408301905092915050565b6000602082019050919050565b600061278a826126cc565b61279481856126d7565b935061279f836126e8565b8060005b838110156127d05781516127b7888261275a565b97506127c283612772565b9250506001810190506127a3565b5085935050505092915050565b60006080820190506127f26000830186612310565b8181036040830152612804818561266e565b90508181036060830152612818818461277f565b9050949350505050565b7f424c533a2076616c69646174655369676e617475726573206661696c65640000600082015250565b6000612858601e83612466565b915061286382612822565b602082019050919050565b600060208201905081810360008301526128878161284b565b9050919050565b6000819050919050565b6128a96128a482611606565b61288e565b82525050565b60006128bb8284612898565b60208201915081905092915050565b6128d381611606565b82525050565b600082825260208201905092915050565b60006128f582611700565b6128ff81856128d9565b935061290f81856020860161171c565b6129188161174f565b840191505092915050565b600060408201905061293860008301856128ca565b818103602083015261294a81846128ea565b90509392505050565b6000612966612961846121ed565b611820565b905080602084028301858111156129805761297f611658565b5b835b818110156129a957806129958882612120565b845260208401935050602081019050612982565b5050509392505050565b600082601f8301126129c8576129c761164e565b5b60026129d5848285612953565b91505092915050565b6000604082840312156129f4576129f3611644565b5b6000612a02848285016129b3565b91505092915050565b612a1481611860565b82525050565b6000608082019050612a2f6000830187611610565b612a3c6020830186611610565b612a496040830185612a0b565b612a566060830184611e24565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f557365206a6163446f75626c652066756e6374696f6e20696e73746561640000600082015250565b6000612ac4601e83612466565b9150612acf82612a8e565b602082019050919050565b60006020820190508181036000830152612af381612ab7565b9050919050565b6000612b058261189e565b9150612b108361189e565b925082821015612b2357612b2261202f565b5b828203905092915050565b600061014082019050612b44600083018d612a0b565b612b51602083018c611e24565b612b5e604083018b611610565b612b6b606083018a611610565b612b786080830189611e24565b612b8560a0830188611e24565b612b9260c0830187611e24565b612b9f60e0830186611e24565b612bad610100830185611e24565b612bbb610120830184611610565b9b9a5050505050505050505050565b7f496e76616c6964206e756d626572000000000000000000000000000000000000600082015250565b6000612c00600e83612466565b9150612c0b82612bca565b602082019050919050565b60006020820190508181036000830152612c2f81612bf3565b9050919050565b6000612c418261189e565b9150612c4c8361189e565b925082612c5c57612c5b612a5f565b5b828204905092915050565b6000612c728261189e565b9150612c7d8361189e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cb657612cb561202f565b5b82820290509291505056fea164736f6c634300080c000a"; - -type BLSSignatureAggregatorConstructorParams = - | [ - linkLibraryAddresses: BLSSignatureAggregatorLibraryAddresses, - signer?: Signer - ] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSSignatureAggregatorConstructorParams -): xs is ConstructorParameters => { - return ( - typeof xs[0] === "string" || - (Array.isArray as (arg: any) => arg is readonly any[])(xs[0]) || - "_isInterface" in xs[0] - ); -}; - -export class BLSSignatureAggregator__factory extends ContractFactory { - constructor(...args: BLSSignatureAggregatorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - const [linkLibraryAddresses, signer] = args; - super( - _abi, - BLSSignatureAggregator__factory.linkBytecode(linkLibraryAddresses), - signer - ); - } - } - - static linkBytecode( - linkLibraryAddresses: BLSSignatureAggregatorLibraryAddresses - ): string { - let linkedBytecode = _bytecode; - - linkedBytecode = linkedBytecode.replace( - new RegExp("__\\$b9791500c16b639726521ab5391f2dd20a\\$__", "g"), - linkLibraryAddresses["src/4337_wallet/bls/lib/BLSOpen.sol:BLSOpen"] - .replace(/^0x/, "") - .toLowerCase() - ); - - return linkedBytecode; - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BLSSignatureAggregator { - return super.attach(address) as BLSSignatureAggregator; - } - connect(signer: Signer): BLSSignatureAggregator__factory { - return super.connect(signer) as BLSSignatureAggregator__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSSignatureAggregatorInterface { - return new utils.Interface(_abi) as BLSSignatureAggregatorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSSignatureAggregator { - return new Contract( - address, - _abi, - signerOrProvider - ) as BLSSignatureAggregator; - } -} - -export interface BLSSignatureAggregatorLibraryAddresses { - ["src/4337_wallet/bls/lib/BLSOpen.sol:BLSOpen"]: string; -} diff --git a/src/contracts/factories/BLS__factory.ts b/src/contracts/factories/BLS__factory.ts deleted file mode 100644 index e6972c49..00000000 --- a/src/contracts/factories/BLS__factory.ts +++ /dev/null @@ -1,106 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { BLS, BLSInterface } from "../BLS"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes8", - name: "c__618a6e70", - type: "bytes8", - }, - ], - name: "c_618a6e70", - outputs: [], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes8", - name: "c__618a6e70", - type: "bytes8", - }, - ], - name: "c_false618a6e70", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes8", - name: "c__618a6e70", - type: "bytes8", - }, - ], - name: "c_true618a6e70", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x6101ae610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80630fde8e6f1461005057806321a513e414610080578063753ac54d146100b0575b600080fd5b61006a6004803603810190610065919061013e565b6100cc565b6040516100779190610186565b60405180910390f35b61009a6004803603810190610095919061013e565b6100d7565b6040516100a79190610186565b60405180910390f35b6100ca60048036038101906100c5919061013e565b6100de565b005b600060019050919050565b6000919050565b50565b600080fd5b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b61011b816100e6565b811461012657600080fd5b50565b60008135905061013881610112565b92915050565b600060208284031215610154576101536100e1565b5b600061016284828501610129565b91505092915050565b60008115159050919050565b6101808161016b565b82525050565b600060208201905061019b6000830184610177565b9291505056fea164736f6c634300080f000a"; - -type BLSConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: BLSConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class BLS__factory extends ContractFactory { - constructor(...args: BLSConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BLS { - return super.attach(address) as BLS; - } - connect(signer: Signer): BLS__factory { - return super.connect(signer) as BLS__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): BLSInterface { - return new utils.Interface(_abi) as BLSInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): BLS { - return new Contract(address, _abi, signerOrProvider) as BLS; - } -} diff --git a/src/contracts/factories/DepositPaymaster__factory.ts b/src/contracts/factories/DepositPaymaster__factory.ts deleted file mode 100644 index d44d3c3f..00000000 --- a/src/contracts/factories/DepositPaymaster__factory.ts +++ /dev/null @@ -1,522 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - DepositPaymaster, - DepositPaymasterInterface, -} from "../DepositPaymaster"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "_entryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "COST_OF_POST", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "addDepositFor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "token", - type: "address", - }, - { - internalType: "contract IOracle", - name: "tokenPriceOracle", - type: "address", - }, - ], - name: "addToken", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "balances", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "deposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "depositInfo", - outputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "uint256", - name: "_unlockBlock", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockTokenDeposit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - name: "oracles", - outputs: [ - { - internalType: "contract IOracle", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "enum IPaymaster.PostOpMode", - name: "mode", - type: "uint8", - }, - { - internalType: "bytes", - name: "context", - type: "bytes", - }, - { - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - ], - name: "postOp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "_entryPoint", - type: "address", - }, - ], - name: "setEntryPoint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "unlockBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unlockTokenDeposit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "maxCost", - type: "uint256", - }, - ], - name: "validatePaymasterUserOp", - outputs: [ - { - internalType: "bytes", - name: "context", - type: "bytes", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IERC20", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawTokensTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6080806040523461006c57601f611deb38819003918201601f19168301916001600160401b038311848410176100725780849260209460405283398101031261006c57516001600160a01b03811681141561006c5761005d9061008c565b604051611cfb90816100f08239f35b50600080fd5b50505050634e487b7160e01b600052604160045260246000fd5b60005460018060a01b031991338383161760005560018060a01b0391823391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06000604051a3169060015416176001553360005260046020524360406000205556fe6040608081526004361015610015575b50600080fd5b600090813560e01c80630396cb60146104c5578063205c2878146104ad578063382edd9e14610495578063493b0170146104615780634a6f84cf146104235780635476bd721461040b578063584465f2146103f4578063715018a6146103dd578063796d4371146103bc5780638da5cb5b1461036d5780639ed0fb6814610349578063a9a234091461032e578063addd5099146102c7578063b0d691fe1461028a578063bb9fe6bf14610273578063c23a5cea1461025c578063c23f001f146101e5578063c399ec88146101ba578063cc9c837c146101a2578063cd8f80c21461017e578063d0e30db01461016c578063f2fde38b146101525763f465c77e1461011f575061000f565b3461014e5761014a915061013d61013536610723565b919050611395565b92909151928392836107eb565b0390f35b5080fd5b503461014e5761016961016436610608565b6108e0565b51f35b5061017636610664565b610169611973565b503461014e5761018d36610664565b61016933600052600460205260006040812055565b503461014e576101696101b436610578565b91610fab565b503461014e5761014a91506101ce36610664565b6101d6611b34565b90519081529081906020820190565b503461014e5761014a915061024c6102276101ff366105c2565b919073ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b5490519081529081906020820190565b503461014e5761016961026e36610608565b611c0b565b503461014e5761028236610664565b610169611b95565b503461014e5761014a915061029e36610664565b600154905173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b503461014e5761014a91506103086102de36610608565b73ffffffffffffffffffffffffffffffffffffffff80911660005260026020526040600020541690565b905173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b503461014e5761016961034036610690565b92919091611729565b503461014e5761035836610664565b61016933600052600460205243604060002055565b503461014e5773ffffffffffffffffffffffffffffffffffffffff61014a9261039536610664565b549151911673ffffffffffffffffffffffffffffffffffffffff1681529081906020820190565b5090346103d857506103cd36610664565b516188b88152602090f35b809150fd5b503461014e576103ec36610664565b61016961086d565b503461014e5761016961040636610608565b6116d8565b503461014e5761016961041d366105c2565b906109e9565b503461014e5761014a91506101d661043a36610608565b73ffffffffffffffffffffffffffffffffffffffff16600052600460205260406000205490565b503461014e5761014a915061047e610478366105c2565b90610f2f565b915190815260208101919091529081906040820190565b503461014e576101696104a736610578565b91610aa2565b503461014e576101696104bf3661053b565b906119ff565b506101696104d2366104d7565b611aae565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261000f5760043563ffffffff81168114156105155790565b5050600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116141561000f57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261000f576004356105718161051c565b9060243590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261000f576004356105ae8161051c565b906024356105bb8161051c565b9060443590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261000f576004356105f88161051c565b906024356106058161051c565b90565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261000f576004356106058161051c565b73ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc600091011261000f57565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261051557600435600381101561071b579160243567ffffffffffffffff928382116107115780602383011215610711578160040135938411610711576024848301011161070857602401919060443590565b50505050600080fd5b5050505050600080fd5b505050600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9060608282011261071b576004359167ffffffffffffffff831161070857826101609203011261051557600401906024359060443590565b91908251928382526000905b8482106107d35750601f84602094957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093116107c6575b0116010190565b60008582860101526107bf565b90602090818082850101519082860101520190610788565b92919061080260209160408652604086019061077c565b930152565b1561080e57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8216916108b5338414610807565b1682557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e082604051a3565b6000549073ffffffffffffffffffffffffffffffffffffffff80831691610908338414610807565b16918215610961577fffffffffffffffffffffffff0000000000000000000000000000000000000000839116176000557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06000604051a3565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff9081600091610a11828454163314610807565b168152600260205281604082205416610a53576040902091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b9250505080fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81198111610a96570190565b610a9e610a5a565b0190565b91610aaf81303386610c35565b73ffffffffffffffffffffffffffffffffffffffff928381166000526002602052836040600020541615610b3857610b0e83610227610b169373ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b918254610a8a565b9055163314610b2157565b610b3633600052600460205260006040812055565b565b505050505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e737570706f7274656420746f6b656e0000000000000000000000000000006044820152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610be757604052565b610bef610b9b565b604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610be757604052565b9092610b3693604051937f23b872dd00000000000000000000000000000000000000000000000000000000602086015273ffffffffffffffffffffffffffffffffffffffff809216602486015216604484015260648301526064825260a0820182811067ffffffffffffffff821117610cb1575b604052610d63565b610cb9610b9b565b610ca9565b9081602091031261051557518015158114156105155790565b15610cde57565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff169060405190610d8782610bcb565b6020928383527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656484840152803b15610dfe5760008281928287610dd99796519301915af1610dd3610e60565b90610ecc565b80519081610de657505050565b82610b3693610df9938301019101610cbe565b610cd7565b50505060649150604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b3d15610ec7573d9067ffffffffffffffff8211610eba575b60405191610eae60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610bf4565b82523d6000602084013e565b610ec2610b9b565b610e78565b606090565b90919015610ed8575090565b81519192509015610eec5750805190602001fd5b610f2b91506040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061077c565b0390fd5b91909173ffffffffffffffffffffffffffffffffffffffff8091166000526003602052610f808360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b549216600052600460205260406000205490565b818110610f9f570390565b610fa7610a5a565b0390565b91903360005260046020526040600020541515806110a3575b1561101b57610b3692610ffb336102278373ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b83815481811061100e575b0390556110b1565b611016610a5a565b611006565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4465706f7369745061796d61737465723a206d75737420756e6c6f636b546f6b60448201527f656e4465706f73697400000000000000000000000000000000000000000000006064820152fd5b506040600020544311610fc4565b610b369273ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526080820182811067ffffffffffffffff821117610cb157604052610d63565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561071b570180359067ffffffffffffffff821161071b5760200191813603831361071b57565b1561117a57565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4465706f7369745061796d61737465723a207061796d6173746572416e64446160448201527f7461206d757374207370656369667920746f6b656e00000000000000000000006064820152fd5b909291928360141161070857831161071b57601401917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0190565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000903581811693926014811061126f57505050565b60140360031b82901b16169150565b1561128557565b5060846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4465706f7369745061796d61737465723a206465706f736974206e6f74206c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152fd5b1561131057565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4465706f7369745061796d61737465723a206465706f73697420746f6f206c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152fd5b6188b860a0820135111561150f57806114dd6113fc6113e36113dd6113d76113c4610120611509980187611122565b80916113d260288314611173565b6111ff565b9061123a565b60601c90565b73ffffffffffffffffffffffffffffffffffffffff1690565b9373ffffffffffffffffffffffffffffffffffffffff8335169261142961142383886115b2565b91611c8e565b61145d6114568673ffffffffffffffffffffffffffffffffffffffff166000526004602052604060002090565b541561127e565b6114978261148f876102278b73ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b541015611309565b6040519687956020870191959493909260809360a084019773ffffffffffffffffffffffffffffffffffffffff8092168552166020840152604083015260608201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610bf4565b90600090565b50505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4465706f7369745061796d61737465723a2067617320746f6f206c6f7720666f60448201527f7220706f73744f700000000000000000000000000000000000000000000000006064820152fd5b90816020910312610515575190565b506040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff8091166000526002602052604060002054168015611651576040517fd1eca9cf0000000000000000000000000000000000000000000000000000000081526004810192909252602090829060249082905afa908115611644575b60009161162c575090565b610605915061163b3d82610bf4565b3d810190611596565b61164c6115a5565b611621565b50505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4465706f7369745061796d61737465723a20756e737570706f7274656420746f60448201527f6b656e00000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff906116fd82600054163314610807565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155565b90919273ffffffffffffffffffffffffffffffffffffffff938460015416331415611877578360a091810103126107115760029383610b0e936117b76117d4946117b261181198359561177b8761051c565b60208601359661178a8861051c565b16946117ad6080820135936117a760406060850135940135611882565b90610a8a565b6118c0565b6118fd565b96816117c38993611939565b146118155761063e91309084610c35565b60005473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b9055565b50611844906102278373ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b61184f868254610f94565b905573ffffffffffffffffffffffffffffffffffffffff166000526003602052604060002090565b505050505050600080fd5b7e01df5959efbba7c2ad51be94be49d853cade78a80d9347cc0a1080436890a581116001166118b3575b6188b80290565b6118bb610a5a565b6118ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211811515166118f1570290565b6118f9610a5a565b0290565b8115611907570490565b5050507f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6003111561194357565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff60015416803b15610515576000602491604051928380927fb760faf900000000000000000000000000000000000000000000000000000000825230600483015234905af180156119f2575b6119da5750565b6000906119e73d82610bf4565b3d8101031261000f57565b6119fa6115a5565b6119d3565b9073ffffffffffffffffffffffffffffffffffffffff600092611a26828554163314610807565b8160015416803b15611aa5578492918360449260405196879586947f205c287800000000000000000000000000000000000000000000000000000000865216600485015260248401525af18015611a98575b611a80575050565b8190611a8c3d82610bf4565b3d810103126103d85750565b611aa06115a5565b611a78565b50505050809150fd5b73ffffffffffffffffffffffffffffffffffffffff90600091611ad5818454163314610807565b6001541690813b15611b2d5763ffffffff6024849260405194859384927f0396cb6000000000000000000000000000000000000000000000000000000000845216600483015234905af18015611a9857611a80575050565b5050809150fd5b6024602073ffffffffffffffffffffffffffffffffffffffff60015416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156116445760009161162c575090565b73ffffffffffffffffffffffffffffffffffffffff600090611bbb818354163314610807565b60015416803b15611c05578180916004604051809481937fbb9fe6bf0000000000000000000000000000000000000000000000000000000083525af18015611a9857611a80575050565b50809150fd5b73ffffffffffffffffffffffffffffffffffffffff90600091611c32818454163314610807565b806001541691823b15611c865790602484928360405195869485937fc23a5cea0000000000000000000000000000000000000000000000000000000085521660048401525af18015611a9857611a80575050565b505050809150fd5b61010060e0820135910135808214611cb357480180821015611cae575090565b905090565b509056fea3646970667358221220c8039880c9cd3d46a41fd5c576e5ff902ee2bffedebbe683091f1b764338ab8c6c6578706572696d656e74616cf564736f6c634300080c0041"; - -type DepositPaymasterConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: DepositPaymasterConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class DepositPaymaster__factory extends ContractFactory { - constructor(...args: DepositPaymasterConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _entryPoint, - overrides || {} - ) as Promise; - } - getDeployTransaction( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_entryPoint, overrides || {}); - } - attach(address: string): DepositPaymaster { - return super.attach(address) as DepositPaymaster; - } - connect(signer: Signer): DepositPaymaster__factory { - return super.connect(signer) as DepositPaymaster__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): DepositPaymasterInterface { - return new utils.Interface(_abi) as DepositPaymasterInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): DepositPaymaster { - return new Contract(address, _abi, signerOrProvider) as DepositPaymaster; - } -} diff --git a/src/contracts/factories/EntryPoint__factory.ts b/src/contracts/factories/EntryPoint__factory.ts deleted file mode 100644 index 594b5975..00000000 --- a/src/contracts/factories/EntryPoint__factory.ts +++ /dev/null @@ -1,1278 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { EntryPoint, EntryPointInterface } from "../EntryPoint"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "paid", - type: "uint256", - }, - { - internalType: "uint64", - name: "validAfter", - type: "uint64", - }, - { - internalType: "uint64", - name: "validBefore", - type: "uint64", - }, - ], - name: "ExecutionResult", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "opIndex", - type: "uint256", - }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "FailedOp", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "SenderAddressResult", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureValidationFailed", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint64", - name: "validAfter", - type: "uint64", - }, - { - internalType: "uint64", - name: "validUntil", - type: "uint64", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - ], - name: "ValidationResult", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint64", - name: "validAfter", - type: "uint64", - }, - { - internalType: "uint64", - name: "validUntil", - type: "uint64", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "address", - name: "actualAggregator", - type: "address", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "stakeInfo", - type: "tuple", - }, - ], - internalType: "struct IEntryPoint.AggregatorStakeInfo", - name: "aggregatorInfo", - type: "tuple", - }, - ], - name: "ValidationResultWithAggregation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "factory", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "paymaster", - type: "address", - }, - ], - name: "AccountDeployed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalDeposit", - type: "uint256", - }, - ], - name: "Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureAggregatorChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "withdrawTime", - type: "uint256", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "withdrawTime", - type: "uint256", - }, - ], - name: "StakeUnlocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "StakeWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "paymaster", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasUsed", - type: "uint256", - }, - ], - name: "UserOperationEvent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "revertReason", - type: "bytes", - }, - ], - name: "UserOperationRevertReason", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Withdrawn", - type: "event", - }, - { - inputs: [], - name: "SIG_VALIDATION_FAILED", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, - ], - name: "_simulateFindAggregator", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "_unstakeDelaySec", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - 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: "account", - type: "address", - }, - ], - name: "depositTo", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "deposits", - outputs: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint64", - name: "withdrawTime", - type: "uint64", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getDepositInfo", - outputs: [ - { - components: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint64", - name: "withdrawTime", - type: "uint64", - }, - ], - internalType: "struct IStakeManager.DepositInfo", - name: "info", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - ], - name: "getSenderAddress", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "userOps", - type: "tuple[]", - }, - { - internalType: "contract IAggregator", - name: "aggregator", - type: "address", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.UserOpsPerAggregator[]", - name: "opsPerAggregator", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleAggregatedOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "ops", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.MemoryUserOp", - name: "mUserOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "uint256", - name: "contextOffset", - type: "uint256", - }, - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.UserOpInfo", - name: "opInfo", - type: "tuple", - }, - { - internalType: "bytes", - name: "context", - type: "bytes", - }, - ], - name: "innerHandleOp", - outputs: [ - { - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "op", - type: "tuple", - }, - ], - name: "simulateHandleOp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "simulateValidation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "withdrawAmount", - type: "uint256", - }, - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60a0806040523462000088576102518181016001600160401b038111838210176200006f57829162006028833903906000f080156200006257608052604051615f9990816200008f823960805181818161210201528181613afe0152613e470152f35b506040513d6000823e3d90fd5b505050634e487b7160e01b600052604160045260246000fd5b50600080fdfe6040608081526004361015610025575b50361561001b57600080fd5b6100236152c9565b005b600090813560e01c80630396cb60146103eb5780631d732756146103cb5780631fad948c146103b3578063205c28781461039b5780634b1d7cf5146103835780635287ce121461030957806370a08231146102bb5780638f41ec5a1461029b5780639b249f6914610281578063a47a3fbc14610267578063a61935311461023c578063b760faf91461022a578063bb9fe6bf14610213578063c2077116146101fa578063c23a5cea146101e0578063ee219423146101bd5763fc7e286d146100ee575b5061000f565b346101b9576101b5915061016861010436610845565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000208054906dffffffffffffffffffffffffffff9260018484169460ff8560701c169460781c169201549067ffffffffffffffff63ffffffff83169260201c1690565b94516dffffffffffffffffffffffffffff948516815292151560208401529216604082015263ffffffff909116606082015267ffffffffffffffff909116608082015290819060a0820190565b0390f35b5080fd5b5050346101dd57506101d66101d13661093e565b611ea7565b38806100e8565b80fd5b50346101b9576101f76101f236610845565b615b9a565b51f35b5050346101dd57506101d661020e3661093e565b61188a565b50346101b9576102223661087b565b6101f7615916565b506101f761023736610845565b6153b9565b50346101b9576101b591506102586102533661093e565b611c4c565b90519081529081906020820190565b5050346101dd57506101d661027b366108fb565b90612191565b5050346101dd57506101d6610295366108b2565b906120a1565b5090346102b657506102ac3661087b565b5160018152602090f35b809150fd5b50346101b9576101b591506102586102d236610845565b73ffffffffffffffffffffffffffffffffffffffff1660005260006020526dffffffffffffffffffffffffffff6040600020541690565b50346101b9576101b5915061032561032036610845565b6151bb565b905191829182919091608067ffffffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346101b9576101f761039536610790565b91611552565b50346101b9576101f76103ad36610808565b90615db5565b50346101b9576101f76103c536610790565b91610b46565b50346101b9576101b591506102586103e23661065b565b92919091611ae9565b506101f76103f8366103fd565b615725565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126104425760043563ffffffff811681141561043b5790565b5050600080fd5b50600080fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761049457604052565b61049c610448565b604052565b610100810190811067ffffffffffffffff82111761049457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049457604052565b6040519060c0820182811067ffffffffffffffff82111761049457604052565b604051906040820182811067ffffffffffffffff82111761049457604052565b6040519061054c82610478565b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff811161058a575b01160190565b610592610448565b610584565b9291926105a38261054e565b916105b160405193846104be565b8294818452818301116105ce578281602093846000960137010152565b5050505050600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116141561044257565b6024359061054c826105d8565b60c4359061054c826105d8565b359061054c826105d8565b9181601f8401121561064a5782359167ffffffffffffffff8311610652576020838186019501011161064a57565b505050600080fd5b50505050600080fd5b6101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261043b5767ffffffffffffffff91600435838111610652578260238201121561065257828160246106b893600401359101610597565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc830161018081126105ce57610100604051916106f583610478565b126105ce57604051610706816104a1565b61070e6105f7565b815260443560208201526064356040820152608435606082015260a4356080820152610738610604565b60a082015260e43560c08201526101043560e08201528152610124356020820152610144356040820152610164356060820152610184356080820152926101a4359182116105ce5761078c9160040161061c565b9091565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261043b5760043567ffffffffffffffff9283821161065257806023830112156106525781600401359384116106525760248460051b8301011161064a576024019190602435610805816105d8565b90565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126104425760043561083e816105d8565b9060243590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602091011261044257600435610805816105d8565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc600091011261044257565b600091031261044257565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261043b576004359067ffffffffffffffff821161064a5761078c9160040161061c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261044257600435610931816105d8565b90602435610805816105d8565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9060208282011261064a576004359167ffffffffffffffff831161065257826101609203011261043b5760040190565b60209067ffffffffffffffff81116109a9575b60051b0190565b6109b1610448565b6109a2565b604051906109c382610478565b604051608083610100830167ffffffffffffffff811184821017610a2c575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b610a34610448565b6109e2565b90610a438261098f565b610a5060405191826104be565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610a7e829461098f565b019060005b828110610a8f57505050565b602090610a9a6109b6565b82828501015201610a83565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015610aeb575b60051b010190565b610af3610aa6565b610ae3565b9190811015610b39575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561064a570190565b610b41610aa6565b610b02565b90929192610b5381610a39565b9160005b828110610bac575060009283925b808410610b7a575050505061054c9192610dd4565b90919293600190610ba1610b8f878588610af8565b610b998887610ad6565b519088611106565b019401929190610b65565b610bb98185939495610ad6565b51610bc5828686610af8565b6000915a815192610bd68482612a8e565b610bdf81611c4c565b60208401526080918285015194606095868201511795610c256effffffffffffffffffffffffffffff60409889850151176101008701359060e08801351717111561265b565b610c2e82612b50565b610c3a8188878d612d50565b99919050610c4743600052565b839460a0809101918d73ffffffffffffffffffffffffffffffffffffffff610c83855173ffffffffffffffffffffffffffffffffffffffff1690565b16610d87575b50505a87039088013510610ccb57509260c092610cc19997959289979560019d9c9a01528601525a9003910135019082015284612306565b0192919092610b57565b9b509e505050505050505050509350610d839250610cfe91505173ffffffffffffffffffffffffffffffffffffffff1690565b92519283927efa072b000000000000000000000000000000000000000000000000000000008452600484019060a09273ffffffffffffffffffffffffffffffffffffffff91835216602082015260606040820152601e60608201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060808201520190565b0390fd5b610d9a939d508591929750898c91614509565b9a9094388d610c89565b3d15610dcf573d90610db58261054e565b91610dc360405193846104be565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015610e6c5760008092918192604051915af1610e05610da4565b5015610e0d57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b50505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561064a570180359067ffffffffffffffff821161064a5760200191813603831361064a57565b9081602091031261043b575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b918091926000905b828210610f8c575011610f85575050565b6000910152565b91508060209183015181860152018291610f74565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610fdd81518092818752878088019101610f6c565b0116010190565b90610ffe60809161080596946101c0808652850191610f2d565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a0818403910152610fa1565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181106110e2570390565b6110ea6110a7565b0390565b811981116110fa570190565b6111026110a7565b0190565b909291925a8460206111216060830151946060810190610ecd565b9061115a8660405195869485947f1d73275600000000000000000000000000000000000000000000000000000000865260048601610fe4565b03816000305af160009181611254575b5061124d575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146111c357936111bd6111b261080595965a906110d7565b6080830151906110ee565b92614bdc565b5050915160a001516040517efa072b000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff1660248301525060606044820152600f60648201527f41413935206f7574206f66206761730000000000000000000000000000000000608482015260a490fd5b9450505050565b61126d9192506112643d826104be565b3d810190610f1e565b903861116a565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110fa570190565b91908110156112e3575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561064a570190565b6112eb610aa6565b6112ac565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561064a570180359067ffffffffffffffff821161064a57602001918160051b3603831361064a57565b35610805816105d8565b9190357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561064a578201906020823592019267ffffffffffffffff8311610652578236031261064a57565b610805916113cb816113b184610611565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526114666114176113fc6113eb604086018661134e565b610160806040880152860191610f2d565b611409606086018661134e565b908583036060870152610f2d565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206114598186018661134e565b9185840390860152610f2d565b91611477610140918281019061134e565b929091818503910152610f2d565b949391929083604087016040885252606086019360608160051b8801019482600090815b8483106114c85750505050505084602061080595968503910152610f2d565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea184360301811215611543576001918461153192016113a0565b986020908101969501930191906114a9565b50509850505050505050505080fd5b92916000805b83821061185b576115699150610a39565b6000805b8481106116b857505060008093815b8181106115c9575050505061054c9293507f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d604051806115c181906000602083019252565b0390a1610dd4565b6116536115d782848b6112a2565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d61164a61162361160a60208501611344565b73ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390a1806112f0565b906000915b8083106116705750505061166b90611274565b61157c565b909194976116ab6116a56116b19261169f8c8b611698826116928e8b8d610af8565b92610ad6565b5191611106565b906110ee565b99611274565b95611274565b9190611658565b6116c38186896112a2565b6116cd81806112f0565b91906116db60208301611344565b73ffffffffffffffffffffffffffffffffffffffff169260005b8782821061181557505083611717575b5050505061171290611274565b61156d565b61172e60409a9896949a999795938a810190610ecd565b9190928b3b15611803576117716000938c5195869485947fe3563a4f00000000000000000000000000000000000000000000000000000000865260048601611485565b03818c5afa90816117e6575b506117d157505093517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9590951660048601525060249450505050fd5b90929496506117129193955090388080611705565b6117fd906117f43d826104be565b3d8101906108a7565b3861177d565b50505050505050505050505050600080fd5b8761184b61183d6118438986611832611856989e61185098610ad6565b519384918a8c610af8565b86612876565b50918c612306565b611274565b96611274565b6116f5565b61187e6118849161187661187085888b6112a2565b806112f0565b9190506110ee565b91611274565b90611558565b90506118946109b6565b6118a86118a182846126c1565b50906125fe565b90915060004381525a908460206118c86060830151986060810190610ecd565b906119018a60405195869485947f1d73275600000000000000000000000000000000000000000000000000000000865260048601610fe4565b038185305af1829181611a55575b50611a455750806020817fdeaddead00000000000000000000000000000000000000000000000000000000933e51146119b8576119696084956119626119586080945a906110d7565b84880151906110ee565b9086614871565b935b015192604051937fcd8ac2460000000000000000000000000000000000000000000000000000000085526004850152602484015267ffffffffffffffff8092166044840152166064820152fd5b5050905160a001516040517efa072b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116602482015260606044820152600f60648201527f41413935206f7574206f66206761730000000000000000000000000000000000608482015260a492509050fd5b905060849550608091509361196b565b611a659192506112643d826104be565b903861190f565b15611a7357565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b604090610805939281528160208201520190610fa1565b909291925a93611afa303314611a6c565b8151946040860151955a611388606083015189010111611c1a57610805966000958051611b41575b50505090611b3b915a9003608084015101943691610597565b91614ed7565b611b7091611b6c91611b67855173ffffffffffffffffffffffffffffffffffffffff1690565b615f14565b1590565b611b7c575b8080611b22565b611b3b92919450611b8b615f26565b908151611b9f575b50506001939091611b75565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff602087015192611c106020611bfe835173ffffffffffffffffffffffffffffffffffffffff1690565b92015195604051938493169683611ad2565b0390a33880611b93565b50505050505050507fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b80611c5b610140820182610ecd565b50037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081016040519182016040528082526020820192833751902060405160208101918252306040820152466060820152606081526080810181811067ffffffffffffffff821117611cd1575b60405251902090565b611cd9610448565b611cc8565b604051906040820182811067ffffffffffffffff821117611d09575b60405260006020838281520152565b611d11610448565b611cfa565b9060141161043b5790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110611d5957505050565b60140360031b82901b16169150565b9060c060a061080593805184526020810151602085015260408101511515604085015267ffffffffffffffff80606083015116606086015260808201511660808501520151918160a08201520190610fa1565b9294611e1c61054c95611e0a610100959998611df8611de4602097610140808c528b0190611d68565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b611e9661054c94611e84611e6f60a0959998969960e0865260e0860190611d68565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9050611f9f611eb46109b6565b611ebe81846126c1565b909192611fb0611f5e611ef2611eed60a085510173ffffffffffffffffffffffffffffffffffffffff90511690565b615274565b94611f58611f30611f1c611eed875173ffffffffffffffffffffffffffffffffffffffff90511690565b9a611f25611cde565b506040810190610ecd565b906000601483106120735750611f4c611eed92611f5292611d16565b90611d24565b60601c90565b966125fe565b919790611f8e6080860151996060604088015197015196611f7d6104ff565b9b8c5260208c0152151560408b0152565b67ffffffffffffffff166060890152565b67ffffffffffffffff166080870152565b60a085015273ffffffffffffffffffffffffffffffffffffffff81166120075750610d83916040519485947ff04297e900000000000000000000000000000000000000000000000000000000865260048601611e4d565b90610d839261201583615274565b61203c61202061051f565b73ffffffffffffffffffffffffffffffffffffffff9095168552565b60208401526040519586957f356877a300000000000000000000000000000000000000000000000000000000875260048701611dbb565b915050615274565b9081602091031261043b5751610805816105d8565b916020610805938181520191610f2d565b90602492506120e26040519283927f570e1a360000000000000000000000000000000000000000000000000000000084526020600485015285840191610f2d565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215612184575b600092612164575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61217d9192506121743d826104be565b3d81019061207b565b9038612134565b61218c61109a565b61212c565b90915061219f303314611a6c565b600090803b156122a45773ffffffffffffffffffffffffffffffffffffffff928381161515908161229a575b50612238576020906004604051809581937f3ad59dbc000000000000000000000000000000000000000000000000000000008352165afa909181612221575b5061221c575060005b60005260206000fd5b612213565b6122319192506121743d826104be565b903861220a565b50506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f7965640000000000604482015260649150fd5b90503b15386121cb565b50506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f79656400000000000000604482015260649150fd5b92909161231290612547565b906124d6576124665761232490612547565b906123de57612331575050565b5160a001516040517efa072b000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16602482015260606044820152602160648201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560848201527f650000000000000000000000000000000000000000000000000000000000000060a482015260c49150fd5b505160a001516040517efa072b000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16602482015260606044820152601460648201527f41413334207369676e6174757265206572726f72000000000000000000000000608482015260a49150fd5b50506040517efa072b00000000000000000000000000000000000000000000000000000000815260048101919091526000602482015260606044820152601760648201527f414132322065787069726564206f72206e6f7420647565000000000000000000608482015260a49150fd5b50506040517efa072b0000000000000000000000000000000000000000000000000000000081526004810192909252506000602482015260606044820152601460648201527f41413234207369676e6174757265206572726f72000000000000000000000000608482015260a49150fd5b801561257b5761255690612584565b92919267ffffffffffffffff809116421191821561257357505090565b164210919050565b50600090600090565b9060ff82161515918060081c7f800000000000000000000000000000000000000000000000000000000000000181126001166125f1575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff910181169160481c1691565b6125f96110a7565b6125bb565b61260790612584565b919390826126158295612584565b93918891989115612653575b509667ffffffffffffffff918280831691161061264b575b508083169116116126475750565b9150565b955038612639565b905038612621565b1561266257565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b91906000915a918051946126d58682612a8e565b6126de81611c4c565b602083015261271c6effffffffffffffffffffffffffffff60808801516060890151176040890151176101008401359060e08501351717111561265b565b61272586612b50565b936127318584846130ce565b989196909661273f43600052565b60a0606093019073ffffffffffffffffffffffffffffffffffffffff612779835173ffffffffffffffffffffffffffffffffffffffff1690565b1661285c575b505a840360a0860135106127ab5750604085015260608401526080919060c0905a900391013501910152565b51610d83995073ffffffffffffffffffffffffffffffffffffffff1697506127d69650505050505050565b6040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830173ffffffffffffffffffffffffffffffffffffffff60a0926000835216602082015260606040820152601e60608201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060808201520190565b9092508161286d9299508686614208565b9790913861277f565b91939092936000935a825161288b8184612a8e565b61289483611c4c565b60208501526128d26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e08701351717111561265b565b6128e86128de82612b50565b809986868a613593565b99919790976128f643600052565b60a0606094019073ffffffffffffffffffffffffffffffffffffffff612930835173ffffffffffffffffffffffffffffffffffffffff1690565b16612a0d575b505a850360a087013510612963575050604085015260608401526080919060c0905a900391013501910152565b9750985050505050505061298c91505173ffffffffffffffffffffffffffffffffffffffff1690565b6040517efa072b000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16602482015260606044820152601e60648201527f41413430206f76657220766572696669636174696f6e4761734c696d69740000608482015260a490fd5b909350819950828787612a1f94614509565b98909238612936565b15612a2f57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b612b0090612ab8612a9e82611344565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190610ecd565b908115612b4557612b2a611f52611f4c8460a094612b25601461054c99981015612a28565b611d16565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff1615612b925760c060035b60ff60408401519116606084015102016080830151019101510290565b60c06001612b75565b60009060033d11612ba857565b905060046000803e60005160e01c90565b600060443d10610805576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612c3557818401948551938411612c3d573d85010160208487010111612c355750610805929101602001906104be565b949350505050565b50949350505050565b9060606108059260008152600060208201528160408201520190610fa1565b60609061080593928152600060208201528160408201520190610fa1565b60609073ffffffffffffffffffffffffffffffffffffffff6108059493600083521660208201528160408201520190610fa1565b73ffffffffffffffffffffffffffffffffffffffff610805949360609383521660208201528160408201520190610fa1565b612d01606092959493956080835260808301906113a0565b946020820152600060408201520152565b90606092959493612d4073ffffffffffffffffffffffffffffffffffffffff926080855260808501906113a0565b9660208401521660408201520152565b60009360009283945a94612e176020835193612d80855173ffffffffffffffffffffffffffffffffffffffff1690565b95612d99612d916040830183610ecd565b90848c613dbc565b60a086015173ffffffffffffffffffffffffffffffffffffffff169085809373ffffffffffffffffffffffffffffffffffffffff809416159889613066575b60600151908601516040517f0825d1fc000000000000000000000000000000000000000000000000000000008152978896879586939060048501612ce9565b03938a1690f182918161304f575b506130465750600190612e36612b9b565b6308c379a014612ff2575b50612f76575b612e55575b5050505a900392565b612e7f9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91612eae612e9b84546dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff1690565b90818311612efa575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff161790555b388080612e4c565b95505050505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152601760608201527f41413231206469646e2774207061792070726566756e6400000000000000000060808201520190565b50505092505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152601660608201527f4141323320726576657274656420286f72204f4f47290000000000000000000060808201520190565b612ffa612bb9565b90816130065750612e41565b975098505050505092505050610d836040519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c65565b9650612e479050565b61305f9192506112643d826104be565b9038612e25565b94506130ac612e9b6130988c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b8111156130c35750856060835b96915050612dd8565b606087918d036130ba565b600160009360009283945a9481516130fa815173ffffffffffffffffffffffffffffffffffffffff1690565b9360409661311461310d89840184610ecd565b9087613a76565b60a083015173ffffffffffffffffffffffffffffffffffffffff1661313843600052565b303b156135835788517fa47a3fbc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152821660248201528581604481305afa908161356f575b5061356a57816131a5612b9b565b6308c379a014613514575b6134a3575b84928573ffffffffffffffffffffffffffffffffffffffff80931615978861344d575b6020606081979801519101519261321d8d51988997889687947f0825d1fc00000000000000000000000000000000000000000000000000000000865260048601612d12565b03938a1690f1829181613436575b5061342d575060019061323c612b9b565b6308c379a0146133da575b50613361575b61325a575050505a900392565b6132849073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b916132a0612e9b84546dffffffffffffffffffffffffffff1690565b908183116132e8575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055612ef2565b9650505050505050517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152601760608201527f41413231206469646e2774207061792070726566756e6400000000000000000060808201520190565b5050509350505050517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152601660608201527f4141323320726576657274656420286f72204f4f47290000000000000000000060808201520190565b6133e2612bb9565b90816133ee5750613247565b96509750505050509150610d83935050519182917efa072b00000000000000000000000000000000000000000000000000000000835260048301612c46565b965061324d9050565b6134469192506112643d826104be565b903861322b565b60209550613481612e9b6130988c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b8b8111156134985750856060835b975050506131d8565b606087918d0361348f565b9a50506134ae610da4565b6020815114156134d65761160a816020806134ce9451830101910161207b565b998a906131b5565b9a505050505050509050610d839150519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b61351c612bb9565b8061352757506131b0565b9d50509a50505050939450505050610d83925050519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b6131b5565b61357d906117f43d826104be565b38613197565b5050505097505050505050505080fd5b9091929360009460009384955a9581516135c1815173ffffffffffffffffffffffffffffffffffffffff1690565b936040956135dc6135d488840184610ecd565b90878c613dbc565b60a083015173ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff906001828416146138f7575b858281951615978861389f575b6020606081979801519101519261366b8c51988997889687947f0825d1fc00000000000000000000000000000000000000000000000000000000865260048601612d12565b03938a1690f1829181613888575b5061387f575060019061368a612b9b565b6308c379a01461382b575b506137b8575b6136aa575b505050505a900392565b6136d49073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926136f0612e9b85546dffffffffffffffffffffffffffff1690565b9182841161373d57505082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080806136a0565b9550955050505050610d839250519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152601760608201527f41413231206469646e2774207061792070726566756e6400000000000000000060808201520190565b5050517efa072b0000000000000000000000000000000000000000000000000000000081526004810192909252506000602482015260606044820152601660648201527f4141323320726576657274656420286f72204f4f472900000000000000000000608482015260a4945092505050fd5b613833612bb9565b908161383f5750613695565b9699509950505050925050610d83925050519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c65565b975061369b9050565b6138989192506112643d826104be565b9038613679565b602095506138d3612e9b6130988c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b8c808211156138ec575050856060835b97505050613626565b8791606091036138e3565b61390043600052565b303b15613a645788517fa47a3fbc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152851660248201528681604481305afa9081613a50575b5061397e57600161396e612b9b565b6308c379a0146139f8575b613983575b613619565b91509b5061398f610da4565b6020815114156139b75761160a816020806139af9451830101910161207b565b9b8c91613619565b9c505099505050505092505050610d839150519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b613a00612bb9565b80613a0b5750613979565b9c50505050509a505093505050919450610d83935050519384937efa072b00000000000000000000000000000000000000000000000000000000855260048501612cb7565b613a5e906117f43d826104be565b3861395f565b50505050509850505050505050505080fd5b909180613a8257505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b613d4457606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613ae1878760048401612090565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f1918215613d37575b600092613d20575b50808216958615613ca5571680951415613c2c573b15613bb457611f52611f4c7fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613b7b93611d16565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b50505050506040517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152602060608201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260808201520190565b5050505050506040517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152602060608201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260808201520190565b50505050505050506040517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152601b60608201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060808201520190565b613d309192506121743d826104be565b9038613b30565b613d3f61109a565b613b28565b50505050506040517efa072b00000000000000000000000000000000000000000000000000000000815280610d836004820160a090600081526000602082015260606040820152601f60608201527f414131302073656e64657220616c726561647920636f6e73747275637465640060808201520190565b92909181613dcb575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b61409b57606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e2a888860048401612090565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f191821561408e575b600092614077575b50808216968715613ffa571680961415613f7f573b15613f055750611f52611f4c7fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613ec593611d16565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080613dc5565b9350505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152602060608201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260808201520190565b509350505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152602060608201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260808201520190565b5050509350505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152601b60608201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060808201520190565b6140879192506121743d826104be565b9038613e79565b61409661109a565b613e71565b9350505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830160a09181526000602082015260606040820152601f60608201527f414131302073656e64657220616c726561647920636f6e73747275637465640060808201520190565b1561411c57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261064a57825167ffffffffffffffff81116106525783019080601f83011215610652578151916141b28361054e565b916141c060405193846104be565b838352602084830101116105ce576020926141e091848085019101610f6c565b92015190565b6141fe604092959493956060835260608301906113a0565b9460208201520152565b939193606094600094600092845161424660a08a8301519261422b868511614115565b015173ffffffffffffffffffffffffffffffffffffffff1690565b956142718773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61428c612e9b82546dffffffffffffffffffffffffffff1690565b86811061447a579260208795936142f08a9896946dffffffffffffffffffffffffffff6143299b8b9703166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015192604051978896879586937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016141e6565b039373ffffffffffffffffffffffffffffffffffffffff8a169103f1908183918493614454575b5061444c575050600190614362612b9b565b6308c379a0146143fc575b506143755750565b6040517efa072b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff91909116602482015260606044820152601660648201527f4141333320726576657274656420286f72204f4f472900000000000000000000608482015260a49350915050fd5b614404612bb9565b9081614410575061436d565b9350945050915050610d836040519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b955093505050565b90925061447391503d84823e61446a3d826104be565b3d81019061417b565b9138614350565b50506040517efa072b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9790971660248801525050606060448601525050601e606484015250507f41413331207061796d6173746572206465706f73697420746f6f206c6f770000608482015260a49350915050fd5b90949294606095600095600092855161452d60a08b8301519261422b868511614115565b966145588873ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b614573612e9b82546dffffffffffffffffffffffffffff1690565b868110614723579260208795936142f08a9896946dffffffffffffffffffffffffffff6145d79b8b9703166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b039373ffffffffffffffffffffffffffffffffffffffff8b169103f1908183918493614706575b506146fd575050600190614610612b9b565b6308c379a0146146ac575b50614624575050565b6040517efa072b000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff91909116602482015260606044820152601660648201527f4141333320726576657274656420286f72204f4f472900000000000000000000608482015260a49350915050fd5b6146b4612bb9565b90816146c0575061461b565b506040517efa072b0000000000000000000000000000000000000000000000000000000081529650869550610d8394509291905060048501612cb7565b96509450505050565b90925061471c91503d84823e61446a3d826104be565b91386145fe565b50505050505050509250925050610d836040519283927efa072b000000000000000000000000000000000000000000000000000000008452600484019060a09273ffffffffffffffffffffffffffffffffffffffff91835216602082015260606040820152601e60608201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060808201520190565b600311156147c357565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b92919061481160409160028652606060208701526060860190610fa1565b930152565b93929190600381101561483d57604091614811918652606060208701526060860190610fa1565b50505050507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b909291925a91600091815161488581615193565b9260a08201956148a9875173ffffffffffffffffffffffffffffffffffffffff1690565b9873ffffffffffffffffffffffffffffffffffffffff94858b1680614a3b575050835173ffffffffffffffffffffffffffffffffffffffff16915b5a9003019485029860408301908a8251106149a657507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f9493926149316149a1938c6020945103906152d2565b015194896020614973614958865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b98505050505050505050610d8391506040519182917efa072b0000000000000000000000000000000000000000000000000000000083526004830173ffffffffffffffffffffffffffffffffffffffff60a0926000835216602082015260606040820152601f60608201527f4135312070726566756e642062656c6f772061637475616c476173436f73740060808201520190565b8b93918051614a4c575b50506148e4565b606087015160009a509091803b15614bcb57918a918a83614a9f956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c0290600484016147f3565b0393f19081614bb7575b50614bb2576001614ab8612b9b565b6308c379a014614b5d575b614acf575b3880614a45565b50506040517efa072b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9990991660248a015250506060604488015250506011606486015250507f41353020706f73744f702072657665727400000000000000000000000000000060848401525060a4919050fd5b614b65612bb9565b80614b705750614ac3565b9b9a505050505050505050905050610d836040519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b614ac8565b614bc5906117f43d826104be565b38614aa9565b505050505050505050509250505080fd5b919392935a90600092805190614bf182615193565b9360a0830196614c15885173ffffffffffffffffffffffffffffffffffffffff1690565b9973ffffffffffffffffffffffffffffffffffffffff95868c1680614d33575050845173ffffffffffffffffffffffffffffffffffffffff16925b5a9003019586029960408401918b835110614c9e5750507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f9493926149316149a1938c6020945103906152d2565b995099505050505050505050610d836040519283927efa072b000000000000000000000000000000000000000000000000000000008452600484019060a09273ffffffffffffffffffffffffffffffffffffffff91835216602082015260606040820152601f60608201527f4135312070726566756e642062656c6f772061637475616c476173436f73740060808201520190565b8c94918051614d44575b5050614c50565b606088015160009b509091803b15614ec557918b918b83614d97956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c0290600484016147f3565b0393f19081614eb1575b50614eac576001614db0612b9b565b6308c379a014614e56575b614dc7575b3880614d3d565b50506040517efa072b000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff9990991660248a015250506060604488015250506011606486015250507f41353020706f73744f702072657665727400000000000000000000000000000060848401525060a4919050fd5b614e5e612bb9565b80614e695750614dbb565b999850505050975050505050610d839250506040519384937efa072b00000000000000000000000000000000000000000000000000000000855260048501612cb7565b614dc0565b614ebf906117f43d826104be565b38614da1565b50505050505050505050509250505080fd5b909392935a928151614ee881615193565b9260a0820195614f0c875173ffffffffffffffffffffffffffffffffffffffff1690565b9873ffffffffffffffffffffffffffffffffffffffff94858b169081614ff1575050835173ffffffffffffffffffffffffffffffffffffffff16915b5a9003019485029860408301908a8251106149a657507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614f956149a1938c6020945103906152d2565b614f9e886147b9565b015194896020614fc5614958865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b8b93918151615002575b5050614f48565b88840261500e8b6147b9565b60028b146150ae576060880151823b1561509a5761506193600080948e604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614816565b0393f1801561508d575b615079575b505b3880614ffb565b615087906117f43d826104be565b38615070565b61509561109a565b61506b565b505050505050505050505050505050600080fd5b6060880151823b1561509a576150f993600080948e604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614816565b0393f1908161517f575b5061517a576001615112612b9b565b6308c379a014615126575b614acf57615072565b61512e612bb9565b80615139575061511d565b9b9a5050505050505050505050610d836040519283927efa072b00000000000000000000000000000000000000000000000000000000845260048401612c83565b615072565b61518d906117f43d826104be565b38615103565b60e060c08201519101518082146151b7574801808210156151b2575090565b905090565b5090565b608073ffffffffffffffffffffffffffffffffffffffff60409283516151e081610478565b600093818580935282602082015282878201528260608201520152168152806020522061080567ffffffffffffffff60016040519361521e85610478565b80546dffffffffffffffffffffffffffff8082168752607082901c60ff161515602088015260789190911c166040860152015463ffffffff8116606085015260201c16608083019067ffffffffffffffff169052565b9073ffffffffffffffffffffffffffffffffffffffff615292611cde565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61054c336153b9565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206153116dffffffffffffffffffffffffffff92838354166110ee565b918083116153575761054c92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b5050505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff906153d934826152d2565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561542c57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561549257565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b156154f857565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b1561555e57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9067ffffffffffffffff6080600161054c9461561f6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff6bffffffffffffffff0000000083549260201b169116179055565b7fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0161588e6157733373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b6157ac63ffffffff8516615788811515615425565b6157a561579c600185015463ffffffff1690565b63ffffffff1690565b111561548b565b54926158706dffffffffffffffffffffffffffff9461582e6157d334888460781c166110ee565b966157df8815156154f1565b6157ea818910615557565b61580e816157f661053f565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff831660608201526000608082015261586b3373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b6155bd565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2565b1561589a57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b9067ffffffffffffffff80809316911680920381116110fa570190565b3360005260006020526040600020600181019063ffffffff825416908115615a065761599f6159626159c79361595260ff855460701c16615893565b67ffffffffffffffff42166158f9565b84547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff16602082901b6bffffffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405167ffffffffffffffff909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90806020810161588e565b5050505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b15615a6f57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615ad557565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b3b57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b615bc43373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b906dffffffffffffffffffffffffffff825460781c168015615ced57600080928192615c7a86615c52600161054c9901615c2a67ffffffffffffffff615c16835467ffffffffffffffff9060201c1690565b16615c22811515615a68565b421015615ace565b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a273ffffffffffffffffffffffffffffffffffffffff60405192165af1615ce7610da4565b50615b34565b5050505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615d5657565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b6000903382528160205260408220906dffffffffffffffffffffffffffff908183541694858111615eaf57615e2f8594859483898161054c9b10615ea2575b03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526020810183905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a273ffffffffffffffffffffffffffffffffffffffff60405192165af1615e9c610da4565b50615d4f565b615eaa6110a7565b615df4565b5050505050505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b9060009283809360208451940192f190565b3d610800808211615f4d575b50604051906020818301016040528082526000602083013e90565b905038615f3256fea3646970667358221220092a00863902f492e919a5c1ae12dbb354555f9bb39fcf7de08e0f589fbad2306c6578706572696d656e74616cf564736f6c634300080c00416080806040523461001657610234908161001d8239f35b50600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a36146100295750600080fd5b346100d15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d15760043567ffffffffffffffff918282116100cb57366023830112156100cb5781600401359283116100cb5736602484840101116100cb57506100c79160246100a09201610104565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b91505080fd5b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101e85767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101db575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101ce575b604052808452602084019036848401116101c3576020946000600c819682946014880187378301015251923560601c5af19060005191156101bd57565b60009150565b505050505050600080fd5b6101d66100d4565b610180565b6101e36100d4565b610142565b505050600080fdfea364697066735822122061241817916bbec436d6ba9aa7ad3ce63250343e3ce9407caa5f6991d612dfe96c6578706572696d656e74616cf564736f6c634300080c0041"; - -type EntryPointConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: EntryPointConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class EntryPoint__factory extends ContractFactory { - constructor(...args: EntryPointConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): EntryPoint { - return super.attach(address) as EntryPoint; - } - connect(signer: Signer): EntryPoint__factory { - return super.connect(signer) as EntryPoint__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): EntryPointInterface { - return new utils.Interface(_abi) as EntryPointInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EntryPoint { - return new Contract(address, _abi, signerOrProvider) as EntryPoint; - } -} diff --git a/src/contracts/factories/EtherspotAccountFactory__factory.ts b/src/contracts/factories/EtherspotAccountFactory__factory.ts deleted file mode 100644 index ab23f3d0..00000000 --- a/src/contracts/factories/EtherspotAccountFactory__factory.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - EtherspotAccountFactory, - EtherspotAccountFactoryInterface, -} from "../EtherspotAccountFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "_entryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "accountImplementation", - outputs: [ - { - internalType: "contract EtherspotAccount", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - ], - name: "createAccount", - outputs: [ - { - internalType: "contract EtherspotAccount", - name: "ret", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - ], - name: "getAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60a08060405234610081576020816132fe38819003908190601f8201601f191684016001600160401b03811185821017610087575b60405283398101031261008157516001600160a01b0381168114156100815761005c906100ab565b6040516111f8908161010c823960805181818160d10152818161037c01526104e40152f35b50600080fd5b61008f610094565b610034565b50634e487b7160e01b600052604160045260246000fd5b604051906020908290611ffa80830191906001600160401b038311848410176100fe575b61130484396001600160a01b031681520301906000f080156100f057608052565b50506040513d6000823e3d90fd5b610106610094565b6100cf56fe608080604052600436101562000016575b50600080fd5b600090813560e01c90816311464fbe14620000ba575080635fbfb9cf146200009857638cb84e1814620000495762000010565b34620000955750620000916200006a62000063366200013f565b9062000406565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b5034620000955750620000916200006a620000b3366200013f565b90620002c9565b919050346200010d5750620000cf3662000112565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602090f35b809150fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60009101126200001057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112620000105760043573ffffffffffffffffffffffffffffffffffffffff811681141562000193579060243590565b5050600080fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176200020c57604052565b620002166200019a565b604052565b918091926000905b8282106200023d57501162000236575050565b6000910152565b9150806020918301518186015201829162000223565b90601f60609373ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09316845260406020850152620002b581518092816040880152602088880191016200021b565b0116010190565b506040513d6000823e3d90fd5b90620002d6818362000406565b803b620003d157506040517fc4d66de800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602480840191909152825262000338604483620001ca565b60405180620003a36105eb948583019583871067ffffffffffffffff881117620003c1575b620005df843973ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169062000253565b03906000f58015620003b3571690565b620003bd620002bc565b1690565b620003cb6200019a565b6200035d565b73ffffffffffffffffffffffffffffffffffffffff1692915050565b9062000402602092828151948592016200021b565b0190565b906200054f916200053862000545620004936200050e6200051b6105eb9560405196620004376020820189620001ca565b80885262000bca60208901396040517fc4d66de800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90911660248201529283906044820190565b0392620004c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094858101835282620001ca565b60405192839173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020840162000253565b03838101835282620001ca565b60405193849162000531602084018098620003ed565b90620003ed565b03908101835282620001ca565b5190209062000552565b90565b73ffffffffffffffffffffffffffffffffffffffff916040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b602184015260358301526055820152605581526080810181811067ffffffffffffffff821117620005ce575b6040525190201690565b620005d86200019a565b620005c456fe60806040526105eb80380380610014816100f8565b92833981016040828203126100c15781519173ffffffffffffffffffffffffffffffffffffffff83168314156100b95760208101519067ffffffffffffffff82116100b057019181601f840112156100b95782519261007a61007585610149565b6100f8565b92848452602085830101116100b0576100a29361009d9160208086019101610192565b6101c7565b60405160f590816104f68239f35b50505050600080fd5b505050600080fd5b5050600080fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761013c57604052565b6101446100c8565b604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610185575b01160190565b61018d6100c8565b61017f565b918091926000905b8282106101b25750116101ab575050565b6000910152565b9150806020918301518186015201829161019a565b803b156102855773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6000604051a281511580159061027d575b610268575050565b61027a9161027461030c565b9161038a565b50565b506000610260565b50505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b604051906060820182811067ffffffffffffffff82111761037d575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6103856100c8565b610328565b9190823b156103d3576000816103c89460208394519201905af43d156103cb573d906103b861007583610149565b9182523d6000602084013e61045b565b90565b60609061045b565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610467575090565b8151919250901561047b5750805190602001fd5b601f91506044907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06040519384927f08c379a0000000000000000000000000000000000000000000000000000000008452602060048501526104ec8151809281602488015260208888019101610192565b01168101030190fdfe60806040523615605f5773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f35b3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f3fea36469706673582212208513d18e41735785918b638730596cf6f3882188294f9839b79b87ef46bb7bf86c6578706572696d656e74616cf564736f6c634300080c004160806040526105eb80380380610014816100f8565b92833981016040828203126100c15781519173ffffffffffffffffffffffffffffffffffffffff83168314156100b95760208101519067ffffffffffffffff82116100b057019181601f840112156100b95782519261007a61007585610149565b6100f8565b92848452602085830101116100b0576100a29361009d9160208086019101610192565b6101c7565b60405160f590816104f68239f35b50505050600080fd5b505050600080fd5b5050600080fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761013c57604052565b6101446100c8565b604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610185575b01160190565b61018d6100c8565b61017f565b918091926000905b8282106101b25750116101ab575050565b6000910152565b9150806020918301518186015201829161019a565b803b156102855773ffffffffffffffffffffffffffffffffffffffff81167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6000604051a281511580159061027d575b610268575050565b61027a9161027461030c565b9161038a565b50565b506000610260565b50505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b604051906060820182811067ffffffffffffffff82111761037d575b604052602782527f206661696c6564000000000000000000000000000000000000000000000000006040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6103856100c8565b610328565b9190823b156103d3576000816103c89460208394519201905af43d156103cb573d906103b861007583610149565b9182523d6000602084013e61045b565b90565b60609061045b565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b90919015610467575090565b8151919250901561047b5750805190602001fd5b601f91506044907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06040519384927f08c379a0000000000000000000000000000000000000000000000000000000008452602060048501526104ec8151809281602488015260208888019101610192565b01168101030190fdfe60806040523615605f5773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f35b3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f3fea36469706673582212208513d18e41735785918b638730596cf6f3882188294f9839b79b87ef46bb7bf86c6578706572696d656e74616cf564736f6c634300080c0041a36469706673582212206ee0ab1405630300e6e54cd4ed0e03a856127bf9141b2a85be51a31c400815fa6c6578706572696d656e74616cf564736f6c634300080c004160c080604052346100df57611ffa803803907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019183831067ffffffffffffffff8411176100e5578084926020946040528339810103126100df575173ffffffffffffffffffffffffffffffffffffffff81168114156100df573060805260a052604051611ee1908161011982396080518181816106b7015281816108b80152610dfd015260a051818181610119015281816113300152818161150201528181611627015281816116aa015281816116fc01526118400152f35b50600080fd5b505050507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfe604060808152600436101561001d575b50361561001b57600080fd5b005b600090813560e01c80630825d1fc1461027657806318dfb3c71461025b5780633659cfe6146102445780633f579f42146102295780634a58db19146102175780634d44560d146101ff5780634f1ef286146101ec57806352d1902d146101d05780638da5cb5b14610193578063affed0e01461015a578063b0d691fe14610105578063c399ec88146100d65763c4d66de8146100b9575061000f565b346100d2576100cf6100ca366103dc565b6112da565b51f35b5080fd5b50346100d25761010191506100ea36610499565b6100f26115de565b90519081529081906020820190565b0390f35b509034610155575061011636610499565b517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602090f35b809150fd5b50346100d2576100f26bffffffffffffffffffffffff6101019361017d36610499565b5460101c166bffffffffffffffffffffffff1690565b50346100d25761010191506101a736610499565b600154905173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b50346100d25761010191506101e436610499565b6100f26106a0565b506100cf6101f936610638565b90610de4565b50346100d2576100cf610211366104c5565b906116dc565b5061022136610499565b6100cf61168b565b50346100d2576100cf61023b36610415565b9291909161108b565b50346100d2576100cf610256366103dc565b61089f565b50346100d2576100cf61026d36610369565b929190916111c6565b50346100d25761010191506100f261028d366102ba565b929050611826565b73ffffffffffffffffffffffffffffffffffffffff811614156102b457565b50600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc90608082820112610330576004359167ffffffffffffffff831161032757826101609203011261032057600401906024359060443561031981610295565b9060643590565b5050600080fd5b50505050600080fd5b505050600080fd5b9181601f840112156103305782359167ffffffffffffffff8311610327576020808501948460051b01011161033057565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103205767ffffffffffffffff9160043583811161032757826103b491600401610338565b939093926024359182116103d2576103ce91600401610338565b9091565b5050505050600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126102b45760043561041281610295565b90565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103205760043561044c81610295565b916024359160443567ffffffffffffffff9283821161048e578060238301121561048e57816004013593841161048e57602484830101116103d2576024019190565b505050505050600080fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60009101126102b457565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126102b4576004356104fb81610295565b9060243590565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761054e57604052565b610556610502565b604052565b6060810190811067ffffffffffffffff82111761054e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761054e57604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff81116105f4575b01160190565b6105fc610502565b6105ee565b92919261060d826105b8565b9161061b6040519384610577565b8294818452818301116103d2578281602093846000960137010152565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103205760043561066f81610295565b916024359067ffffffffffffffff821161032757806023830112156103275781602461041293600401359101610601565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301415610702577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b1561078e57565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152fd5b1561081a57565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016916108e583301415610787565b6109147f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc938285541614610813565b61091c611795565b6040519061092982610532565b6000825260003660208401377f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561096d57505061096b9150610b21565b565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa60009181610a59575b50610a465750505050506040517f08c379a000000000000000000000000000000000000000000000000000000000815280610a426004820160809060208152602e60208201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060608201520190565b0390fd5b61096b93610a549114610a95565b610c0f565b610a72919250610a693d82610577565b3d810190610a79565b90386109ac565b90816020910312610320575190565b506040513d6000823e3d90fd5b15610a9c57565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152fd5b803b15610b895773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b90610c1982610b21565b6040519073ffffffffffffffffffffffffffffffffffffffff83167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600084a2805115801590610d77575b610c6d57505050565b610c768261055b565b602782527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208301527f206661696c6564000000000000000000000000000000000000000000000000006040830152823b15610cef57600081610cec9460208394519201905af4610ce6610f96565b90610fc6565b50565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152fd5b506000610c64565b90610d8982610b21565b6040519073ffffffffffffffffffffffffffffffffffffffff83167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600084a2805115801590610ddc57610c6d57505050565b506001610c64565b73ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001692610e2a84301415610787565b610e597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc948286541614610813565b610e61611795565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e9757505061096b9150610b21565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa60009181610f7f575b50610f6c5750505050506040517f08c379a000000000000000000000000000000000000000000000000000000000815280610a426004820160809060208152602e60208201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060608201520190565b61096b93610f7a9114610a95565b610d7f565b610f8f919250610a693d82610577565b9038610ed6565b3d15610fc1573d90610fa7826105b8565b91610fb56040519384610577565b82523d6000602084013e565b606090565b90919015610fd2575090565b81519192509015610fe65750805190602001fd5b9050604051907f08c379a00000000000000000000000000000000000000000000000000000000082528160208060048301528251928360248401526000915b848310611072575050601f836044947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09311611065575b01168101030190fd5b600085828601015261105c565b8183018101518684016044015285935091820191611025565b6110a360009493859461109c6114ea565b3691610601565b91602083519301915af16110b5610f96565b90156110be5750565b80519150602001fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611138575b60051b0190565b6111406110f7565b611131565b3561041281610295565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610330570180359067ffffffffffffffff82116103305760200191813603831361033057565b90916103ce928110156111b9575b60051b81019061114f565b6111c16110f7565b6111ae565b92906111d06114ea565b818114156112515760005b8181106111e9575050505050565b806112166112026111fd600194868a611127565b611145565b61121061109c84888a6111a0565b906115c7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611244575b016111db565b61124c6110c7565b61123e565b505050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f457468657273706f744163636f756e743a3a206578656375746542617463682060448201527f2d2077726f6e67206172726179206c656e6774687300000000000000000000006064820152fd5b6112e261148c565b806113cf575b73ffffffffffffffffffffffffffffffffffffffff809216807fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155604051927f0000000000000000000000000000000000000000000000000000000000000000167fc053dd35e22ddb3ae5f46f48289137bbba99fdd1068c0f7d3069bb62dab393fd600085a361137c5750565b60207f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6000541660005560018152a1565b6101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff60005416176000556112e8565b1561140757565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b60005460ff8160081c166000146114ae57506114a9303b15611400565b600090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00816114e0600160ff81951610611400565b1617600055600190565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001633149081156115b9575b501561153457565b5060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f457468657273706f744163636f756e743a3a204e6f74204f776e6572206f722060448201527f456e747279506f696e74000000000000000000000000000000000000000000006064820152fd5b90506001541633143861152c565b600091829182602083519301915af16110b5610f96565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561167e575b60009161165c575090565b906116673d83610577565b6020823d8101031261167857505190565b91505080fd5b611686610a88565b611651565b600080806040513473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af16116d4610f96565b50156102b457565b6116e4611795565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016803b156103d2576000928360449260405196879586947f205c287800000000000000000000000000000000000000000000000000000000865216600485015260248401525af18015611788575b6117705750565b60009061177d3d82610577565b3d810103126102b457565b611790610a88565b611769565b73ffffffffffffffffffffffffffffffffffffffff600154163314801561181d575b156117be57565b5060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f457468657273706f744163636f756e743a3a204f6e6c79206f776e65720000006044820152fd5b503033146117b7565b92919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633141561196c5761187190846119f4565b9261187f604082018261114f565b905015611891575b5061096b90611e60565b6020600054916bffffffffffffffffffffffff92838160101c1693841461195f575b7fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff166001840160101b6dffffffffffffffffffffffff00001617600055013514156118fe5738611887565b50505060646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f457468657273706f744163636f756e743a3a20496e76616c6964206e6f6e63656044820152fd5b6119676110c7565b6118b3565b5050505060846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f457468657273706f744163636f756e743a204e6f742066726f6d20456e74727960448201527f506f696e740000000000000000000000000000000000000000000000000000006064820152fd5b9060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152611a328161055b565b519020611a76611a6e73ffffffffffffffffffffffffffffffffffffffff92611a6861109c85600154169661014081019061114f565b90611cea565b919091611ac1565b161415611a8257600090565b600190565b60051115611a9157565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b611aca81611a87565b80611ad25750565b611adb81611a87565b6001811415611b455750506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b611b4e81611a87565b6002811415611bb85750506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b611bc181611a87565b6003811415611c515750506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608490fd5b80611c5d600492611a87565b14611c6457565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608490fd5b81516041811415611d145750906103ce916020820151906060604084015193015160001a90611d9d565b60401415611d935781604060206103ce9401519101519160ff601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85831c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48711611d86575b1694011690611d9d565b611d8e6110c7565b611d7c565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311611e545760ff16601b81141580611e49575b611e3d579160809493916020936040519384528484015260408301526060820152600093849182805260015afa15611e30575b815173ffffffffffffffffffffffffffffffffffffffff811615611e2a579190565b50600190565b611e38610a88565b611e08565b50505050600090600490565b50601c811415611dd5565b50505050600090600390565b80611e685750565b600080809260405190337ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff150610cec610f9656fea3646970667358221220ce291d547de02a09a4b717b1a525a91d86fda853bba963bf452b281e9a897e6f6c6578706572696d656e74616cf564736f6c634300080c0041"; - -type EtherspotAccountFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: EtherspotAccountFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class EtherspotAccountFactory__factory extends ContractFactory { - constructor(...args: EtherspotAccountFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _entryPoint, - overrides || {} - ) as Promise; - } - getDeployTransaction( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_entryPoint, overrides || {}); - } - attach(address: string): EtherspotAccountFactory { - return super.attach(address) as EtherspotAccountFactory; - } - connect(signer: Signer): EtherspotAccountFactory__factory { - return super.connect(signer) as EtherspotAccountFactory__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): EtherspotAccountFactoryInterface { - return new utils.Interface(_abi) as EtherspotAccountFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EtherspotAccountFactory { - return new Contract( - address, - _abi, - signerOrProvider - ) as EtherspotAccountFactory; - } -} diff --git a/src/contracts/factories/EtherspotAccount__factory.ts b/src/contracts/factories/EtherspotAccount__factory.ts deleted file mode 100644 index 3fd8f896..00000000 --- a/src/contracts/factories/EtherspotAccount__factory.ts +++ /dev/null @@ -1,424 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { - EtherspotAccount, - EtherspotAccountInterface, -} from "../EtherspotAccount"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "beacon", - type: "address", - }, - ], - name: "BeaconUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "EtherspotInitialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "executeTransaction", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "anOwner", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620030e7380380620030e783398181016040528101906200006a919062000123565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000155565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b6000620000eb82620000ca565b9050919050565b620000fd81620000de565b81146200010957600080fd5b50565b6000815190506200011d81620000f2565b92915050565b6000602082840312156200013c576200013b620000a5565b5b60006200014c848285016200010c565b91505092915050565b60805160a051612f496200019e6000396000818161096c01526112a5015260008181610439015281816104c80152818161071f015281816107ae015261085e0152612f496000f3fe6080604052600436106100c65760003560e01c80634f1ef2861161007f578063affed0e011610059578063affed0e01461022f578063b0d691fe1461025a578063c399ec8814610285578063c4d66de8146102b0576100cd565b80634f1ef286146101bd57806352d1902d146101d95780638da5cb5b14610204576100cd565b80630825d1fc146100d257806318dfb3c71461010f5780633659cfe6146101385780633f579f42146101615780634a58db191461018a5780634d44560d14610194576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100f960048036038101906100f49190611af3565b6102d9565b6040516101069190611b85565b60405180910390f35b34801561011b57600080fd5b5061013660048036038101906101319190611c5b565b610325565b005b34801561014457600080fd5b5061015f600480360381019061015a9190611cdc565b610437565b005b34801561016d57600080fd5b5061018860048036038101906101839190611d5f565b6105c0565b005b61019261061d565b005b3480156101a057600080fd5b506101bb60048036038101906101b69190611e11565b61069d565b005b6101d760048036038101906101d29190611f92565b61071d565b005b3480156101e557600080fd5b506101ee61085a565b6040516101fb9190611ffd565b60405180910390f35b34801561021057600080fd5b50610219610913565b6040516102269190612027565b60405180910390f35b34801561023b57600080fd5b50610244610939565b6040516102519190611b85565b60405180910390f35b34801561026657600080fd5b5061026f610968565b60405161027c91906120a1565b60405180910390f35b34801561029157600080fd5b5061029a610990565b6040516102a79190611b85565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190611cdc565b610a18565b005b60006102e3610aae565b6102ee858585610b25565b9050600085806040019061030291906120cb565b905014156103145761031385610c04565b5b61031d82610cb2565b949350505050565b61032d610d4e565b818190508484905014610375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036c906121b1565b60405180910390fd5b60005b848490508110156104305761041d858583818110610399576103986121d1565b5b90506020020160208101906103ae9190611cdc565b60008585858181106103c3576103c26121d1565b5b90506020028101906103d591906120cb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610e1d565b80806104289061222f565b915050610378565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156104c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bd906122ea565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610505610ea1565b73ffffffffffffffffffffffffffffffffffffffff161461055b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105529061237c565b60405180910390fd5b61056481610ef8565b6105bd81600067ffffffffffffffff81111561058357610582611e67565b5b6040519080825280601f01601f1916602001820160405280156105b55781602001600182028036833780820191505090505b506000610f03565b50565b6105c8610d4e565b610617848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610e1d565b50505050565b6000610627610968565b73ffffffffffffffffffffffffffffffffffffffff163460405161064a906123cd565b60006040518083038185875af1925050503d8060008114610687576040519150601f19603f3d011682016040523d82523d6000602084013e61068c565b606091505b505090508061069a57600080fd5b50565b6106a5611071565b6106ad610968565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016106e79291906123f1565b600060405180830381600087803b15801561070157600080fd5b505af1158015610715573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a3906122ea565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107eb610ea1565b73ffffffffffffffffffffffffffffffffffffffff1614610841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108389061237c565b60405180910390fd5b61084a82610ef8565b61085682826001610f03565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e19061248c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600061099a610968565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109d29190612027565b602060405180830381865afa1580156109ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1391906124c1565b905090565b6000610a246001611139565b90508015610a48576001600060016101000a81548160ff0219169083151502179055505b610a5182611229565b8015610aaa5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610aa19190612536565b60405180910390a15b5050565b610ab6610968565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a906125c3565b60405180910390fd5b565b600080610b3184611309565b9050610b9985806101400190610b4791906120cb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508261133990919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf7576001915050610bfd565b60009150505b9392505050565b80602001356000600281819054906101000a90046bffffffffffffffffffffffff1680929190610c33906125fb565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca69061267c565b60405180910390fd5b50565b60008114610d4b5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051610d02906123cd565b600060405180830381858888f193505050503d8060008114610d40576040519150601f19603f3d011682016040523d82523d6000602084013e610d45565b606091505b50509050505b50565b610d56610968565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ddc5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e129061270e565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051610e46919061279d565b60006040518083038185875af1925050503d8060008114610e83576040519150601f19603f3d011682016040523d82523d6000602084013e610e88565b606091505b509150915081610e9a57805160208201fd5b5050505050565b6000610ecf7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611360565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f00611071565b50565b610f2f7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b61136a565b60000160009054906101000a900460ff1615610f5357610f4e83611374565b61106c565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610fbb57506040513d601f19601f82011682018060405250810190610fb891906127c9565b60015b610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612868565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906128fa565b60405180910390fd5b5061106b83838361142d565b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110f857503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90612966565b60405180910390fd5b565b60008060019054906101000a900460ff16156111b05760018260ff16148015611168575061116630611459565b155b6111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906129f8565b60405180910390fd5b60009050611224565b8160ff1660008054906101000a900460ff1660ff1610611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc906129f8565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167fc053dd35e22ddb3ae5f46f48289137bbba99fdd1068c0f7d3069bb62dab393fd60405160405180910390a350565b60008160405160200161131c9190612a90565b604051602081830303815290604052805190602001209050919050565b6000806000611348858561147c565b91509150611355816114ff565b819250505092915050565b6000819050919050565b6000819050919050565b61137d81611459565b6113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390612b28565b60405180910390fd5b806113e97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611360565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611436836116d4565b6000825111806114435750805b15611454576114528383611723565b505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000806041835114156114be5760008060006020860151925060408601519150606086015160001a90506114b287828585611750565b945094505050506114f8565b6040835114156114ef5760008060208501519150604085015190506114e486838361185d565b9350935050506114f8565b60006002915091505b9250929050565b6000600481111561151357611512612b48565b5b81600481111561152657611525612b48565b5b1415611531576116d1565b6001600481111561154557611544612b48565b5b81600481111561155857611557612b48565b5b1415611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090612bc3565b60405180910390fd5b600260048111156115ad576115ac612b48565b5b8160048111156115c0576115bf612b48565b5b1415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890612c2f565b60405180910390fd5b6003600481111561161557611614612b48565b5b81600481111561162857611627612b48565b5b1415611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090612cc1565b60405180910390fd5b60048081111561167c5761167b612b48565b5b81600481111561168f5761168e612b48565b5b14156116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790612d53565b60405180910390fd5b5b50565b6116dd81611374565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606117488383604051806060016040528060278152602001612f16602791396118bc565b905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561178b576000600391509150611854565b601b8560ff16141580156117a35750601c8560ff1614155b156117b5576000600491509150611854565b6000600187878787604051600081526020016040526040516117da9493929190612d82565b6020604051602081039080840390855afa1580156117fc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561184b57600060019250925050611854565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6118a09190612dc7565b90506118ae87828885611750565b935093505050935093915050565b60606118c784611459565b611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90612e8f565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161192e919061279d565b600060405180830381855af49150503d8060008114611969576040519150601f19603f3d011682016040523d82523d6000602084013e61196e565b606091505b509150915061197e828286611989565b925050509392505050565b60608315611999578290506119e9565b6000835111156119ac5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e09190612ef3565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b60006101608284031215611a2057611a1f611a04565b5b81905092915050565b6000819050919050565b611a3c81611a29565b8114611a4757600080fd5b50565b600081359050611a5981611a33565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a8a82611a5f565b9050919050565b611a9a81611a7f565b8114611aa557600080fd5b50565b600081359050611ab781611a91565b92915050565b6000819050919050565b611ad081611abd565b8114611adb57600080fd5b50565b600081359050611aed81611ac7565b92915050565b60008060008060808587031215611b0d57611b0c6119fa565b5b600085013567ffffffffffffffff811115611b2b57611b2a6119ff565b5b611b3787828801611a09565b9450506020611b4887828801611a4a565b9350506040611b5987828801611aa8565b9250506060611b6a87828801611ade565b91505092959194509250565b611b7f81611abd565b82525050565b6000602082019050611b9a6000830184611b76565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611bc557611bc4611ba0565b5b8235905067ffffffffffffffff811115611be257611be1611ba5565b5b602083019150836020820283011115611bfe57611bfd611baa565b5b9250929050565b60008083601f840112611c1b57611c1a611ba0565b5b8235905067ffffffffffffffff811115611c3857611c37611ba5565b5b602083019150836020820283011115611c5457611c53611baa565b5b9250929050565b60008060008060408587031215611c7557611c746119fa565b5b600085013567ffffffffffffffff811115611c9357611c926119ff565b5b611c9f87828801611baf565b9450945050602085013567ffffffffffffffff811115611cc257611cc16119ff565b5b611cce87828801611c05565b925092505092959194509250565b600060208284031215611cf257611cf16119fa565b5b6000611d0084828501611aa8565b91505092915050565b60008083601f840112611d1f57611d1e611ba0565b5b8235905067ffffffffffffffff811115611d3c57611d3b611ba5565b5b602083019150836001820283011115611d5857611d57611baa565b5b9250929050565b60008060008060608587031215611d7957611d786119fa565b5b6000611d8787828801611aa8565b9450506020611d9887828801611ade565b935050604085013567ffffffffffffffff811115611db957611db86119ff565b5b611dc587828801611d09565b925092505092959194509250565b6000611dde82611a5f565b9050919050565b611dee81611dd3565b8114611df957600080fd5b50565b600081359050611e0b81611de5565b92915050565b60008060408385031215611e2857611e276119fa565b5b6000611e3685828601611dfc565b9250506020611e4785828601611ade565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9f82611e56565b810181811067ffffffffffffffff82111715611ebe57611ebd611e67565b5b80604052505050565b6000611ed16119f0565b9050611edd8282611e96565b919050565b600067ffffffffffffffff821115611efd57611efc611e67565b5b611f0682611e56565b9050602081019050919050565b82818337600083830152505050565b6000611f35611f3084611ee2565b611ec7565b905082815260208101848484011115611f5157611f50611e51565b5b611f5c848285611f13565b509392505050565b600082601f830112611f7957611f78611ba0565b5b8135611f89848260208601611f22565b91505092915050565b60008060408385031215611fa957611fa86119fa565b5b6000611fb785828601611aa8565b925050602083013567ffffffffffffffff811115611fd857611fd76119ff565b5b611fe485828601611f64565b9150509250929050565b611ff781611a29565b82525050565b60006020820190506120126000830184611fee565b92915050565b61202181611a7f565b82525050565b600060208201905061203c6000830184612018565b92915050565b6000819050919050565b600061206761206261205d84611a5f565b612042565b611a5f565b9050919050565b60006120798261204c565b9050919050565b600061208b8261206e565b9050919050565b61209b81612080565b82525050565b60006020820190506120b66000830184612092565b92915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126120e8576120e76120bc565b5b80840192508235915067ffffffffffffffff82111561210a576121096120c1565b5b602083019250600182023603831315612126576121256120c6565b5b509250929050565b600082825260208201905092915050565b7f457468657273706f744163636f756e743a3a206578656375746542617463682060008201527f2d2077726f6e67206172726179206c656e677468730000000000000000000000602082015250565b600061219b60358361212e565b91506121a68261213f565b604082019050919050565b600060208201905081810360008301526121ca8161218e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061223a82611abd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561226d5761226c612200565b5b600182019050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006122d4602c8361212e565b91506122df82612278565b604082019050919050565b60006020820190508181036000830152612303816122c7565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612366602c8361212e565b91506123718261230a565b604082019050919050565b6000602082019050818103600083015261239581612359565b9050919050565b600081905092915050565b50565b60006123b760008361239c565b91506123c2826123a7565b600082019050919050565b60006123d8826123aa565b9150819050919050565b6123eb81611dd3565b82525050565b600060408201905061240660008301856123e2565b6124136020830184611b76565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061247660388361212e565b91506124818261241a565b604082019050919050565b600060208201905081810360008301526124a581612469565b9050919050565b6000815190506124bb81611ac7565b92915050565b6000602082840312156124d7576124d66119fa565b5b60006124e5848285016124ac565b91505092915050565b6000819050919050565b600060ff82169050919050565b600061252061251b612516846124ee565b612042565b6124f8565b9050919050565b61253081612505565b82525050565b600060208201905061254b6000830184612527565b92915050565b7f457468657273706f744163636f756e743a204e6f742066726f6d20456e74727960008201527f506f696e74000000000000000000000000000000000000000000000000000000602082015250565b60006125ad60258361212e565b91506125b882612551565b604082019050919050565b600060208201905081810360008301526125dc816125a0565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000612606826125e3565b91506bffffffffffffffffffffffff82141561262557612624612200565b5b600182019050919050565b7f457468657273706f744163636f756e743a3a20496e76616c6964206e6f6e6365600082015250565b600061266660208361212e565b915061267182612630565b602082019050919050565b6000602082019050818103600083015261269581612659565b9050919050565b7f457468657273706f744163636f756e743a3a204e6f74204f776e6572206f722060008201527f456e747279506f696e7400000000000000000000000000000000000000000000602082015250565b60006126f8602a8361212e565b91506127038261269c565b604082019050919050565b60006020820190508181036000830152612727816126eb565b9050919050565b600081519050919050565b60005b8381101561275757808201518184015260208101905061273c565b83811115612766576000848401525b50505050565b60006127778261272e565b612781818561239c565b9350612791818560208601612739565b80840191505092915050565b60006127a9828461276c565b915081905092915050565b6000815190506127c381611a33565b92915050565b6000602082840312156127df576127de6119fa565b5b60006127ed848285016127b4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612852602e8361212e565b915061285d826127f6565b604082019050919050565b6000602082019050818103600083015261288181612845565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006128e460298361212e565b91506128ef82612888565b604082019050919050565b60006020820190508181036000830152612913816128d7565b9050919050565b7f457468657273706f744163636f756e743a3a204f6e6c79206f776e6572000000600082015250565b6000612950601d8361212e565b915061295b8261291a565b602082019050919050565b6000602082019050818103600083015261297f81612943565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006129e2602e8361212e565b91506129ed82612986565b604082019050919050565b60006020820190508181036000830152612a11816129d5565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612a59601c83612a18565b9150612a6482612a23565b601c82019050919050565b6000819050919050565b612a8a612a8582611a29565b612a6f565b82525050565b6000612a9b82612a4c565b9150612aa78284612a79565b60208201915081905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000612b12602d8361212e565b9150612b1d82612ab6565b604082019050919050565b60006020820190508181036000830152612b4181612b05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612bad60188361212e565b9150612bb882612b77565b602082019050919050565b60006020820190508181036000830152612bdc81612ba0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612c19601f8361212e565b9150612c2482612be3565b602082019050919050565b60006020820190508181036000830152612c4881612c0c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cab60228361212e565b9150612cb682612c4f565b604082019050919050565b60006020820190508181036000830152612cda81612c9e565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d3d60228361212e565b9150612d4882612ce1565b604082019050919050565b60006020820190508181036000830152612d6c81612d30565b9050919050565b612d7c816124f8565b82525050565b6000608082019050612d976000830187611fee565b612da46020830186612d73565b612db16040830185611fee565b612dbe6060830184611fee565b95945050505050565b6000612dd282611abd565b9150612ddd83611abd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e1257612e11612200565b5b828201905092915050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000612e7960268361212e565b9150612e8482612e1d565b604082019050919050565b60006020820190508181036000830152612ea881612e6c565b9050919050565b600081519050919050565b6000612ec582612eaf565b612ecf818561212e565b9350612edf818560208601612739565b612ee881611e56565b840191505092915050565b60006020820190508181036000830152612f0d8184612eba565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080c000a"; - -type EtherspotAccountConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: EtherspotAccountConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class EtherspotAccount__factory extends ContractFactory { - constructor(...args: EtherspotAccountConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - anEntryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - anEntryPoint, - overrides || {} - ) as Promise; - } - getDeployTransaction( - anEntryPoint: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(anEntryPoint, overrides || {}); - } - attach(address: string): EtherspotAccount { - return super.attach(address) as EtherspotAccount; - } - connect(signer: Signer): EtherspotAccount__factory { - return super.connect(signer) as EtherspotAccount__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): EtherspotAccountInterface { - return new utils.Interface(_abi) as EtherspotAccountInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EtherspotAccount { - return new Contract(address, _abi, signerOrProvider) as EtherspotAccount; - } -} diff --git a/src/contracts/factories/SenderCreator__factory.ts b/src/contracts/factories/SenderCreator__factory.ts deleted file mode 100644 index a8c86324..00000000 --- a/src/contracts/factories/SenderCreator__factory.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { SenderCreator, SenderCreatorInterface } from "../SenderCreator"; - -const _abi = [ - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - ], - name: "createSender", - outputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100f9565b61006c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008061007c601482858761016b565b61008591610195565b60601c90506000610099846014818861016b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100f057600093505b50505092915050565b6000806020838503121561010c57600080fd5b823567ffffffffffffffff8082111561012457600080fd5b818501915085601f83011261013857600080fd5b81358181111561014757600080fd5b86602082850101111561015957600080fd5b60209290920196919550909350505050565b6000808585111561017b57600080fd5b8386111561018857600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156101d55780818660140360031b1b83161692505b50509291505056fea164736f6c634300080f000a"; - -type SenderCreatorConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SenderCreatorConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SenderCreator__factory extends ContractFactory { - constructor(...args: SenderCreatorConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): SenderCreator { - return super.attach(address) as SenderCreator; - } - connect(signer: Signer): SenderCreator__factory { - return super.connect(signer) as SenderCreator__factory; - } - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SenderCreatorInterface { - return new utils.Interface(_abi) as SenderCreatorInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SenderCreator { - return new Contract(address, _abi, signerOrProvider) as SenderCreator; - } -} diff --git a/src/contracts/factories/index.ts b/src/contracts/factories/index.ts new file mode 100644 index 00000000..ae8984f3 --- /dev/null +++ b/src/contracts/factories/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as openzeppelin from "./@openzeppelin"; +export * as src from "./src"; diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts new file mode 100644 index 00000000..b2230d82 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts @@ -0,0 +1,160 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + BLSAccountFactory, + BLSAccountFactoryInterface, +} from "../../../../src/aa-4337/bls/BLSAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract BLSAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract BLSAccount", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b5060405162005c3138038062005c31833981810160405281019062000037919062000122565b806040516200004690620000aa565b62000052919062000165565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000182565b61422e8062001a0383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b620000fc81620000dd565b81146200010857600080fd5b50565b6000815190506200011c81620000f1565b92915050565b6000602082840312156200013b576200013a620000b8565b5b60006200014b848285016200010b565b91505092915050565b6200015f81620000dd565b82525050565b60006020820190506200017c600083018462000154565b92915050565b608051611858620001ab6000396000818160db0152818161012f01526102e301526118586000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b60405162000064919062000484565b60405180910390f35b6200008b6004803603810190620000859190620006d8565b620000fd565b6040516200009a91906200075b565b60405180910390f35b620000c16004803603810190620000bb91906200079d565b62000205565b604051620000d0919062000484565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b604051806020016200011990620003eb565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000888887604051602401620001659392919062000903565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620009d3565b604051602081830303815290604052604051602001620001df92919062000a49565b60405160208183030381529060405280519060200120620003a9565b9050949350505050565b600080829050608060003690506200021e919062000aa0565b811462000262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002599062000b3c565b60405180910390fd5b6000620002a9878787876004806020026040519081016040528092919082600460200280828437600081840152601f19601f820116905080830192505050505050620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002dd57819350505050620003a1565b8560001b7f0000000000000000000000000000000000000000000000000000000000000000898988604051602401620003199392919062000b7f565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200036c90620003eb565b62000379929190620009d3565b8190604051809103906000f59050801580156200039a573d6000803e3d6000fd5b5093505050505b949350505050565b6000620003b8838330620003c0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c668062000bbd83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004446200043e6200043884620003f9565b62000419565b620003f9565b9050919050565b6000620004588262000423565b9050919050565b60006200046c826200044b565b9050919050565b6200047e816200045f565b82525050565b60006020820190506200049b600083018462000473565b92915050565b6000604051905090565b600080fd5b6000620004bd82620003f9565b9050919050565b6000620004d182620004b0565b9050919050565b620004e381620004c4565b8114620004ef57600080fd5b50565b6000813590506200050381620004d8565b92915050565b6200051481620004b0565b81146200052057600080fd5b50565b600081359050620005348162000509565b92915050565b6000819050919050565b6200054f816200053a565b81146200055b57600080fd5b50565b6000813590506200056f8162000544565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c5826200057a565b810181811067ffffffffffffffff82111715620005e757620005e66200058b565b5b80604052505050565b6000620005fc620004a1565b90506200060a8282620005ba565b919050565b600067ffffffffffffffff8211156200062d576200062c6200058b565b5b602082029050919050565b600080fd5b6000620006546200064e846200060f565b620005f0565b9050806020840283018581111562000671576200067062000638565b5b835b818110156200069e57806200068988826200055e565b84526020840193505060208101905062000673565b5050509392505050565b600082601f830112620006c057620006bf62000575565b5b6004620006cf8482856200063d565b91505092915050565b60008060008060e08587031215620006f557620006f4620004ab565b5b60006200070587828801620004f2565b9450506020620007188782880162000523565b93505060406200072b878288016200055e565b92505060606200073e87828801620006a8565b91505092959194509250565b6200075581620004b0565b82525050565b60006020820190506200077260008301846200074a565b92915050565b60008190508260206004028201111562000797576200079662000638565b5b92915050565b60008060008060e08587031215620007ba57620007b9620004ab565b5b6000620007ca87828801620004f2565b9450506020620007dd8782880162000523565b9350506040620007f0878288016200055e565b9250506060620008038782880162000778565b91505092959194509250565b60006200081c8262000423565b9050919050565b600062000830826200080f565b9050919050565b620008428162000823565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b62000873816200053a565b82525050565b600062000887838362000868565b60208301905092915050565b6000602082019050919050565b620008ab8162000848565b620008b7818462000853565b9250620008c4826200085e565b8060005b83811015620008fb578151620008df878262000879565b9650620008ec8362000893565b925050600181019050620008c8565b505050505050565b600060c0820190506200091a600083018662000837565b6200092960208301856200074a565b620009386040830184620008a0565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200097c5780820151818401526020810190506200095f565b838111156200098c576000848401525b50505050565b60006200099f8262000940565b620009ab81856200094b565b9350620009bd8185602086016200095c565b620009c8816200057a565b840191505092915050565b6000604082019050620009ea60008301856200074a565b8181036020830152620009fe818462000992565b90509392505050565b600081905092915050565b600062000a1f8262000940565b62000a2b818562000a07565b935062000a3d8185602086016200095c565b80840191505092915050565b600062000a57828562000a12565b915062000a65828462000a12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aad826200053a565b915062000aba836200053a565b92508282101562000ad05762000acf62000a71565b5b828203905092915050565b600082825260208201905092915050565b7f77726f6e67207075626b6579206f666673657400000000000000000000000000600082015250565b600062000b2460138362000adb565b915062000b318262000aec565b602082019050919050565b6000602082019050818103600083015262000b578162000b15565b9050919050565b82818337600083830152505050565b62000b7b6080838362000b5e565b5050565b600060c08201905062000b96600083018662000837565b62000ba560208301856200074a565b62000bb4604083018462000b6d565b94935050505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122037cf3c56ad5cdd126919cfa2b5c296e2127e5787a897397dced6ad1c067b8b0264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033"; + +type BLSAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BLSAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BLSAccountFactory__factory extends ContractFactory { + constructor(...args: BLSAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + aggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + aggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + aggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(aggregator, overrides || {}); + } + override attach(address: string): BLSAccountFactory { + return super.attach(address) as BLSAccountFactory; + } + override connect(signer: Signer): BLSAccountFactory__factory { + return super.connect(signer) as BLSAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BLSAccountFactoryInterface { + return new utils.Interface(_abi) as BLSAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BLSAccountFactory { + return new Contract(address, _abi, signerOrProvider) as BLSAccountFactory; + } +} diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts new file mode 100644 index 00000000..ab0195ba --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts @@ -0,0 +1,813 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + BLSAccount, + BLSAccountInterface, +} from "../../../../src/aa-4337/bls/BLSAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256[4]", + name: "oldPublicKey", + type: "uint256[4]", + }, + { + indexed: false, + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", + }, + ], + name: "PublicKeyChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "aggregator", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getBlsPublicKey", + outputs: [ + { + internalType: "uint256[4]", + name: "", + type: "uint256[4]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", + }, + ], + name: "setBlsPublicKey", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033"; + +type BLSAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BLSAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BLSAccount__factory extends ContractFactory { + constructor(...args: BLSAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(anAggregator, overrides || {}) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): BLSAccount { + return super.attach(address) as BLSAccount; + } + override connect(signer: Signer): BLSAccount__factory { + return super.connect(signer) as BLSAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BLSAccountInterface { + return new utils.Interface(_abi) as BLSAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BLSAccount { + return new Contract(address, _abi, signerOrProvider) as BLSAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts new file mode 100644 index 00000000..3586b8e7 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts @@ -0,0 +1,618 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + BLSSignatureAggregator, + BLSSignatureAggregatorInterface, +} from "../../../../src/aa-4337/bls/BLSSignatureAggregator"; + +const _abi = [ + { + inputs: [], + name: "BLS_DOMAIN", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "N", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + internalType: "uint32", + name: "delay", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + ], + name: "aggregateSignatures", + outputs: [ + { + internalType: "bytes", + name: "aggregatedSignature", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "getTrailingPublicKey", + outputs: [ + { + internalType: "uint256[4]", + name: "publicKey", + type: "uint256[4]", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpPublicKey", + outputs: [ + { + internalType: "uint256[4]", + name: "publicKey", + type: "uint256[4]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "userOpToMessage", + outputs: [ + { + internalType: "uint256[2]", + name: "", + type: "uint256[2]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "validateSignatures", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "validateUserOpSignature", + outputs: [ + { + internalType: "bytes", + name: "sigForUserOp", + type: "bytes", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50612bfd806100206000396000f3fe6080604052600436106100905760003560e01c806364c530cd1161005957806364c530cd14610193578063a6193531146101d0578063b7620eb41461020d578063c9e525df1461024a578063e3563a4f1461027557610090565b80629d925014610095578063275e2d79146100c057806340864431146100fd578063451711591461013a57806357f09b7214610156575b600080fd5b3480156100a157600080fd5b506100aa61029e565b6040516100b79190611525565b60405180910390f35b3480156100cc57600080fd5b506100e760048036038101906100e291906115b9565b6102c2565b6040516100f4919061169f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190611a0b565b61041f565b6040516101319190611aff565b60405180910390f35b610154600480360381019061014f9190611b94565b61044e565b005b34801561016257600080fd5b5061017d60048036038101906101789190611a0b565b6104be565b60405161018a9190611c58565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b59190611c98565b61056f565b6040516101c7919061169f565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190611a0b565b61069d565b6040516102049190611525565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190611ce1565b6106c5565b6040516102419190611c58565b60405180910390f35b34801561025657600080fd5b5061025f610745565b60405161026c9190611d39565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611daa565b610769565b005b7fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b81565b606060008383905067ffffffffffffffff8111156102e3576102e26116c6565b5b60405190808252806020026020018201604052801561031c57816020015b6103096114ae565b8152602001906001900390816103015790505b50905060005b81518110156103bc5760008086868481811061034157610340611e2b565b5b90506020028101906103539190611e69565b8061014001906103639190611e92565b8101906103709190611ef5565b9150915060405180604001604052808381526020018281525084848151811061039c5761039b611e2b565b5b6020026020010181905250505080806103b490611f64565b915050610322565b5060006103e9827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a02565b905080600001518160200151604051602001610406929190611fad565b6040516020818303038152906040529250505092915050565b6104276114c8565b600061043a610435846104be565b610b05565b90506104468382610b35565b915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016104889190611fe5565b6000604051808303818588803b1580156104a157600080fd5b505af11580156104b5573d6000803e3d6000fd5b50505050505050565b6104c66114ea565b6000826040015190506000815111156104e9576104e2816106c5565b9150610568565b826000015173ffffffffffffffffffffffffffffffffffffffff1663e02afbae61c3506040518263ffffffff1660e01b81526004016080604051808303818786fa15801561053b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061056091906120c6565b91505061056a565b505b919050565b60606000828061014001906105849190611e92565b81019061059191906121a4565b905060006105a7846105a2906121d1565b6104be565b905060006105c6856105b8906121d1565b6105c184610b05565b610b35565b905073__$b78e61b50eae8ff14018a753b33166207a$__63ebbdac918484846040518463ffffffff1660e01b8152600401610603939291906122cf565b602060405180830381865af4158015610620573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610644919061233f565b610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067a906123c9565b60405180910390fd5b604051806020016040528060008152509350505050919050565b6000806106b16106ac846104be565b610b05565b90506106bd8382610c0c565b915050919050565b6106cd6114ea565b60008251905060808111610716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070d90612435565b60405180910390fd5b606081840103805183526020810151602084015260408101516040840152606081015160608401525050919050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781565b604082829050146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a6906124a1565b60405180910390fd5b600082828101906107c091906121a4565b9050600085859050905060008167ffffffffffffffff8111156107e6576107e56116c6565b5b60405190808252806020026020018201604052801561081f57816020015b61080c6114ea565b8152602001906001900390816108045790505b50905060008267ffffffffffffffff81111561083e5761083d6116c6565b5b60405190808252806020026020018201604052801561087757816020015b6108646114c8565b81526020019060019003908161085c5790505b50905060005b8381101561093c57600089898381811061089a57610899611e2b565b5b90506020028101906108ac9190611e69565b6108b5906121d1565b90506108c0816104be565b8483815181106108d3576108d2611e2b565b5b602002602001018190525061090a816109058685815181106108f8576108f7611e2b565b5b6020026020010151610b05565b610b35565b83838151811061091d5761091c611e2b565b5b602002602001018190525050808061093490611f64565b91505061087d565b5073__$b78e61b50eae8ff14018a753b33166207a$__63914137638584846040518463ffffffff1660e01b8152600401610978939291906126e3565b602060405180830381865af4158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b9919061233f565b6109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612774565b60405180910390fd5b5050505050505050565b610a0a6114ae565b600083600081518110610a2057610a1f611e2b565b5b6020026020010151600001519050600084600081518110610a4457610a43611e2b565b5b60200260200101516020015190506000600190506000600190505b8651811015610ad357610ab48484848a8581518110610a8157610a80611e2b565b5b6020026020010151600001518b8681518110610aa057610a9f611e2b565b5b60200260200101516020015160018c610c4b565b8094508195508296505050508080610acb90611f64565b915050610a5f565b50610ae0838383886112ca565b8093508194505050828460000181815250508184602001818152505050505092915050565b600081604051602001610b189190611c58565b604051602081830303815290604052805190602001209050919050565b610b3d6114c8565b6000610b498484610c0c565b905073__$b78e61b50eae8ff14018a753b33166207a$__63a850a9097fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b83604051602001610b9791906127b5565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610bc3929190612829565b6040805180830381865af4158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0391906128e4565b91505092915050565b6000610c1783611341565b823046604051602001610c2d9493929190612920565b60405160208183030381529060405280519060200120905092915050565b6000806000808a148015610c5f5750600089145b15610c72578686869250925092506112bd565b600087148015610c825750600086145b15610c95578989899250925092506112bd565b610c9d6114ea565b8480610cac57610cab612965565b5b898a0981600060048110610cc357610cc2611e2b565b5b6020020181815250508480610cdb57610cda612965565b5b81600060048110610cef57610cee611e2b565b5b60200201518a0981600160048110610d0a57610d09611e2b565b5b6020020181815250508480610d2257610d21612965565b5b86870981600260048110610d3957610d38611e2b565b5b6020020181815250508480610d5157610d50612965565b5b81600260048110610d6557610d64611e2b565b5b6020020151870981600360048110610d8057610d7f611e2b565b5b60200201818152505060405180608001604052808680610da357610da2612965565b5b83600260048110610db757610db6611e2b565b5b60200201518e0981526020018680610dd257610dd1612965565b5b83600360048110610de657610de5611e2b565b5b60200201518d0981526020018680610e0157610e00612965565b5b83600060048110610e1557610e14611e2b565b5b60200201518b0981526020018680610e3057610e2f612965565b5b83600160048110610e4457610e43611e2b565b5b60200201518a09815250905080600260048110610e6457610e63611e2b565b5b602002015181600060048110610e7d57610e7c611e2b565b5b6020020151141580610ebf575080600360048110610e9e57610e9d611e2b565b5b602002015181600160048110610eb757610eb6611e2b565b5b602002015114155b610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906129e0565b60405180910390fd5b610f066114ea565b8580610f1557610f14612965565b5b82600060048110610f2957610f28611e2b565b5b602002015187610f399190612a00565b83600260048110610f4d57610f4c611e2b565b5b60200201510881600060048110610f6757610f66611e2b565b5b6020020181815250508580610f7f57610f7e612965565b5b82600160048110610f9357610f92611e2b565b5b602002015187610fa39190612a00565b83600360048110610fb757610fb6611e2b565b5b60200201510881600160048110610fd157610fd0611e2b565b5b6020020181815250508580610fe957610fe8612965565b5b81600060048110610ffd57610ffc611e2b565b5b60200201518260006004811061101657611015611e2b565b5b602002015109816002600481106110305761102f611e2b565b5b602002018181525050858061104857611047612965565b5b8160006004811061105c5761105b611e2b565b5b60200201518260026004811061107557611074611e2b565b5b6020020151098160036004811061108f5761108e611e2b565b5b602002018181525050600086806110a9576110a8612965565b5b826003600481106110bd576110bc611e2b565b5b6020020151886110cd9190612a00565b88806110dc576110db612965565b5b846001600481106110f0576110ef611e2b565b5b60200201518560016004811061110957611108611e2b565b5b602002015109089050868061112157611120612965565b5b87806111305761112f612965565b5b888061113f5761113e612965565b5b8460026004811061115357611152611e2b565b5b60200201518660006004811061116c5761116b611e2b565b5b602002015109600209886111809190612a00565b820890506000878061119557611194612965565b5b88806111a4576111a3612965565b5b838a6111b09190612a00565b8a806111bf576111be612965565b5b866002600481106111d3576111d2611e2b565b5b6020020151886000600481106111ec576111eb611e2b565b5b602002015109088460016004811061120757611206611e2b565b5b6020020151099050878061121e5761121d612965565b5b888061122d5761122c612965565b5b8460036004811061124157611240611e2b565b5b60200201518660016004811061125a57611259611e2b565b5b6020020151098961126b9190612a00565b82089050600088806112805761127f612965565b5b898061128f5761128e612965565b5b8b8f09856000600481106112a6576112a5611e2b565b5b602002015109905082828297509750975050505050505b9750975097945050505050565b60008060006112d985856113c2565b9050600084806112ec576112eb612965565b5b82830990506000858061130257611301612965565b5b828a0990506000868061131857611317612965565b5b878061132757611326612965565b5b8486098a0990508181955095505050505094509492505050565b60008160000151826020015183604001518051906020012084606001518051906020012085608001518660a001518760c001518860e001518961010001518a6101200151805190602001206040516020016113a59a99989796959493929190612a34565b604051602081830303815290604052805190602001209050919050565b60008083141580156113d45750818314155b80156113e1575060008214155b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612b1c565b60405180910390fd5b60008060019050600084905060005b600087146114a15786826114439190612b3c565b905082868061145557611454612965565b5b878061146457611463612965565b5b858409886114729190612a00565b860880945081955050508687826114899190612b6d565b836114949190612a00565b809850819350505061142f565b8394505050505092915050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b61151f8161150c565b82525050565b600060208201905061153a6000830184611516565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157957611578611554565b5b8235905067ffffffffffffffff81111561159657611595611559565b5b6020830191508360208202830111156115b2576115b161155e565b5b9250929050565b600080602083850312156115d0576115cf61154a565b5b600083013567ffffffffffffffff8111156115ee576115ed61154f565b5b6115fa85828601611563565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611640578082015181840152602081019050611625565b8381111561164f576000848401525b50505050565b6000601f19601f8301169050919050565b600061167182611606565b61167b8185611611565b935061168b818560208601611622565b61169481611655565b840191505092915050565b600060208201905081810360008301526116b98184611666565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116fe82611655565b810181811067ffffffffffffffff8211171561171d5761171c6116c6565b5b80604052505050565b6000611730611540565b905061173c82826116f5565b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061177182611746565b9050919050565b61178181611766565b811461178c57600080fd5b50565b60008135905061179e81611778565b92915050565b6000819050919050565b6117b7816117a4565b81146117c257600080fd5b50565b6000813590506117d4816117ae565b92915050565b600080fd5b600067ffffffffffffffff8211156117fa576117f96116c6565b5b61180382611655565b9050602081019050919050565b82818337600083830152505050565b600061183261182d846117df565b611726565b90508281526020810184848401111561184e5761184d6117da565b5b611859848285611810565b509392505050565b600082601f83011261187657611875611554565b5b813561188684826020860161181f565b91505092915050565b600061016082840312156118a6576118a56116c1565b5b6118b1610160611726565b905060006118c18482850161178f565b60008301525060206118d5848285016117c5565b602083015250604082013567ffffffffffffffff8111156118f9576118f8611741565b5b61190584828501611861565b604083015250606082013567ffffffffffffffff81111561192957611928611741565b5b61193584828501611861565b6060830152506080611949848285016117c5565b60808301525060a061195d848285016117c5565b60a08301525060c0611971848285016117c5565b60c08301525060e0611985848285016117c5565b60e08301525061010061199a848285016117c5565b6101008301525061012082013567ffffffffffffffff8111156119c0576119bf611741565b5b6119cc84828501611861565b6101208301525061014082013567ffffffffffffffff8111156119f2576119f1611741565b5b6119fe84828501611861565b6101408301525092915050565b600060208284031215611a2157611a2061154a565b5b600082013567ffffffffffffffff811115611a3f57611a3e61154f565b5b611a4b8482850161188f565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b611a7d816117a4565b82525050565b6000611a8f8383611a74565b60208301905092915050565b6000602082019050919050565b611ab181611a54565b611abb8184611a5f565b9250611ac682611a6a565b8060005b83811015611af7578151611ade8782611a83565b9650611ae983611a9b565b925050600181019050611aca565b505050505050565b6000604082019050611b146000830184611aa8565b92915050565b6000611b2582611766565b9050919050565b611b3581611b1a565b8114611b4057600080fd5b50565b600081359050611b5281611b2c565b92915050565b600063ffffffff82169050919050565b611b7181611b58565b8114611b7c57600080fd5b50565b600081359050611b8e81611b68565b92915050565b60008060408385031215611bab57611baa61154a565b5b6000611bb985828601611b43565b9250506020611bca85828601611b7f565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b611c0a81611bd4565b611c148184611bdf565b9250611c1f82611bea565b8060005b83811015611c50578151611c378782611a83565b9650611c4283611bf4565b925050600181019050611c23565b505050505050565b6000608082019050611c6d6000830184611c01565b92915050565b600080fd5b60006101608284031215611c8f57611c8e611c73565b5b81905092915050565b600060208284031215611cae57611cad61154a565b5b600082013567ffffffffffffffff811115611ccc57611ccb61154f565b5b611cd884828501611c78565b91505092915050565b600060208284031215611cf757611cf661154a565b5b600082013567ffffffffffffffff811115611d1557611d1461154f565b5b611d2184828501611861565b91505092915050565b611d33816117a4565b82525050565b6000602082019050611d4e6000830184611d2a565b92915050565b60008083601f840112611d6a57611d69611554565b5b8235905067ffffffffffffffff811115611d8757611d86611559565b5b602083019150836001820283011115611da357611da261155e565b5b9250929050565b60008060008060408587031215611dc457611dc361154a565b5b600085013567ffffffffffffffff811115611de257611de161154f565b5b611dee87828801611563565b9450945050602085013567ffffffffffffffff811115611e1157611e1061154f565b5b611e1d87828801611d54565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112611e8657611e85611e5a565b5b80830191505092915050565b60008083356001602003843603038112611eaf57611eae611e5a565b5b80840192508235915067ffffffffffffffff821115611ed157611ed0611e5f565b5b602083019250600182023603831315611eed57611eec611e64565b5b509250929050565b60008060408385031215611f0c57611f0b61154a565b5b6000611f1a858286016117c5565b9250506020611f2b858286016117c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f6f826117a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611fa257611fa1611f35565b5b600182019050919050565b6000604082019050611fc26000830185611d2a565b611fcf6020830184611d2a565b9392505050565b611fdf81611b58565b82525050565b6000602082019050611ffa6000830184611fd6565b92915050565b600067ffffffffffffffff82111561201b5761201a6116c6565b5b602082029050919050565b600081519050612035816117ae565b92915050565b600061204e61204984612000565b611726565b905080602084028301858111156120685761206761155e565b5b835b81811015612091578061207d8882612026565b84526020840193505060208101905061206a565b5050509392505050565b600082601f8301126120b0576120af611554565b5b60046120bd84828561203b565b91505092915050565b6000608082840312156120dc576120db61154a565b5b60006120ea8482850161209b565b91505092915050565b600067ffffffffffffffff82111561210e5761210d6116c6565b5b602082029050919050565b600061212c612127846120f3565b611726565b905080602084028301858111156121465761214561155e565b5b835b8181101561216f578061215b88826117c5565b845260208401935050602081019050612148565b5050509392505050565b600082601f83011261218e5761218d611554565b5b600261219b848285612119565b91505092915050565b6000604082840312156121ba576121b961154a565b5b60006121c884828501612179565b91505092915050565b60006121dd368361188f565b9050919050565b600081905092915050565b6121f8816117a4565b82525050565b600061220a83836121ef565b60208301905092915050565b61221f81611a54565b61222981846121e4565b925061223482611a6a565b8060005b8381101561226557815161224c87826121fe565b965061225783611a9b565b925050600181019050612238565b505050505050565b600081905092915050565b61228181611bd4565b61228b818461226d565b925061229682611bea565b8060005b838110156122c75781516122ae87826121fe565b96506122b983611bf4565b92505060018101905061229a565b505050505050565b6000610100820190506122e56000830186612216565b6122f26040830185612278565b6122ff60c0830184612216565b949350505050565b60008115159050919050565b61231c81612307565b811461232757600080fd5b50565b60008151905061233981612313565b92915050565b6000602082840312156123555761235461154a565b5b60006123638482850161232a565b91505092915050565b600082825260208201905092915050565b7f424c533a2077726f6e6720736967000000000000000000000000000000000000600082015250565b60006123b3600e8361236c565b91506123be8261237d565b602082019050919050565b600060208201905081810360008301526123e2816123a6565b9050919050565b7f6461746120746f6f2073686f727420666f722073696700000000000000000000600082015250565b600061241f60168361236c565b915061242a826123e9565b602082019050919050565b6000602082019050818103600083015261244e81612412565b9050919050565b7f424c533a20696e76616c6964207369676e617475726500000000000000000000600082015250565b600061248b60168361236c565b915061249682612455565b602082019050919050565b600060208201905081810360008301526124ba8161247e565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61250181611bd4565b61250b81846124ed565b925061251682611bea565b8060005b8381101561254757815161252e87826121fe565b965061253983611bf4565b92505060018101905061251a565b505050505050565b600061255b83836124f8565b60808301905092915050565b6000602082019050919050565b600061257f826124c1565b61258981856124cc565b9350612594836124dd565b8060005b838110156125c55781516125ac888261254f565b97506125b783612567565b925050600181019050612598565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61261281611a54565b61261c81846125fe565b925061262782611a6a565b8060005b8381101561265857815161263f87826121fe565b965061264a83611a9b565b92505060018101905061262b565b505050505050565b600061266c8383612609565b60408301905092915050565b6000602082019050919050565b6000612690826125d2565b61269a81856125dd565b93506126a5836125ee565b8060005b838110156126d65781516126bd8882612660565b97506126c883612678565b9250506001810190506126a9565b5085935050505092915050565b60006080820190506126f86000830186612216565b818103604083015261270a8185612574565b9050818103606083015261271e8184612685565b9050949350505050565b7f424c533a2076616c69646174655369676e617475726573206661696c65640000600082015250565b600061275e601e8361236c565b915061276982612728565b602082019050919050565b6000602082019050818103600083015261278d81612751565b9050919050565b6000819050919050565b6127af6127aa8261150c565b612794565b82525050565b60006127c1828461279e565b60208201915081905092915050565b6127d98161150c565b82525050565b600082825260208201905092915050565b60006127fb82611606565b61280581856127df565b9350612815818560208601611622565b61281e81611655565b840191505092915050565b600060408201905061283e60008301856127d0565b818103602083015261285081846127f0565b90509392505050565b600061286c612867846120f3565b611726565b905080602084028301858111156128865761288561155e565b5b835b818110156128af578061289b8882612026565b845260208401935050602081019050612888565b5050509392505050565b600082601f8301126128ce576128cd611554565b5b60026128db848285612859565b91505092915050565b6000604082840312156128fa576128f961154a565b5b6000612908848285016128b9565b91505092915050565b61291a81611766565b82525050565b60006080820190506129356000830187611516565b6129426020830186611516565b61294f6040830185612911565b61295c6060830184611d2a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f557365206a6163446f75626c652066756e6374696f6e20696e73746561640000600082015250565b60006129ca601e8361236c565b91506129d582612994565b602082019050919050565b600060208201905081810360008301526129f9816129bd565b9050919050565b6000612a0b826117a4565b9150612a16836117a4565b925082821015612a2957612a28611f35565b5b828203905092915050565b600061014082019050612a4a600083018d612911565b612a57602083018c611d2a565b612a64604083018b611516565b612a71606083018a611516565b612a7e6080830189611d2a565b612a8b60a0830188611d2a565b612a9860c0830187611d2a565b612aa560e0830186611d2a565b612ab3610100830185611d2a565b612ac1610120830184611516565b9b9a5050505050505050505050565b7f496e76616c6964206e756d626572000000000000000000000000000000000000600082015250565b6000612b06600e8361236c565b9150612b1182612ad0565b602082019050919050565b60006020820190508181036000830152612b3581612af9565b9050919050565b6000612b47826117a4565b9150612b52836117a4565b925082612b6257612b61612965565b5b828204905092915050565b6000612b78826117a4565b9150612b83836117a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbc57612bbb611f35565b5b82820290509291505056fea2646970667358221220d33aadb0c860f5f0dfcd7454baf5b7a554c99b5e644c80b8f54b2e728040172064736f6c634300080c0033"; + +type BLSSignatureAggregatorConstructorParams = + | [ + linkLibraryAddresses: BLSSignatureAggregatorLibraryAddresses, + signer?: Signer + ] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BLSSignatureAggregatorConstructorParams +): xs is ConstructorParameters => { + return ( + typeof xs[0] === "string" || + (Array.isArray as (arg: any) => arg is readonly any[])(xs[0]) || + "_isInterface" in xs[0] + ); +}; + +export class BLSSignatureAggregator__factory extends ContractFactory { + constructor(...args: BLSSignatureAggregatorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + const [linkLibraryAddresses, signer] = args; + super( + _abi, + BLSSignatureAggregator__factory.linkBytecode(linkLibraryAddresses), + signer + ); + } + } + + static linkBytecode( + linkLibraryAddresses: BLSSignatureAggregatorLibraryAddresses + ): string { + let linkedBytecode = _bytecode; + + linkedBytecode = linkedBytecode.replace( + new RegExp("__\\$b78e61b50eae8ff14018a753b33166207a\\$__", "g"), + linkLibraryAddresses["src/aa-4337/bls/lib/BLSOpen.sol:BLSOpen"] + .replace(/^0x/, "") + .toLowerCase() + ); + + return linkedBytecode; + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): BLSSignatureAggregator { + return super.attach(address) as BLSSignatureAggregator; + } + override connect(signer: Signer): BLSSignatureAggregator__factory { + return super.connect(signer) as BLSSignatureAggregator__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BLSSignatureAggregatorInterface { + return new utils.Interface(_abi) as BLSSignatureAggregatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BLSSignatureAggregator { + return new Contract( + address, + _abi, + signerOrProvider + ) as BLSSignatureAggregator; + } +} + +export interface BLSSignatureAggregatorLibraryAddresses { + ["src/aa-4337/bls/lib/BLSOpen.sol:BLSOpen"]: string; +} diff --git a/src/contracts/factories/IBLSAccount__factory.ts b/src/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts similarity index 83% rename from src/contracts/factories/IBLSAccount__factory.ts rename to src/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts index e07c1172..93462b19 100644 --- a/src/contracts/factories/IBLSAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts @@ -3,22 +3,31 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IBLSAccount, IBLSAccountInterface } from "../IBLSAccount"; +import type { Provider } from "@ethersproject/providers"; +import type { + IBLSAccount, + IBLSAccountInterface, +} from "../../../../src/aa-4337/bls/IBLSAccount"; const _abi = [ { - inputs: [], - name: "getAggregator", - outputs: [ + anonymous: false, + inputs: [ { - internalType: "address", - name: "", - type: "address", + indexed: false, + internalType: "uint256[4]", + name: "oldPublicKey", + type: "uint256[4]", + }, + { + indexed: false, + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", }, ], - stateMutability: "view", - type: "function", + name: "PublicKeyChanged", + type: "event", }, { inputs: [], @@ -102,11 +111,6 @@ const _abi = [ name: "userOpHash", type: "bytes32", }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, { internalType: "uint256", name: "missingAccountFunds", @@ -117,14 +121,14 @@ const _abi = [ outputs: [ { internalType: "uint256", - name: "sigTimeRange", + name: "validationData", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IBLSAccount__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/src/aa-4337/bls/index.ts b/src/contracts/factories/src/aa-4337/bls/index.ts new file mode 100644 index 00000000..262460a7 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as lib from "./lib"; +export { BLSAccount__factory } from "./BLSAccount__factory"; +export { BLSAccountFactory__factory } from "./BLSAccountFactory__factory"; +export { BLSSignatureAggregator__factory } from "./BLSSignatureAggregator__factory"; +export { IBLSAccount__factory } from "./IBLSAccount__factory"; diff --git a/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts b/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts new file mode 100644 index 00000000..91f3a307 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts @@ -0,0 +1,164 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../common"; +import type { + BLSOpen, + BLSOpenInterface, +} from "../../../../../src/aa-4337/bls/lib/BLSOpen"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes32", + name: "domain", + type: "bytes32", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + ], + name: "hashToPoint", + outputs: [ + { + internalType: "uint256[2]", + name: "", + type: "uint256[2]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[4]", + name: "blsKey", + type: "uint256[4]", + }, + ], + name: "isZeroBLSKey", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[2]", + name: "signature", + type: "uint256[2]", + }, + { + internalType: "uint256[4][]", + name: "pubkeys", + type: "uint256[4][]", + }, + { + internalType: "uint256[2][]", + name: "messages", + type: "uint256[2][]", + }, + ], + name: "verifyMultiple", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[2]", + name: "signature", + type: "uint256[2]", + }, + { + internalType: "uint256[4]", + name: "pubkey", + type: "uint256[4]", + }, + { + internalType: "uint256[2]", + name: "message", + type: "uint256[2]", + }, + ], + name: "verifySingle", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x6131c4610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063914137631461005b578063a850a9091461008b578063c2ad5b98146100bb578063ebbdac91146100eb575b600080fd5b610075600480360381019061007091906128ed565b61011b565b6040516100829190612993565b60405180910390f35b6100a560048036038101906100a09190612a99565b610144565b6040516100b29190612ba0565b60405180910390f35b6100d560048036038101906100d09190612bbb565b61015e565b6040516100e29190612993565b60405180910390f35b61010560048036038101906101009190612be8565b6101b4565b6040516101129190612993565b60405180910390f35b600080600061012b8686866102d0565b915091508080156101395750815b925050509392505050565b61014c6124bf565b610156838361083e565b905092915050565b6000806001905060005b8180156101755750600481105b156101aa57600084826004811061018f5761018e612c3c565b5b602002015114915080806101a290612c9a565b915050610168565b5080915050919050565b600080600167ffffffffffffffff8111156101d2576101d161254f565b5b60405190808252806020026020018201604052801561020b57816020015b6101f86124e1565b8152602001906001900390816101f05790505b5090506000600167ffffffffffffffff81111561022b5761022a61254f565b5b60405190808252806020026020018201604052801561026457816020015b6102516124bf565b8152602001906001900390816102495790505b509050848260008151811061027c5761027b612c3c565b5b6020026020010181905250838160008151811061029c5761029b612c3c565b5b60200260200101819052506000806102b58885856102d0565b915091508080156102c35750815b9450505050509392505050565b6000806000845190506000811161031c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031390612d66565b60405180910390fd5b8351811461035f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035690612df8565b60405180910390fd5b600060066001836103709190612e18565b61037a9190612e6e565b905060008167ffffffffffffffff8111156103985761039761254f565b5b6040519080825280602002602001820160405280156103c65781602001602082028036833780820191505090505b509050876000600281106103dd576103dc612c3c565b5b6020020151816000815181106103f6576103f5612c3c565b5b6020026020010181815250508760016002811061041657610415612c3c565b5b60200201518160018151811061042f5761042e612c3c565b5b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106104705761046f612c3c565b5b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed816003815181106104b1576104b0612c3c565b5b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec816004815181106104f2576104f1612c3c565b5b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8160058151811061053357610532612c3c565b5b60200260200101818152505060005b838110156107d85786818151811061055d5761055c612c3c565b5b602002602001015160006002811061057857610577612c3c565b5b6020020151826006808461058c9190612e6e565b6105969190612e18565b815181106105a7576105a6612c3c565b5b6020026020010181815250508681815181106105c6576105c5612c3c565b5b60200260200101516001600281106105e1576105e0612c3c565b5b60200201518260076006846105f69190612e6e565b6106009190612e18565b8151811061061157610610612c3c565b5b6020026020010181815250508781815181106106305761062f612c3c565b5b602002602001015160016004811061064b5761064a612c3c565b5b60200201518260086006846106609190612e6e565b61066a9190612e18565b8151811061067b5761067a612c3c565b5b60200260200101818152505087818151811061069a57610699612c3c565b5b60200260200101516000600481106106b5576106b4612c3c565b5b60200201518260096006846106ca9190612e6e565b6106d49190612e18565b815181106106e5576106e4612c3c565b5b60200260200101818152505087818151811061070457610703612c3c565b5b602002602001015160036004811061071f5761071e612c3c565b5b602002015182600a6006846107349190612e6e565b61073e9190612e18565b8151811061074f5761074e612c3c565b5b60200260200101818152505087818151811061076e5761076d612c3c565b5b602002602001015160026004811061078957610788612c3c565b5b602002015182600b60068461079e9190612e6e565b6107a89190612e18565b815181106107b9576107b8612c3c565b5b60200260200101818152505080806107d090612c9a565b915050610542565b506107e1612503565b60005a90506020826020860260208601600885fa95508561080d57600080965096505050505050610836565b60008260006001811061082357610822612c3c565b5b6020020151141560019650965050505050505b935093915050565b6108466124bf565b600061085284846109ef565b905060006108778260006002811061086d5761086c612c3c565b5b6020020151610b80565b9050600061089c8360016002811061089257610891612c3c565b5b6020020151610b80565b90506108a66124e1565b826000600281106108ba576108b9612c3c565b5b6020020151816000600481106108d3576108d2612c3c565b5b602002018181525050826001600281106108f0576108ef612c3c565b5b60200201518160016004811061090957610908612c3c565b5b6020020181815250508160006002811061092657610925612c3c565b5b60200201518160026004811061093f5761093e612c3c565b5b6020020181815250508160016002811061095c5761095b612c3c565b5b60200201518160036004811061097557610974612c3c565b5b602002018181525050600060408460808460066107d05a03fa9050806000811461099e576109a0565bfe5b50806109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890612f14565b60405180910390fd5b839550505050505092915050565b6109f76124bf565b6000610a0384846112ca565b90506000806000806018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477801000000000000000000000000000000000000000000000000870908925060488601905077ffffffffffffffffffffffffffffffffffffffffffffffff815116935060608601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709089150506040518060400160405280838152602001828152509550505050505092915050565b610b886124bf565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612fa6565b60405180910390fd5b60008290506000610bfa826115c2565b91505060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c2e57610c2d612fc6565b5b83840990507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c6257610c61612fc6565b5b60048208905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c9957610c98612fc6565b5b77b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd8509905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610ce757610ce6612fc6565b5b8383099050610cf58161160b565b90507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d2657610d25612fc6565b5b82830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d5a57610d59612fc6565b5b81830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d8e57610d8d612fc6565b5b82860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610dc257610dc1612fc6565b5b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610dee9190612ff5565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe0894507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610e3957610e38612fc6565b5b85860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610e6d57610e6c612fc6565b5b85830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610ea157610ea0612fc6565b5b6003830891506000610eb2836115c2565b80925081945050508015610f165784610ef457827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610ef19190612ff5565b92505b60405180604001604052808781526020018481525096505050505050506112c5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610f4557610f44612fc6565b5b600187087f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610f749190612ff5565b95507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610fa557610fa4612fc6565b5b86870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610fd957610fd8612fc6565b5b86840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061100d5761100c612fc6565b5b60038408925061101c836115c2565b80925081945050508015611080578461105e57827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761105b9190612ff5565b92505b60405180604001604052808781526020018481525096505050505050506112c5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806110af576110ae612fc6565b5b84850995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806110e3576110e2612fc6565b5b86870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061111757611116612fc6565b5b82870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061114b5761114a612fc6565b5b82870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061117f5761117e612fc6565b5b6001870895507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806111b4576111b3612fc6565b5b86870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806111e8576111e7612fc6565b5b86840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061121c5761121b612fc6565b5b60038408925061122b836115c2565b809250819450505080611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061309b565b60405180910390fd5b846112a757827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476112a49190612ff5565b92505b60405180604001604052808781526020018481525096505050505050505b919050565b60606000825190506000600460408360206112e59190612e18565b6112ef9190612e18565b6112f99190612e18565b67ffffffffffffffff8111156113125761131161254f565b5b6040519080825280601f01601f1916602001820160405280156113445781602001600182028036833780820191505090505b5090506000606067ffffffffffffffff8111156113645761136361254f565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b5090506060820160005b848110156113be5760208101870151818301526020810190506113a0565b508381019050600081536001810190506060815360018101905060008153600181019050868152602081019050602081535060006002836040516114029190613135565b602060405180830381855afa15801561141f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114429190613161565b9050600060429450848452816020850152600160408501538760418501526020604160200185015360028460405161147a9190613135565b602060405180830381855afa158015611497573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114ba9190613161565b90508060208401528082188060208601526002604086015388604186015260206041602001860153506002846040516114f39190613135565b602060405180830381855afa158015611510573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115339190613161565b905080604084015280821880602086015260036040860153886041860152602060416020018601535060028460405161156c9190613135565b602060405180830381855afa158015611589573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115ac9190613161565b9050806060840152829550505050505092915050565b6000806115ce8361161d565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611600576115ff612fc6565b5b838409149050915091565b600061161682611d65565b9050919050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a0998505050505050505050919050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a0998505050505050505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060200160405280600190602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125878261253e565b810181811067ffffffffffffffff821117156125a6576125a561254f565b5b80604052505050565b60006125b9612525565b90506125c5828261257e565b919050565b600067ffffffffffffffff8211156125e5576125e461254f565b5b602082029050919050565b600080fd5b6000819050919050565b612608816125f5565b811461261357600080fd5b50565b600081359050612625816125ff565b92915050565b600061263e612639846125ca565b6125af565b90508060208402830185811115612658576126576125f0565b5b835b81811015612681578061266d8882612616565b84526020840193505060208101905061265a565b5050509392505050565b600082601f8301126126a05761269f612539565b5b60026126ad84828561262b565b91505092915050565b600067ffffffffffffffff8211156126d1576126d061254f565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126fd576126fc61254f565b5b602082029050919050565b600061271b612716846126e2565b6125af565b90508060208402830185811115612735576127346125f0565b5b835b8181101561275e578061274a8882612616565b845260208401935050602081019050612737565b5050509392505050565b600082601f83011261277d5761277c612539565b5b600461278a848285612708565b91505092915050565b60006127a66127a1846126b6565b6125af565b905080838252602082019050608084028301858111156127c9576127c86125f0565b5b835b818110156127f257806127de8882612768565b8452602084019350506080810190506127cb565b5050509392505050565b600082601f83011261281157612810612539565b5b8135612821848260208601612793565b91505092915050565b600067ffffffffffffffff8211156128455761284461254f565b5b602082029050602081019050919050565b60006128696128648461282a565b6125af565b9050808382526020820190506040840283018581111561288c5761288b6125f0565b5b835b818110156128b557806128a1888261268b565b84526020840193505060408101905061288e565b5050509392505050565b600082601f8301126128d4576128d3612539565b5b81356128e4848260208601612856565b91505092915050565b6000806000608084860312156129065761290561252f565b5b60006129148682870161268b565b935050604084013567ffffffffffffffff81111561293557612934612534565b5b612941868287016127fc565b925050606084013567ffffffffffffffff81111561296257612961612534565b5b61296e868287016128bf565b9150509250925092565b60008115159050919050565b61298d81612978565b82525050565b60006020820190506129a86000830184612984565b92915050565b6000819050919050565b6129c1816129ae565b81146129cc57600080fd5b50565b6000813590506129de816129b8565b92915050565b600080fd5b600067ffffffffffffffff821115612a0457612a0361254f565b5b612a0d8261253e565b9050602081019050919050565b82818337600083830152505050565b6000612a3c612a37846129e9565b6125af565b905082815260208101848484011115612a5857612a576129e4565b5b612a63848285612a1a565b509392505050565b600082601f830112612a8057612a7f612539565b5b8135612a90848260208601612a29565b91505092915050565b60008060408385031215612ab057612aaf61252f565b5b6000612abe858286016129cf565b925050602083013567ffffffffffffffff811115612adf57612ade612534565b5b612aeb85828601612a6b565b9150509250929050565b600060029050919050565b600081905092915050565b6000819050919050565b612b1e816125f5565b82525050565b6000612b308383612b15565b60208301905092915050565b6000602082019050919050565b612b5281612af5565b612b5c8184612b00565b9250612b6782612b0b565b8060005b83811015612b98578151612b7f8782612b24565b9650612b8a83612b3c565b925050600181019050612b6b565b505050505050565b6000604082019050612bb56000830184612b49565b92915050565b600060808284031215612bd157612bd061252f565b5b6000612bdf84828501612768565b91505092915050565b60008060006101008486031215612c0257612c0161252f565b5b6000612c108682870161268b565b9350506040612c2186828701612768565b92505060c0612c328682870161268b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ca5826125f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cd857612cd7612c6b565b5b600182019050919050565b600082825260208201905092915050565b7f424c533a206e756d626572206f66207075626c6963206b6579206973207a657260008201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d50602183612ce3565b9150612d5b82612cf4565b604082019050919050565b60006020820190508181036000830152612d7f81612d43565b9050919050565b7f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d60008201527f65737361676573206d75737420626520657175616c0000000000000000000000602082015250565b6000612de2603583612ce3565b9150612ded82612d86565b604082019050919050565b60006020820190508181036000830152612e1181612dd5565b9050919050565b6000612e23826125f5565b9150612e2e836125f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e6357612e62612c6b565b5b828201905092915050565b6000612e79826125f5565b9150612e84836125f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ebd57612ebc612c6b565b5b828202905092915050565b7f424c533a20626e206164642063616c6c206661696c6564000000000000000000600082015250565b6000612efe601783612ce3565b9150612f0982612ec8565b602082019050919050565b60006020820190508181036000830152612f2d81612ef1565b9050919050565b7f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d60008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b6000612f90602383612ce3565b9150612f9b82612f34565b604082019050919050565b60006020820190508181036000830152612fbf81612f83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613000826125f5565b915061300b836125f5565b92508282101561301e5761301d612c6b565b5b828203905092915050565b7f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613085602283612ce3565b915061309082613029565b604082019050919050565b600060208201905081810360008301526130b481613078565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156130ef5780820151818401526020810190506130d4565b838111156130fe576000848401525b50505050565b600061310f826130bb565b61311981856130c6565b93506131298185602086016130d1565b80840191505092915050565b60006131418284613104565b915081905092915050565b60008151905061315b816129b8565b92915050565b6000602082840312156131775761317661252f565b5b60006131858482850161314c565b9150509291505056fea2646970667358221220818efd35e8f32eb9632bc57de81ebf22b3753a360cb865a0eb302974580be66a64736f6c634300080c0033"; + +type BLSOpenConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BLSOpenConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BLSOpen__factory extends ContractFactory { + constructor(...args: BLSOpenConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): BLSOpen { + return super.attach(address) as BLSOpen; + } + override connect(signer: Signer): BLSOpen__factory { + return super.connect(signer) as BLSOpen__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BLSOpenInterface { + return new utils.Interface(_abi) as BLSOpenInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BLSOpen { + return new Contract(address, _abi, signerOrProvider) as BLSOpen; + } +} diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts new file mode 100644 index 00000000..7ab99226 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as libs from "./libs"; diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts new file mode 100644 index 00000000..5af97de0 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts @@ -0,0 +1,123 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../../../../common"; +import type { + BNPairingPrecompileCostEstimator, + BNPairingPrecompileCostEstimatorInterface, +} from "../../../../../../../../src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator"; + +const _abi = [ + { + inputs: [], + name: "baseCost", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "pairCount", + type: "uint256", + }, + ], + name: "getGasCost", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "perPairCost", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "run", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610b95806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634e79f8ca146100515780639382255714610081578063c04062261461009f578063ebfd94b2146100a9575b600080fd5b61006b600480360381019061006691906105fd565b6100c7565b6040516100789190610639565b60405180910390f35b6100896100ea565b6040516100969190610639565b60405180910390f35b6100a76100f0565b005b6100b16100fa565b6040516100be9190610639565b60405180910390f35b60008054600154836100d99190610683565b6100e391906106dd565b9050919050565b60005481565b6100f8610100565b565b60015481565b600061010a610142565b9050600061011661031d565b905081816101249190610733565b600181905550600154826101389190610733565b6000819055505050565b6000806040518060c0016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101fe6105a0565b6000806107d05a61020f9190610733565b90506107d05a11610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906107ea565b60405180910390fd5b60005a905060208460c087600886fa925060005a826102749190610733565b9050836102b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ad9061087c565b60405180910390fd5b6000856000600181106102cc576102cb61089c565b5b602002015114610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610963565b60405180910390fd5b80965050505050505090565b60008060405180610180016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815260200160018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81525090506104806105a0565b6000806107d05a6104919190610733565b90506107d05a116104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ce906109f5565b60405180910390fd5b60005a905060208461018087600886fa925060005a826104f79190610733565b905083610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090610a87565b60405180910390fd5b60018560006001811061054f5761054e61089c565b5b602002015114610594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058b90610b3f565b60405180910390fd5b80965050505050505090565b6040518060200160405280600190602082028036833780820191505090505090565b600080fd5b6000819050919050565b6105da816105c7565b81146105e557600080fd5b50565b6000813590506105f7816105d1565b92915050565b600060208284031215610613576106126105c2565b5b6000610621848285016105e8565b91505092915050565b610633816105c7565b82525050565b600060208201905061064e600083018461062a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061068e826105c7565b9150610699836105c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156106d2576106d1610654565b5b828202905092915050565b60006106e8826105c7565b91506106f3836105c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561072857610727610654565b5b828201905092915050565b600061073e826105c7565b9150610749836105c7565b92508282101561075c5761075b610654565b5b828203905092915050565b600082825260208201905092915050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c2073696e676c652070616972000000602082015250565b60006107d4603d83610767565b91506107df82610778565b604082019050919050565b60006020820190508181036000830152610803816107c7565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610866603c83610767565b91506108718261080a565b604082019050919050565b6000602082019050818103600083015261089581610859565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c20726573756c74206d757374206260208201527f6520300000000000000000000000000000000000000000000000000000000000604082015250565b600061094d604383610767565b9150610958826108cb565b606082019050919050565b6000602082019050818103600083015261097c81610940565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c20636f75706c652070616972000000602082015250565b60006109df603d83610767565b91506109ea82610983565b604082019050919050565b60006020820190508181036000830152610a0e816109d2565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610a71603c83610767565b9150610a7c82610a15565b604082019050919050565b60006020820190508181036000830152610aa081610a64565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c20726573756c74206d757374206260208201527f6520310000000000000000000000000000000000000000000000000000000000604082015250565b6000610b29604383610767565b9150610b3482610aa7565b606082019050919050565b60006020820190508181036000830152610b5881610b1c565b905091905056fea26469706673582212204038c81eb10de716a1c32cf4e4142ff761b960825a5b92077501cfa84d6e7bf564736f6c634300080c0033"; + +type BNPairingPrecompileCostEstimatorConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BNPairingPrecompileCostEstimatorConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BNPairingPrecompileCostEstimator__factory extends ContractFactory { + constructor(...args: BNPairingPrecompileCostEstimatorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + overrides || {} + ) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): BNPairingPrecompileCostEstimator { + return super.attach(address) as BNPairingPrecompileCostEstimator; + } + override connect(signer: Signer): BNPairingPrecompileCostEstimator__factory { + return super.connect(signer) as BNPairingPrecompileCostEstimator__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BNPairingPrecompileCostEstimatorInterface { + return new utils.Interface( + _abi + ) as BNPairingPrecompileCostEstimatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BNPairingPrecompileCostEstimator { + return new Contract( + address, + _abi, + signerOrProvider + ) as BNPairingPrecompileCostEstimator; + } +} diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts new file mode 100644 index 00000000..13d31726 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { BNPairingPrecompileCostEstimator__factory } from "./BNPairingPrecompileCostEstimator__factory"; diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts new file mode 100644 index 00000000..6397da09 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as contracts from "./contracts"; diff --git a/src/contracts/factories/src/aa-4337/bls/lib/index.ts b/src/contracts/factories/src/aa-4337/bls/lib/index.ts new file mode 100644 index 00000000..65089bf3 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/bls/lib/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as hubbleContracts from "./hubble-contracts"; +export { BLSOpen__factory } from "./BLSOpen__factory"; diff --git a/src/contracts/factories/BaseAccount__factory.ts b/src/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts similarity index 91% rename from src/contracts/factories/BaseAccount__factory.ts rename to src/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts index 40baa51b..08231018 100644 --- a/src/contracts/factories/BaseAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { BaseAccount, BaseAccountInterface } from "../BaseAccount"; +import type { Provider } from "@ethersproject/providers"; +import type { + BaseAccount, + BaseAccountInterface, +} from "../../../../src/aa-4337/core/BaseAccount"; const _abi = [ { @@ -102,11 +105,6 @@ const _abi = [ name: "userOpHash", type: "bytes32", }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, { internalType: "uint256", name: "missingAccountFunds", @@ -117,14 +115,14 @@ const _abi = [ outputs: [ { internalType: "uint256", - name: "deadline", + name: "validationData", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class BaseAccount__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/BasePaymaster__factory.ts b/src/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts similarity index 92% rename from src/contracts/factories/BasePaymaster__factory.ts rename to src/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts index 6fc50dd0..4e12667f 100644 --- a/src/contracts/factories/BasePaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { BasePaymaster, BasePaymasterInterface } from "../BasePaymaster"; +import type { Provider } from "@ethersproject/providers"; +import type { + BasePaymaster, + BasePaymasterInterface, +} from "../../../../src/aa-4337/core/BasePaymaster"; const _abi = [ { @@ -115,19 +118,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "_entryPoint", - type: "address", - }, - ], - name: "setEntryPoint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -232,7 +222,7 @@ const _abi = [ }, { internalType: "uint256", - name: "deadline", + name: "validationData", type: "uint256", }, ], @@ -270,7 +260,7 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class BasePaymaster__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts b/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts new file mode 100644 index 00000000..f4fd5a46 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts @@ -0,0 +1,1303 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + EntryPoint, + EntryPointInterface, +} from "../../../../src/aa-4337/core/EntryPoint"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "paid", + type: "uint256", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bool", + name: "targetSuccess", + type: "bool", + }, + { + internalType: "bytes", + name: "targetResult", + type: "bytes", + }, + ], + name: "ExecutionResult", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "opIndex", + type: "uint256", + }, + { + internalType: "string", + name: "reason", + type: "string", + }, + ], + name: "FailedOp", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "SenderAddressResult", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureValidationFailed", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + ], + name: "ValidationResult", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "stakeInfo", + type: "tuple", + }, + ], + internalType: "struct IEntryPoint.AggregatorStakeInfo", + name: "aggregatorInfo", + type: "tuple", + }, + ], + name: "ValidationResultWithAggregation", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "factory", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + ], + name: "AccountDeployed", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256", + }, + ], + name: "Deposited", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureAggregatorChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + name: "StakeLocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeUnlocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "StakeWithdrawn", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasUsed", + type: "uint256", + }, + ], + name: "UserOperationEvent", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes", + }, + ], + name: "UserOperationRevertReason", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdrawn", + type: "event", + }, + { + inputs: [], + name: "SIG_VALIDATION_FAILED", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "_validateSenderAndPaymaster", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + 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: "account", + type: "address", + }, + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "deposits", + outputs: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + ], + name: "getSenderAddress", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "contract IAggregator", + name: "aggregator", + type: "address", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + name: "opsPerAggregator", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleAggregatedOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "ops", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "address", + name: "paymaster", + type: "address", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.MemoryUserOp", + name: "mUserOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "uint256", + name: "contextOffset", + type: "uint256", + }, + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.UserOpInfo", + name: "opInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + ], + name: "innerHandleOp", + outputs: [ + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "op", + type: "tuple", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "targetCallData", + type: "bytes", + }, + ], + name: "simulateHandleOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "simulateValidation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a0604052604051620000129062000076565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200006f57600080fd5b5062000084565b6103628062006e3c83390190565b608051616d95620000a7600039600081816115c7015261379a0152616d956000f3fe6080604052600436106101025760003560e01c8063957122ab11610095578063bb9fe6bf11610064578063bb9fe6bf1461033b578063c23a5cea14610352578063d6383f941461037b578063ee219423146103a4578063fc7e286d146103cd57610112565b8063957122ab146102905780639b249f69146102b9578063a6193531146102e2578063b760faf91461031f57610112565b80634b1d7cf5116100d15780634b1d7cf5146101c25780635287ce12146101eb57806370a08231146102285780638f41ec5a1461026557610112565b80630396cb60146101175780631d732756146101335780631fad948c14610170578063205c28781461019957610112565b36610112576101103361040e565b005b600080fd5b610131600480360381019061012c9190613bc7565b6104ca565b005b34801561013f57600080fd5b5061015a60048036038101906101559190613fc4565b610881565b6040516101679190614065565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190614114565b610a55565b005b3480156101a557600080fd5b506101c060048036038101906101bb9190614174565b610bac565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061420a565b610dd1565b005b3480156101f757600080fd5b50610212600480360381019061020d919061426a565b6112cb565b60405161021f9190614373565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a919061426a565b611418565b60405161025c9190614065565b60405180910390f35b34801561027157600080fd5b5061027a61148d565b6040516102879190614065565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b2919061438e565b611492565b005b3480156102c557600080fd5b506102e060048036038101906102db9190614423565b6115c5565b005b3480156102ee57600080fd5b5061030960048036038101906103049190614495565b61169f565b60405161031691906144ed565b60405180910390f35b6103396004803603810190610334919061426a565b61040e565b005b34801561034757600080fd5b506103506116db565b005b34801561035e57600080fd5b5061037960048036038101906103749190614508565b61188c565b005b34801561038757600080fd5b506103a2600480360381019061039d9190614535565b611b8c565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190614495565b611cdc565b005b3480156103d957600080fd5b506103f460048036038101906103ef919061426a565b611f69565b604051610405959493929190614601565b60405180910390f35b6104188134612002565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260000160009054906101000a90046dffffffffffffffffffffffffffff166040516104be919061468f565b60405180910390a25050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008263ffffffff1611610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90614707565b60405180910390fd5b8060010160009054906101000a900463ffffffff1663ffffffff168263ffffffff1610156105b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105af90614773565b60405180910390fd5b60003482600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166105f491906147c2565b905060008111610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090614864565b60405180910390fd5b6dffffffffffffffffffffffffffff801681111561068c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610683906148d0565b60405180910390fd5b6040518060a001604052808360000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001600115158152602001826dffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600065ffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550602082015181600001600e6101000a81548160ff021916908315150217905550604082015181600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060608201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160046101000a81548165ffffffffffff021916908365ffffffffffff1602179055509050503373ffffffffffffffffffffffffffffffffffffffff167fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c018285604051610874929190614921565b60405180910390a2505050565b6000805a90503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614996565b60405180910390fd5b60008560000151905060008160400151905061138882606001518201015a1015610943577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b600080895111156109e7576000610961846000015160008c86612112565b9050806109e557600061097561080061212b565b90506000815111156109df57846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a2018760200151846040516109d6929190614a3e565b60405180910390a35b60019250505b505b600088608001515a8603019050610a466000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508561215b565b95505050505050949350505050565b600083839050905060008167ffffffffffffffff811115610a7957610a78613c0f565b5b604051908082528060200260200182016040528015610ab257816020015b610a9f613a0e565b815260200190600190039081610a975790505b50905060005b82811015610b32576000828281518110610ad557610ad4614a6e565b5b60200260200101519050600080610b11848a8a87818110610af957610af8614a6e565b5b9050602002810190610b0b9190614aac565b856124d4565b91509150610b22848383600061267e565b5050508080600101915050610ab8565b506000805b83811015610b9957610b8881888884818110610b5657610b55614a6e565b5b9050602002810190610b689190614aac565b858481518110610b7b57610b7a614a6e565b5b6020026020010151612811565b820191508080600101915050610b37565b50610ba4848261296b565b505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16821115610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690614b21565b60405180910390fd5b818160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16610c999190614b41565b8160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8484604051610d17929190614bca565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1683604051610d4590614c24565b60006040518083038185875af1925050503d8060008114610d82576040519150601f19603f3d011682016040523d82523d6000602084013e610d87565b606091505b5050905080610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290614c85565b60405180910390fd5b50505050565b60008383905090506000805b82811015610fbf5736868683818110610df957610df8614a6e565b5b9050602002810190610e0b9190614ca5565b9050366000828060000190610e209190614ccd565b915091506000836020016020810190610e399190614d6e565b9050600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614de7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f97578073ffffffffffffffffffffffffffffffffffffffff1663e3563a4f8484878060400190610f0d9190614e07565b6040518563ffffffff1660e01b8152600401610f2c94939291906151d0565b60006040518083038186803b158015610f4457600080fd5b505afa925050508015610f55575060015b610f9657806040517f86a9f750000000000000000000000000000000000000000000000000000000008152600401610f8d919061521a565b60405180910390fd5b5b8282905086610fa691906147c2565b9550505050508080610fb790615235565b915050610ddd565b5060008167ffffffffffffffff811115610fdc57610fdb613c0f565b5b60405190808252806020026020018201604052801561101557816020015b611002613a0e565b815260200190600190039081610ffa5790505b5090506000805b8481101561112b573688888381811061103857611037614a6e565b5b905060200281019061104a9190614ca5565b905036600082806000019061105f9190614ccd565b9150915060008360200160208101906110789190614d6e565b9050600083839050905060005b818110156111125760008989815181106110a2576110a1614a6e565b5b602002602001015190506000806110de8b8989878181106110c6576110c5614a6e565b5b90506020028101906110d89190614aac565b856124d4565b915091506110ee8483838961267e565b8a806110f990615235565b9b5050505050808061110a90615235565b915050611085565b505050505050808061112390615235565b91505061101c565b50600080915060005b8581101561127257368989838181106111505761114f614a6e565b5b90506020028101906111629190614ca5565b90508060200160208101906111779190614d6e565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a23660008280600001906111cc9190614ccd565b91509150600082829050905060005b8181101561125a5761122c888585848181106111fa576111f9614a6e565b5b905060200281019061120c9190614aac565b8b8b8151811061121f5761121e614a6e565b5b6020026020010151612811565b8761123791906147c2565b9650878061124490615235565b985050808061125290615235565b9150506111db565b5050505050808061126a90615235565b915050611134565b50600073ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a26112c1868261296b565b5050505050505050565b6112d3613a46565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050919050565b600181565b6000858590501480156114bc575060008373ffffffffffffffffffffffffffffffffffffffff163b145b156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f3906152ca565b60405180910390fd5b6014828290501061158a576000828260009060149261151d939291906152f4565b906115289190615373565b60601c905060008173ffffffffffffffffffffffffffffffffffffffff163b1415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f9061541e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90615461565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3683836040518363ffffffff1660e01b8152600401611620929190615481565b6020604051808303816000875af115801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906154ba565b6040517f6ca7b806000000000000000000000000000000000000000000000000000000008152600401611696919061521a565b60405180910390fd5b60006116aa82612a8c565b30466040516020016116be939291906154e7565b604051602081830303815290604052805190602001209050919050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900463ffffffff1663ffffffff16141561177b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117729061556a565b60405180910390fd5b80600001600e9054906101000a900460ff166117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906155d6565b60405180910390fd5b60008160010160009054906101000a900463ffffffff1663ffffffff16426117f491906155f6565b9050808260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550600082600001600e6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a826040516118809190615663565b60405180910390a25050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905060008111611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906156ca565b60405180910390fd5b60008260010160049054906101000a900465ffffffffffff1665ffffffffffff16116119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615736565b60405180910390fd5b428260010160049054906101000a900465ffffffffffff1665ffffffffffff161115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd906157a2565b60405180910390fd5b60008260010160006101000a81548163ffffffff021916908363ffffffff16021790555060008260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550600082600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38483604051611ad2929190614bca565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682604051611b0090614c24565b60006040518083038185875af1925050503d8060008114611b3d576040519150601f19603f3d011682016040523d82523d6000602084013e611b42565b606091505b5050905080611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d9061580e565b60405180910390fd5b50505050565b611b94613a0e565b611b9d85612aa5565b600080611bac600088856124d4565b915091506000611bbc8383612bce565b9050611bc6612ce2565b6000611bd460008a87612811565b9050611bde612ce2565b60006060600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614611c89578973ffffffffffffffffffffffffffffffffffffffff168989604051611c3d929190615853565b6000604051808303816000865af19150503d8060008114611c7a576040519150601f19603f3d011682016040523d82523d6000602084013e611c7f565b606091505b5080925081935050505b8660800151838560200151866040015185856040517f8b7ac980000000000000000000000000000000000000000000000000000000008152600401611cd39695949392919061586c565b60405180910390fd5b611ce4613a0e565b611ced82612aa5565b600080611cfc600085856124d4565b915091506000611d13846000015160a00151612ce8565b90506000611d28856000015160000151612ce8565b9050611d32613aa5565b366000888060400190611d459190614e07565b9150915060006014838390501015611d5e576000611d81565b8282600090601492611d72939291906152f4565b90611d7d9190615373565b60601c5b9050611d8c81612ce8565b93505050506000611d9d8686612bce565b90506000816000015190506000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905060006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff168152602001611e368c60600151612d94565b8152509050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ea55750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f2657600060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001611edc86612ce8565b81525090508187878a846040517ffaecb4e4000000000000000000000000000000000000000000000000000000008152600401611f1d959493929190615a23565b60405180910390fd5b808686896040517fe0cff05f000000000000000000000000000000000000000000000000000000008152600401611f609493929190615a7e565b60405180910390fd5b60006020528060005260406000206000915090508060000160009054906101000a90046dffffffffffffffffffffffffffff169080600001600e9054906101000a900460ff169080600001600f9054906101000a90046dffffffffffffffffffffffffffff16908060010160009054906101000a900463ffffffff16908060010160049054906101000a900465ffffffffffff16905085565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000828260000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661208091906147c2565b90506dffffffffffffffffffffffffffff80168111156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90615b16565b60405180910390fd5b808260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505050565b6000806000845160208601878987f19050949350505050565b60603d8281111561213a578290505b604051602082018101604052818152816000602083013e8092505050919050565b6000805a905060008086600001519050600061217682612d9e565b905060008260a001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c257826000015193506123b3565b8093506000885111156123b25781870295506002808111156121e7576121e6615b36565b5b8a60028111156121fa576121f9615b36565b5b14612279578073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b815260040161224193929190615bad565b600060405180830381600088803b15801561225b57600080fd5b5087f115801561226f573d6000803e3d6000fd5b50505050506123b1565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b81526004016122bb93929190615bad565b600060405180830381600088803b1580156122d557600080fd5b5087f1935050505080156122e7575060015b6123b0576122f3615bf8565b806308c379a014156123715750612308615c1a565b806123135750612373565b8b816040516020016123259190615d1d565b6040516020818303038152906040526040517f220266b6000000000000000000000000000000000000000000000000000000008152600401612368929190615d7c565b60405180910390fd5b505b8a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016123a79190615df8565b60405180910390fd5b5b5b5b5a85038701965081870295508589604001511015612408578a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016123ff9190615e72565b60405180910390fd5b6000868a6040015103905061241d8582612002565b600080600281111561243257612431615b36565b5b8c600281111561244557612444615b36565b5b1490508460a0015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f6040516124bc9493929190615ea0565b60405180910390a45050505050505095945050505050565b60008060005a90506000846000015190506124ef8682612dd9565b6124f88661169f565b85602001818152505060008661010001358760e001358360400151846060015185608001511717171790506effffffffffffffffffffffffffffff8016811115612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e90615f31565b60405180910390fd5b60008061258384612f81565b90506125918a8a8a84612ff3565b80985081935050506125a1612ce2565b6060600073ffffffffffffffffffffffffffffffffffffffff168560a0015173ffffffffffffffffffffffffffffffffffffffff16146125f1576125e88b8b8b858761331f565b80985081925050505b60005a87039050808b60a001351015612641578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016126389190615f9d565b60405180910390fd5b828a6040018181525050612654826135de565b8a60600181815250508a60c001355a8803018a608001818152505050505050505050935093915050565b60008061268a856135e8565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fe57856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016126f59190616017565b60405180910390fd5b801561274157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127389190616091565b60405180910390fd5b600061274c856135e8565b8093508192505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146127c557866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127bc919061610b565b60405180910390fd5b811561280857866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127ff91906161ab565b60405180910390fd5b50505050505050565b6000805a905060006128268460600151612d94565b90503073ffffffffffffffffffffffffffffffffffffffff16631d7327568680606001906128549190614e07565b87856040518563ffffffff1660e01b815260040161287594939291906162f7565b6020604051808303816000875af19250505080156128b157506040513d601f19601f820116820180604052508101906128ae9190616355565b60015b61295d57600060206000803e60005190507fdeaddead0000000000000000000000000000000000000000000000000000000081141561292757866040517f220266b600000000000000000000000000000000000000000000000000000000815260040161291e91906163ce565b60405180910390fd5b600085608001515a8561293a9190614b41565b61294491906147c2565b905061295488600288868561215b565b94505050612962565b809350505b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d290616448565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612a0190614c24565b60006040518083038185875af1925050503d8060008114612a3e576040519150601f19603f3d011682016040523d82523d6000602084013e612a43565b606091505b5050905080612a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7e906164b4565b60405180910390fd5b505050565b6000612a9782613642565b805190602001209050919050565b3073ffffffffffffffffffffffffffffffffffffffff1663957122ab828060400190612ad19190614e07565b846000016020810190612ae4919061426a565b85806101200190612af59190614e07565b6040518663ffffffff1660e01b8152600401612b159594939291906164d4565b60006040518083038186803b158015612b2d57600080fd5b505afa925050508015612b3e575060015b612bca57612b4a615bf8565b806308c379a01415612bb95750612b5f615c1a565b80612b6a5750612bbb565b6000815114612bb3576000816040517f220266b6000000000000000000000000000000000000000000000000000000008152600401612baa929190616558565b60405180910390fd5b50612bc5565b505b3d6000803e3d6000fd5b612bcb565b5b50565b612bd6613abf565b6000612be184613684565b90506000612bee84613684565b9050600082600001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3657816000015190505b6000836020015190506000846040015190506000846020015190506000856040015190508165ffffffffffff168465ffffffffffff161015612c76578193505b8065ffffffffffff168365ffffffffffff161115612c92578092505b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b43600052565b612cf0613aa5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168260000181815250508060010160009054906101000a900463ffffffff1663ffffffff1682602001818152505050919050565b6060819050919050565b6000808260c00151905060008360e00151905080821415612dc3578192505050612dd4565b612dcf82488301613709565b925050505b919050565b816000016020810190612dec919061426a565b816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816020013581602001818152505081608001358160400181815250508160a001358160600181815250508160c001358160800181815250508160e001358160c00181815250508161010001358160e001818152505036600083806101200190612e8c9190614e07565b915091506000828290501115612f41576014828290501015612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda906165d4565b60405180910390fd5b8181600090601492612ef7939291906152f4565b90612f029190615373565b60601c8360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f7b565b60008360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168360a0015173ffffffffffffffffffffffffffffffffffffffff161415612fc4576001612fc7565b60035b60ff16905060008360800151828560600151028560400151010190508360c00151810292505050919050565b60008060005a905060008560000151905060008160000151905061302789888a80604001906130229190614e07565b613722565b60008260a001519050613038612ce2565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561309157600061307984611418565b905088811161308a5780890361308d565b60005b9150505b8273ffffffffffffffffffffffffffffffffffffffff16633a871cdd85606001518c8c60200151856040518563ffffffff1660e01b81526004016130d793929190616758565b60206040518083038160008887f19350505050801561311457506040513d601f19601f820116820180604052508101906131119190616355565b60015b6131dd57613120615bf8565b806308c379a0141561319e5750613135615c1a565b8061314057506131a0565b8b8160405160200161315291906167bc565b6040516020818303038152906040526040517f220266b6000000000000000000000000000000000000000000000000000000008152600401613195929190615d7c565b60405180910390fd5b505b8a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016131d4919061682e565b60405180910390fd5b80965050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561330c5760008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050808a11156132d0578c6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016132c791906168a8565b60405180910390fd5b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505b5a85039650505050505094509492505050565b606060008085600001519050600081606001519050848111613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90616922565b60405180910390fd5b6000858203905060008360a00151905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905089811015613440578c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401613437919061698e565b60405180910390fd5b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1663f465c77e858e8e602001518e6040518563ffffffff1660e01b81526004016134bb93929190616758565b60006040518083038160008887f1935050505080156134fd57506040513d6000823e3d601f19601f820116820180604052508101906134fa9190616a2c565b60015b6135c657613509615bf8565b806308c379a01415613587575061351e615c1a565b806135295750613589565b8d8160405160200161353b9190616aae565b6040516020818303038152906040526040517f220266b600000000000000000000000000000000000000000000000000000000815260040161357e929190615d7c565b60405180910390fd5b505b8c6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016135bd9190616b20565b60405180910390fd5b81995080985050505050505050509550959350505050565b6000819050919050565b6000806000831415613600576000809150915061363d565b600061360b84613684565b9050806040015165ffffffffffff164211806136325750806020015165ffffffffffff1642105b915080600001519250505b915091565b6060366000838061014001906136589190614e07565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b61368c613abf565b6000829050600060a084901c905060008165ffffffffffff1614156136b55765ffffffffffff90505b600060d085901c905060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b6000818310613718578161371a565b825b905092915050565b60008282905014613a08576000836000015160000151905060008173ffffffffffffffffffffffffffffffffffffffff163b1461379657846040517f220266b600000000000000000000000000000000000000000000000000000000815260040161378d9190616b9a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516060015186866040518463ffffffff1660e01b81526004016137fc929190615481565b60206040518083038160008887f115801561381b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061384091906154ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138b457856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016138ab9190616c14565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461392457856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161391b9190616c8e565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b141561398157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016139789190616d08565b60405180910390fd5b60008484600090601492613997939291906152f4565b906139a29190615373565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a001516040516139fc929190616d36565b60405180910390a35050505b50505050565b6040518060a00160405280613a21613b06565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160001515815260200160006dffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600065ffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b613ba481613b8b565b8114613baf57600080fd5b50565b600081359050613bc181613b9b565b92915050565b600060208284031215613bdd57613bdc613b81565b5b6000613beb84828501613bb2565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c4782613bfe565b810181811067ffffffffffffffff82111715613c6657613c65613c0f565b5b80604052505050565b6000613c79613b77565b9050613c858282613c3e565b919050565b600067ffffffffffffffff821115613ca557613ca4613c0f565b5b613cae82613bfe565b9050602081019050919050565b82818337600083830152505050565b6000613cdd613cd884613c8a565b613c6f565b905082815260208101848484011115613cf957613cf8613bf9565b5b613d04848285613cbb565b509392505050565b600082601f830112613d2157613d20613bf4565b5b8135613d31848260208601613cca565b91505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d6a82613d3f565b9050919050565b613d7a81613d5f565b8114613d8557600080fd5b50565b600081359050613d9781613d71565b92915050565b6000819050919050565b613db081613d9d565b8114613dbb57600080fd5b50565b600081359050613dcd81613da7565b92915050565b60006101008284031215613dea57613de9613d3a565b5b613df5610100613c6f565b90506000613e0584828501613d88565b6000830152506020613e1984828501613dbe565b6020830152506040613e2d84828501613dbe565b6040830152506060613e4184828501613dbe565b6060830152506080613e5584828501613dbe565b60808301525060a0613e6984828501613d88565b60a08301525060c0613e7d84828501613dbe565b60c08301525060e0613e9184828501613dbe565b60e08301525092915050565b6000819050919050565b613eb081613e9d565b8114613ebb57600080fd5b50565b600081359050613ecd81613ea7565b92915050565b60006101808284031215613eea57613ee9613d3a565b5b613ef460a0613c6f565b90506000613f0484828501613dd3565b600083015250610100613f1984828501613ebe565b602083015250610120613f2e84828501613dbe565b604083015250610140613f4384828501613dbe565b606083015250610160613f5884828501613dbe565b60808301525092915050565b600080fd5b600080fd5b60008083601f840112613f8457613f83613bf4565b5b8235905067ffffffffffffffff811115613fa157613fa0613f64565b5b602083019150836001820283011115613fbd57613fbc613f69565b5b9250929050565b6000806000806101c08587031215613fdf57613fde613b81565b5b600085013567ffffffffffffffff811115613ffd57613ffc613b86565b5b61400987828801613d0c565b945050602061401a87828801613ed3565b9350506101a085013567ffffffffffffffff81111561403c5761403b613b86565b5b61404887828801613f6e565b925092505092959194509250565b61405f81613d9d565b82525050565b600060208201905061407a6000830184614056565b92915050565b60008083601f84011261409657614095613bf4565b5b8235905067ffffffffffffffff8111156140b3576140b2613f64565b5b6020830191508360208202830111156140cf576140ce613f69565b5b9250929050565b60006140e182613d3f565b9050919050565b6140f1816140d6565b81146140fc57600080fd5b50565b60008135905061410e816140e8565b92915050565b60008060006040848603121561412d5761412c613b81565b5b600084013567ffffffffffffffff81111561414b5761414a613b86565b5b61415786828701614080565b9350935050602061416a868287016140ff565b9150509250925092565b6000806040838503121561418b5761418a613b81565b5b6000614199858286016140ff565b92505060206141aa85828601613dbe565b9150509250929050565b60008083601f8401126141ca576141c9613bf4565b5b8235905067ffffffffffffffff8111156141e7576141e6613f64565b5b60208301915083602082028301111561420357614202613f69565b5b9250929050565b60008060006040848603121561422357614222613b81565b5b600084013567ffffffffffffffff81111561424157614240613b86565b5b61424d868287016141b4565b93509350506020614260868287016140ff565b9150509250925092565b6000602082840312156142805761427f613b81565b5b600061428e84828501613d88565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b6142ba81614297565b82525050565b60008115159050919050565b6142d5816142c0565b82525050565b6142e481613b8b565b82525050565b600065ffffffffffff82169050919050565b614305816142ea565b82525050565b60a08201600082015161432160008501826142b1565b50602082015161433460208501826142cc565b50604082015161434760408501826142b1565b50606082015161435a60608501826142db565b50608082015161436d60808501826142fc565b50505050565b600060a082019050614388600083018461430b565b92915050565b6000806000806000606086880312156143aa576143a9613b81565b5b600086013567ffffffffffffffff8111156143c8576143c7613b86565b5b6143d488828901613f6e565b955095505060206143e788828901613d88565b935050604086013567ffffffffffffffff81111561440857614407613b86565b5b61441488828901613f6e565b92509250509295509295909350565b6000806020838503121561443a57614439613b81565b5b600083013567ffffffffffffffff81111561445857614457613b86565b5b61446485828601613f6e565b92509250509250929050565b600080fd5b6000610160828403121561448c5761448b614470565b5b81905092915050565b6000602082840312156144ab576144aa613b81565b5b600082013567ffffffffffffffff8111156144c9576144c8613b86565b5b6144d584828501614475565b91505092915050565b6144e781613e9d565b82525050565b600060208201905061450260008301846144de565b92915050565b60006020828403121561451e5761451d613b81565b5b600061452c848285016140ff565b91505092915050565b6000806000806060858703121561454f5761454e613b81565b5b600085013567ffffffffffffffff81111561456d5761456c613b86565b5b61457987828801614475565b945050602061458a87828801613d88565b935050604085013567ffffffffffffffff8111156145ab576145aa613b86565b5b6145b787828801613f6e565b925092505092959194509250565b6145ce81614297565b82525050565b6145dd816142c0565b82525050565b6145ec81613b8b565b82525050565b6145fb816142ea565b82525050565b600060a08201905061461660008301886145c5565b61462360208301876145d4565b61463060408301866145c5565b61463d60608301856145e3565b61464a60808301846145f2565b9695505050505050565b6000819050919050565b600061467961467461466f84614297565b614654565b613d9d565b9050919050565b6146898161465e565b82525050565b60006020820190506146a46000830184614680565b92915050565b600082825260208201905092915050565b7f6d757374207370656369667920756e7374616b652064656c6179000000000000600082015250565b60006146f1601a836146aa565b91506146fc826146bb565b602082019050919050565b60006020820190508181036000830152614720816146e4565b9050919050565b7f63616e6e6f7420646563726561736520756e7374616b652074696d6500000000600082015250565b600061475d601c836146aa565b915061476882614727565b602082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cd82613d9d565b91506147d883613d9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561480d5761480c614793565b5b828201905092915050565b7f6e6f207374616b65207370656369666965640000000000000000000000000000600082015250565b600061484e6012836146aa565b915061485982614818565b602082019050919050565b6000602082019050818103600083015261487d81614841565b9050919050565b7f7374616b65206f766572666c6f77000000000000000000000000000000000000600082015250565b60006148ba600e836146aa565b91506148c582614884565b602082019050919050565b600060208201905081810360008301526148e9816148ad565b9050919050565b600061490b61490661490184613b8b565b614654565b613d9d565b9050919050565b61491b816148f0565b82525050565b60006040820190506149366000830185614056565b6149436020830184614912565b9392505050565b7f4141393220696e7465726e616c2063616c6c206f6e6c79000000000000000000600082015250565b60006149806017836146aa565b915061498b8261494a565b602082019050919050565b600060208201905081810360008301526149af81614973565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149f05780820151818401526020810190506149d5565b838111156149ff576000848401525b50505050565b6000614a10826149b6565b614a1a81856149c1565b9350614a2a8185602086016149d2565b614a3381613bfe565b840191505092915050565b6000604082019050614a536000830185614056565b8181036020830152614a658184614a05565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112614ac957614ac8614a9d565b5b80830191505092915050565b7f576974686472617720616d6f756e7420746f6f206c6172676500000000000000600082015250565b6000614b0b6019836146aa565b9150614b1682614ad5565b602082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b6000614b4c82613d9d565b9150614b5783613d9d565b925082821015614b6a57614b69614793565b5b828203905092915050565b6000614b90614b8b614b8684613d3f565b614654565b613d3f565b9050919050565b6000614ba282614b75565b9050919050565b6000614bb482614b97565b9050919050565b614bc481614ba9565b82525050565b6000604082019050614bdf6000830185614bbb565b614bec6020830184614056565b9392505050565b600081905092915050565b50565b6000614c0e600083614bf3565b9150614c1982614bfe565b600082019050919050565b6000614c2f82614c01565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000614c6f6012836146aa565b9150614c7a82614c39565b602082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b600082356001606003833603038112614cc157614cc0614a9d565b5b80830191505092915050565b60008083356001602003843603038112614cea57614ce9614a9d565b5b80840192508235915067ffffffffffffffff821115614d0c57614d0b614aa2565b5b602083019250602082023603831315614d2857614d27614aa7565b5b509250929050565b6000614d3b82613d5f565b9050919050565b614d4b81614d30565b8114614d5657600080fd5b50565b600081359050614d6881614d42565b92915050565b600060208284031215614d8457614d83613b81565b5b6000614d9284828501614d59565b91505092915050565b7f4141393620696e76616c69642061676772656761746f72000000000000000000600082015250565b6000614dd16017836146aa565b9150614ddc82614d9b565b602082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b60008083356001602003843603038112614e2457614e23614a9d565b5b80840192508235915067ffffffffffffffff821115614e4657614e45614aa2565b5b602083019250600182023603831315614e6257614e61614aa7565b5b509250929050565b600082825260208201905092915050565b6000819050919050565b6000614e946020840184613d88565b905092915050565b614ea581613d5f565b82525050565b6000614eba6020840184613dbe565b905092915050565b614ecb81613d9d565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112614efd57614efc614edb565b5b83810192508235915060208301925067ffffffffffffffff821115614f2557614f24614ed1565b5b600182023603841315614f3b57614f3a614ed6565b5b509250929050565b600082825260208201905092915050565b6000614f608385614f43565b9350614f6d838584613cbb565b614f7683613bfe565b840190509392505050565b60006101608301614f956000840184614e85565b614fa26000860182614e9c565b50614fb06020840184614eab565b614fbd6020860182614ec2565b50614fcb6040840184614ee0565b8583036040870152614fde838284614f54565b92505050614fef6060840184614ee0565b8583036060870152615002838284614f54565b925050506150136080840184614eab565b6150206080860182614ec2565b5061502e60a0840184614eab565b61503b60a0860182614ec2565b5061504960c0840184614eab565b61505660c0860182614ec2565b5061506460e0840184614eab565b61507160e0860182614ec2565b50615080610100840184614eab565b61508e610100860182614ec2565b5061509d610120840184614ee0565b8583036101208701526150b1838284614f54565b925050506150c3610140840184614ee0565b8583036101408701526150d7838284614f54565b925050508091505092915050565b60006150f18383614f81565b905092915050565b6000823560016101600383360303811261511657615115614edb565b5b82810191505092915050565b6000602082019050919050565b600061513b8385614e6a565b93508360208402850161514d84614e7b565b8060005b8781101561519157848403895261516882846150f9565b61517285826150e5565b945061517d83615122565b925060208a01995050600181019050615151565b50829750879450505050509392505050565b60006151af83856149c1565b93506151bc838584613cbb565b6151c583613bfe565b840190509392505050565b600060408201905081810360008301526151eb81868861512f565b905081810360208301526152008184866151a3565b905095945050505050565b61521481613d5f565b82525050565b600060208201905061522f600083018461520b565b92915050565b600061524082613d9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614793565b5b600182019050919050565b7f41413230206163636f756e74206e6f74206465706c6f79656400000000000000600082015250565b60006152b46019836146aa565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b600080fd5b600080fd5b60008085851115615308576153076152ea565b5b83861115615319576153186152ef565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061537f838361532f565b8261538a813561533a565b925060148210156153ca576153c57fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802615366565b831692505b505092915050565b7f41413330207061796d6173746572206e6f74206465706c6f7965640000000000600082015250565b6000615408601b836146aa565b9150615413826153d2565b602082019050919050565b60006020820190508181036000830152615437816153fb565b9050919050565b600061544b6000836146aa565b915061545682614bfe565b600082019050919050565b6000602082019050818103600083015261547a8161543e565b9050919050565b6000602082019050818103600083015261549c8184866151a3565b90509392505050565b6000815190506154b481613d71565b92915050565b6000602082840312156154d0576154cf613b81565b5b60006154de848285016154a5565b91505092915050565b60006060820190506154fc60008301866144de565b615509602083018561520b565b6155166040830184614056565b949350505050565b7f6e6f74207374616b656400000000000000000000000000000000000000000000600082015250565b6000615554600a836146aa565b915061555f8261551e565b602082019050919050565b6000602082019050818103600083015261558381615547565b9050919050565b7f616c726561647920756e7374616b696e67000000000000000000000000000000600082015250565b60006155c06011836146aa565b91506155cb8261558a565b602082019050919050565b600060208201905081810360008301526155ef816155b3565b9050919050565b6000615601826142ea565b915061560c836142ea565b92508265ffffffffffff0382111561562757615626614793565b5b828201905092915050565b600061564d615648615643846142ea565b614654565b613d9d565b9050919050565b61565d81615632565b82525050565b60006020820190506156786000830184615654565b92915050565b7f4e6f207374616b6520746f207769746864726177000000000000000000000000600082015250565b60006156b46014836146aa565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f6d7573742063616c6c20756e6c6f636b5374616b652829206669727374000000600082015250565b6000615720601d836146aa565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f5374616b65207769746864726177616c206973206e6f74206475650000000000600082015250565b600061578c601b836146aa565b915061579782615756565b602082019050919050565b600060208201905081810360008301526157bb8161577f565b9050919050565b7f6661696c656420746f207769746864726177207374616b650000000000000000600082015250565b60006157f86018836146aa565b9150615803826157c2565b602082019050919050565b60006020820190508181036000830152615827816157eb565b9050919050565b600061583a8385614bf3565b9350615847838584613cbb565b82840190509392505050565b600061586082848661582e565b91508190509392505050565b600060c0820190506158816000830189614056565b61588e6020830188614056565b61589b60408301876145f2565b6158a860608301866145f2565b6158b560808301856145d4565b81810360a08301526158c78184614a05565b9050979650505050505050565b60006158df826149b6565b6158e98185614f43565b93506158f98185602086016149d2565b61590281613bfe565b840191505092915050565b600060c0830160008301516159256000860182614ec2565b5060208301516159386020860182614ec2565b50604083015161594b60408601826142cc565b50606083015161595e60608601826142fc565b50608083015161597160808601826142fc565b5060a083015184820360a086015261598982826158d4565b9150508091505092915050565b6040820160008201516159ac6000850182614ec2565b5060208201516159bf6020850182614ec2565b50505050565b6040820160008201516159db6000850182614ec2565b5060208201516159ee6020850182614ec2565b50505050565b606082016000820151615a0a6000850182614e9c565b506020820151615a1d60208501826159c5565b50505050565b6000610140820190508181036000830152615a3e818861590d565b9050615a4d6020830187615996565b615a5a6060830186615996565b615a6760a0830185615996565b615a7460e08301846159f4565b9695505050505050565b600060e0820190508181036000830152615a98818761590d565b9050615aa76020830186615996565b615ab46060830185615996565b615ac160a0830184615996565b95945050505050565b7f6465706f736974206f766572666c6f7700000000000000000000000000000000600082015250565b6000615b006010836146aa565b9150615b0b82615aca565b602082019050919050565b60006020820190508181036000830152615b2f81615af3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615b7657615b75615b36565b5b50565b6000819050615b8782615b65565b919050565b6000615b9782615b79565b9050919050565b615ba781615b8c565b82525050565b6000606082019050615bc26000830186615b9e565b8181036020830152615bd48185614a05565b9050615be36040830184614056565b949350505050565b60008160e01c9050919050565b600060033d1115615c175760046000803e615c14600051615beb565b90505b90565b600060443d1015615c2a57615cad565b615c32613b77565b60043d036004823e80513d602482011167ffffffffffffffff82111715615c5a575050615cad565b808201805167ffffffffffffffff811115615c785750505050615cad565b80602083010160043d038501811115615c95575050505050615cad565b615ca482602001850186613c3e565b82955050505050505b90565b7f4141353020706f73744f702072657665727465643a2000000000000000000000815250565b600081519050919050565b600081905092915050565b6000615cf782615cd6565b615d018185615ce1565b9350615d118185602086016149d2565b80840191505092915050565b6000615d2882615cb0565b601682019150615d388284615cec565b915081905092915050565b6000615d4e82615cd6565b615d5881856146aa565b9350615d688185602086016149d2565b615d7181613bfe565b840191505092915050565b6000604082019050615d916000830185614056565b8181036020830152615da38184615d43565b90509392505050565b7f4141353020706f73744f70207265766572740000000000000000000000000000600082015250565b6000615de26012836146aa565b9150615ded82615dac565b602082019050919050565b6000604082019050615e0d6000830184614056565b8181036020830152615e1e81615dd5565b905092915050565b7f414135312070726566756e642062656c6f772061637475616c476173436f7374600082015250565b6000615e5c6020836146aa565b9150615e6782615e26565b602082019050919050565b6000604082019050615e876000830184614056565b8181036020830152615e9881615e4f565b905092915050565b6000608082019050615eb56000830187614056565b615ec260208301866145d4565b615ecf6040830185614056565b615edc6060830184614056565b95945050505050565b7f41413934206761732076616c756573206f766572666c6f770000000000000000600082015250565b6000615f1b6018836146aa565b9150615f2682615ee5565b602082019050919050565b60006020820190508181036000830152615f4a81615f0e565b9050919050565b7f41413430206f76657220766572696669636174696f6e4761734c696d69740000600082015250565b6000615f87601e836146aa565b9150615f9282615f51565b602082019050919050565b6000604082019050615fb26000830184614056565b8181036020830152615fc381615f7a565b905092915050565b7f41413234207369676e6174757265206572726f72000000000000000000000000600082015250565b60006160016014836146aa565b915061600c82615fcb565b602082019050919050565b600060408201905061602c6000830184614056565b818103602083015261603d81615ff4565b905092915050565b7f414132322065787069726564206f72206e6f7420647565000000000000000000600082015250565b600061607b6017836146aa565b915061608682616045565b602082019050919050565b60006040820190506160a66000830184614056565b81810360208301526160b78161606e565b905092915050565b7f41413334207369676e6174757265206572726f72000000000000000000000000600082015250565b60006160f56014836146aa565b9150616100826160bf565b602082019050919050565b60006040820190506161206000830184614056565b8181036020830152616131816160e8565b905092915050565b7f41413332207061796d61737465722065787069726564206f72206e6f7420647560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006161956021836146aa565b91506161a082616139565b604082019050919050565b60006040820190506161c06000830184614056565b81810360208301526161d181616188565b905092915050565b610100820160008201516161f06000850182614e9c565b5060208201516162036020850182614ec2565b5060408201516162166040850182614ec2565b5060608201516162296060850182614ec2565b50608082015161623c6080850182614ec2565b5060a082015161624f60a0850182614e9c565b5060c082015161626260c0850182614ec2565b5060e082015161627560e0850182614ec2565b50505050565b61628481613e9d565b82525050565b610180820160008201516162a160008501826161d9565b5060208201516162b561010085018261627b565b5060408201516162c9610120850182614ec2565b5060608201516162dd610140850182614ec2565b5060808201516162f1610160850182614ec2565b50505050565b60006101c08201905081810360008301526163138186886151a3565b9050616322602083018561628a565b8181036101a08301526163358184614a05565b905095945050505050565b60008151905061634f81613da7565b92915050565b60006020828403121561636b5761636a613b81565b5b600061637984828501616340565b91505092915050565b7f41413935206f7574206f66206761730000000000000000000000000000000000600082015250565b60006163b8600f836146aa565b91506163c382616382565b602082019050919050565b60006040820190506163e36000830184614056565b81810360208301526163f4816163ab565b905092915050565b7f4141393020696e76616c69642062656e65666963696172790000000000000000600082015250565b60006164326018836146aa565b915061643d826163fc565b602082019050919050565b6000602082019050818103600083015261646181616425565b9050919050565b7f41413931206661696c65642073656e6420746f2062656e656669636961727900600082015250565b600061649e601f836146aa565b91506164a982616468565b602082019050919050565b600060208201905081810360008301526164cd81616491565b9050919050565b600060608201905081810360008301526164ef8187896151a3565b90506164fe602083018661520b565b81810360408301526165118184866151a3565b90509695505050505050565b6000819050919050565b600061654261653d6165388461651d565b614654565b613d9d565b9050919050565b61655281616527565b82525050565b600060408201905061656d6000830185616549565b818103602083015261657f8184615d43565b90509392505050565b7f4141393320696e76616c6964207061796d6173746572416e6444617461000000600082015250565b60006165be601d836146aa565b91506165c982616588565b602082019050919050565b600060208201905081810360008301526165ed816165b1565b9050919050565b600061016083016166086000840184614e85565b6166156000860182614e9c565b506166236020840184614eab565b6166306020860182614ec2565b5061663e6040840184614ee0565b8583036040870152616651838284614f54565b925050506166626060840184614ee0565b8583036060870152616675838284614f54565b925050506166866080840184614eab565b6166936080860182614ec2565b506166a160a0840184614eab565b6166ae60a0860182614ec2565b506166bc60c0840184614eab565b6166c960c0860182614ec2565b506166d760e0840184614eab565b6166e460e0860182614ec2565b506166f3610100840184614eab565b616701610100860182614ec2565b50616710610120840184614ee0565b858303610120870152616724838284614f54565b92505050616736610140840184614ee0565b85830361014087015261674a838284614f54565b925050508091505092915050565b6000606082019050818103600083015261677281866165f4565b905061678160208301856144de565b61678e6040830184614056565b949350505050565b7f414132332072657665727465643a200000000000000000000000000000000000815250565b60006167c782616796565b600f820191506167d78284615cec565b915081905092915050565b7f4141323320726576657274656420286f72204f4f472900000000000000000000600082015250565b60006168186016836146aa565b9150616823826167e2565b602082019050919050565b60006040820190506168436000830184614056565b81810360208301526168548161680b565b905092915050565b7f41413231206469646e2774207061792070726566756e64000000000000000000600082015250565b60006168926017836146aa565b915061689d8261685c565b602082019050919050565b60006040820190506168bd6000830184614056565b81810360208301526168ce81616885565b905092915050565b7f4141343120746f6f206c6974746c6520766572696669636174696f6e47617300600082015250565b600061690c601f836146aa565b9150616917826168d6565b602082019050919050565b6000602082019050818103600083015261693b816168ff565b9050919050565b7f41413331207061796d6173746572206465706f73697420746f6f206c6f770000600082015250565b6000616978601e836146aa565b915061698382616942565b602082019050919050565b60006040820190506169a36000830184614056565b81810360208301526169b48161696b565b905092915050565b60006169cf6169ca84613c8a565b613c6f565b9050828152602081018484840111156169eb576169ea613bf9565b5b6169f68482856149d2565b509392505050565b600082601f830112616a1357616a12613bf4565b5b8151616a238482602086016169bc565b91505092915050565b60008060408385031215616a4357616a42613b81565b5b600083015167ffffffffffffffff811115616a6157616a60613b86565b5b616a6d858286016169fe565b9250506020616a7e85828601616340565b9150509250929050565b7f414133332072657665727465643a200000000000000000000000000000000000815250565b6000616ab982616a88565b600f82019150616ac98284615cec565b915081905092915050565b7f4141333320726576657274656420286f72204f4f472900000000000000000000600082015250565b6000616b0a6016836146aa565b9150616b1582616ad4565b602082019050919050565b6000604082019050616b356000830184614056565b8181036020830152616b4681616afd565b905092915050565b7f414131302073656e64657220616c726561647920636f6e737472756374656400600082015250565b6000616b84601f836146aa565b9150616b8f82616b4e565b602082019050919050565b6000604082019050616baf6000830184614056565b8181036020830152616bc081616b77565b905092915050565b7f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000600082015250565b6000616bfe601b836146aa565b9150616c0982616bc8565b602082019050919050565b6000604082019050616c296000830184614056565b8181036020830152616c3a81616bf1565b905092915050565b7f4141313420696e6974436f6465206d7573742072657475726e2073656e646572600082015250565b6000616c786020836146aa565b9150616c8382616c42565b602082019050919050565b6000604082019050616ca36000830184614056565b8181036020830152616cb481616c6b565b905092915050565b7f4141313520696e6974436f6465206d757374206372656174652073656e646572600082015250565b6000616cf26020836146aa565b9150616cfd82616cbc565b602082019050919050565b6000604082019050616d1d6000830184614056565b8181036020830152616d2e81616ce5565b905092915050565b6000604082019050616d4b600083018561520b565b616d58602083018461520b565b939250505056fea2646970667358221220739877ad142b69ddeea20526284c4607088a678ffde22ba2959a89233ac10f0a64736f6c634300080c0033608060405234801561001057600080fd5b50610342806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a6004803603810190610045919061017b565b610060565b6040516100579190610209565b60405180910390f35b60008083836000906014926100779392919061022e565b9061008291906102ad565b60601c905060008484601490809261009c9392919061022e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000602060008351602085016000875af1905060005193508061010357600093505b50505092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261013b5761013a610116565b5b8235905067ffffffffffffffff8111156101585761015761011b565b5b60208301915083600182028301111561017457610173610120565b5b9250929050565b600080602083850312156101925761019161010c565b5b600083013567ffffffffffffffff8111156101b0576101af610111565b5b6101bc85828601610125565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101f3826101c8565b9050919050565b610203816101e8565b82525050565b600060208201905061021e60008301846101fa565b92915050565b600080fd5b600080fd5b6000808585111561024257610241610224565b5b8386111561025357610252610229565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006102b98383610269565b826102c48135610274565b92506014821015610304576102ff7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026102a0565b831692505b50509291505056fea26469706673582212200778ef27a41453ce7330ffe38d46506a9cf0e8c19e33ee31a060d5426aef630464736f6c634300080c0033"; + +type EntryPointConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EntryPointConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EntryPoint__factory extends ContractFactory { + constructor(...args: EntryPointConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): EntryPoint { + return super.attach(address) as EntryPoint; + } + override connect(signer: Signer): EntryPoint__factory { + return super.connect(signer) as EntryPoint__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EntryPointInterface { + return new utils.Interface(_abi) as EntryPointInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EntryPoint { + return new Contract(address, _abi, signerOrProvider) as EntryPoint; + } +} diff --git a/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts b/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts new file mode 100644 index 00000000..bbb796bc --- /dev/null +++ b/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts @@ -0,0 +1,82 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + SenderCreator, + SenderCreatorInterface, +} from "../../../../src/aa-4337/core/SenderCreator"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + ], + name: "createSender", + outputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610342806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a6004803603810190610045919061017b565b610060565b6040516100579190610209565b60405180910390f35b60008083836000906014926100779392919061022e565b9061008291906102ad565b60601c905060008484601490809261009c9392919061022e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000602060008351602085016000875af1905060005193508061010357600093505b50505092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261013b5761013a610116565b5b8235905067ffffffffffffffff8111156101585761015761011b565b5b60208301915083600182028301111561017457610173610120565b5b9250929050565b600080602083850312156101925761019161010c565b5b600083013567ffffffffffffffff8111156101b0576101af610111565b5b6101bc85828601610125565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101f3826101c8565b9050919050565b610203816101e8565b82525050565b600060208201905061021e60008301846101fa565b92915050565b600080fd5b600080fd5b6000808585111561024257610241610224565b5b8386111561025357610252610229565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006102b98383610269565b826102c48135610274565b92506014821015610304576102ff7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026102a0565b831692505b50509291505056fea26469706673582212200778ef27a41453ce7330ffe38d46506a9cf0e8c19e33ee31a060d5426aef630464736f6c634300080c0033"; + +type SenderCreatorConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SenderCreatorConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SenderCreator__factory extends ContractFactory { + constructor(...args: SenderCreatorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): SenderCreator { + return super.attach(address) as SenderCreator; + } + override connect(signer: Signer): SenderCreator__factory { + return super.connect(signer) as SenderCreator__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SenderCreatorInterface { + return new utils.Interface(_abi) as SenderCreatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SenderCreator { + return new Contract(address, _abi, signerOrProvider) as SenderCreator; + } +} diff --git a/src/contracts/factories/StakeManager__factory.ts b/src/contracts/factories/src/aa-4337/core/StakeManager__factory.ts similarity index 94% rename from src/contracts/factories/StakeManager__factory.ts rename to src/contracts/factories/src/aa-4337/core/StakeManager__factory.ts index d0c3a511..f5feca95 100644 --- a/src/contracts/factories/StakeManager__factory.ts +++ b/src/contracts/factories/src/aa-4337/core/StakeManager__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { StakeManager, StakeManagerInterface } from "../StakeManager"; +import type { Provider } from "@ethersproject/providers"; +import type { + StakeManager, + StakeManagerInterface, +} from "../../../../src/aa-4337/core/StakeManager"; const _abi = [ { @@ -44,7 +47,7 @@ const _abi = [ { indexed: false, internalType: "uint256", - name: "withdrawTime", + name: "unstakeDelaySec", type: "uint256", }, ], @@ -124,7 +127,7 @@ const _abi = [ inputs: [ { internalType: "uint32", - name: "_unstakeDelaySec", + name: "unstakeDelaySec", type: "uint32", }, ], @@ -196,9 +199,9 @@ const _abi = [ type: "uint32", }, { - internalType: "uint64", + internalType: "uint48", name: "withdrawTime", - type: "uint64", + type: "uint48", }, ], stateMutability: "view", @@ -237,9 +240,9 @@ const _abi = [ type: "uint32", }, { - internalType: "uint64", + internalType: "uint48", name: "withdrawTime", - type: "uint64", + type: "uint48", }, ], internalType: "struct IStakeManager.DepositInfo", @@ -292,7 +295,7 @@ const _abi = [ stateMutability: "payable", type: "receive", }, -]; +] as const; export class StakeManager__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/src/aa-4337/core/index.ts b/src/contracts/factories/src/aa-4337/core/index.ts new file mode 100644 index 00000000..28f0a7a2 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/core/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { BaseAccount__factory } from "./BaseAccount__factory"; +export { BasePaymaster__factory } from "./BasePaymaster__factory"; +export { EntryPoint__factory } from "./EntryPoint__factory"; +export { SenderCreator__factory } from "./SenderCreator__factory"; +export { StakeManager__factory } from "./StakeManager__factory"; diff --git a/src/contracts/factories/src/aa-4337/index.ts b/src/contracts/factories/src/aa-4337/index.ts new file mode 100644 index 00000000..c4af0896 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as bls from "./bls"; +export * as core from "./core"; +export * as interfaces from "./interfaces"; +export * as samples from "./samples"; +export * as test from "./test"; diff --git a/src/contracts/factories/IAccount__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts similarity index 90% rename from src/contracts/factories/IAccount__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts index d039c550..15898a7e 100644 --- a/src/contracts/factories/IAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IAccount, IAccountInterface } from "../IAccount"; +import type { Provider } from "@ethersproject/providers"; +import type { + IAccount, + IAccountInterface, +} from "../../../../src/aa-4337/interfaces/IAccount"; const _abi = [ { @@ -76,11 +79,6 @@ const _abi = [ name: "userOpHash", type: "bytes32", }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, { internalType: "uint256", name: "missingAccountFunds", @@ -91,14 +89,14 @@ const _abi = [ outputs: [ { internalType: "uint256", - name: "sigTimeRange", + name: "validationData", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IAccount__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/IAggregatedAccount__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts similarity index 92% rename from src/contracts/factories/IAggregatedAccount__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts index 0ea762b6..e78751e6 100644 --- a/src/contracts/factories/IAggregatedAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts @@ -3,11 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; +import type { Provider } from "@ethersproject/providers"; import type { IAggregatedAccount, IAggregatedAccountInterface, -} from "../IAggregatedAccount"; +} from "../../../../src/aa-4337/interfaces/IAggregatedAccount"; const _abi = [ { @@ -92,11 +92,6 @@ const _abi = [ name: "userOpHash", type: "bytes32", }, - { - internalType: "address", - name: "aggregator", - type: "address", - }, { internalType: "uint256", name: "missingAccountFunds", @@ -107,14 +102,14 @@ const _abi = [ outputs: [ { internalType: "uint256", - name: "sigTimeRange", + name: "validationData", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IAggregatedAccount__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/IAggregator__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts similarity index 96% rename from src/contracts/factories/IAggregator__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts index 934a43d7..4f84728a 100644 --- a/src/contracts/factories/IAggregator__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IAggregator, IAggregatorInterface } from "../IAggregator"; +import type { Provider } from "@ethersproject/providers"; +import type { + IAggregator, + IAggregatorInterface, +} from "../../../../src/aa-4337/interfaces/IAggregator"; const _abi = [ { @@ -76,7 +79,7 @@ const _abi = [ outputs: [ { internalType: "bytes", - name: "aggregatesSignature", + name: "aggregatedSignature", type: "bytes", }, ], @@ -234,7 +237,7 @@ const _abi = [ stateMutability: "view", type: "function", }, -]; +] as const; export class IAggregator__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/ICreate2Deployer__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts similarity index 88% rename from src/contracts/factories/ICreate2Deployer__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts index 5dbb1020..2de97272 100644 --- a/src/contracts/factories/ICreate2Deployer__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts @@ -3,11 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; +import type { Provider } from "@ethersproject/providers"; import type { ICreate2Deployer, ICreate2DeployerInterface, -} from "../ICreate2Deployer"; +} from "../../../../src/aa-4337/interfaces/ICreate2Deployer"; const _abi = [ { @@ -34,7 +34,7 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class ICreate2Deployer__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/IEntryPoint__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts similarity index 95% rename from src/contracts/factories/IEntryPoint__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts index d322be8f..ed733358 100644 --- a/src/contracts/factories/IEntryPoint__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IEntryPoint, IEntryPointInterface } from "../IEntryPoint"; +import type { Provider } from "@ethersproject/providers"; +import type { + IEntryPoint, + IEntryPointInterface, +} from "../../../../src/aa-4337/interfaces/IEntryPoint"; const _abi = [ { @@ -20,14 +23,24 @@ const _abi = [ type: "uint256", }, { - internalType: "uint64", + internalType: "uint48", name: "validAfter", - type: "uint64", + type: "uint48", }, { - internalType: "uint64", - name: "validBefore", - type: "uint64", + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bool", + name: "targetSuccess", + type: "bool", + }, + { + internalType: "bytes", + name: "targetResult", + type: "bytes", }, ], name: "ExecutionResult", @@ -40,11 +53,6 @@ const _abi = [ name: "opIndex", type: "uint256", }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, { internalType: "string", name: "reason", @@ -96,14 +104,14 @@ const _abi = [ type: "bool", }, { - internalType: "uint64", + internalType: "uint48", name: "validAfter", - type: "uint64", + type: "uint48", }, { - internalType: "uint64", + internalType: "uint48", name: "validUntil", - type: "uint64", + type: "uint48", }, { internalType: "bytes", @@ -190,14 +198,14 @@ const _abi = [ type: "bool", }, { - internalType: "uint64", + internalType: "uint48", name: "validAfter", - type: "uint64", + type: "uint48", }, { - internalType: "uint64", + internalType: "uint48", name: "validUntil", - type: "uint64", + type: "uint48", }, { internalType: "bytes", @@ -264,7 +272,7 @@ const _abi = [ components: [ { internalType: "address", - name: "actualAggregator", + name: "aggregator", type: "address", }, { @@ -347,7 +355,7 @@ const _abi = [ anonymous: false, inputs: [ { - indexed: false, + indexed: true, internalType: "address", name: "aggregator", type: "address", @@ -374,7 +382,7 @@ const _abi = [ { indexed: false, internalType: "uint256", - name: "withdrawTime", + name: "unstakeDelaySec", type: "uint256", }, ], @@ -608,9 +616,9 @@ const _abi = [ type: "uint32", }, { - internalType: "uint64", + internalType: "uint48", name: "withdrawTime", - type: "uint64", + type: "uint48", }, ], internalType: "struct IStakeManager.DepositInfo", @@ -941,6 +949,16 @@ const _abi = [ name: "op", type: "tuple", }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "targetCallData", + type: "bytes", + }, ], name: "simulateHandleOp", outputs: [], @@ -1055,7 +1073,7 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IEntryPoint__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/IPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts similarity index 93% rename from src/contracts/factories/IPaymaster__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts index 33bfb3e0..905caf03 100644 --- a/src/contracts/factories/IPaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IPaymaster, IPaymasterInterface } from "../IPaymaster"; +import type { Provider } from "@ethersproject/providers"; +import type { + IPaymaster, + IPaymasterInterface, +} from "../../../../src/aa-4337/interfaces/IPaymaster"; const _abi = [ { @@ -114,14 +117,14 @@ const _abi = [ }, { internalType: "uint256", - name: "sigTimeRange", + name: "validationData", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IPaymaster__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/IStakeManager__factory.ts b/src/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts similarity index 94% rename from src/contracts/factories/IStakeManager__factory.ts rename to src/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts index 1424976b..dbbbd602 100644 --- a/src/contracts/factories/IStakeManager__factory.ts +++ b/src/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts @@ -3,8 +3,11 @@ /* eslint-disable */ import { Contract, Signer, utils } from "ethers"; -import { Provider } from "@ethersproject/providers"; -import type { IStakeManager, IStakeManagerInterface } from "../IStakeManager"; +import type { Provider } from "@ethersproject/providers"; +import type { + IStakeManager, + IStakeManagerInterface, +} from "../../../../src/aa-4337/interfaces/IStakeManager"; const _abi = [ { @@ -44,7 +47,7 @@ const _abi = [ { indexed: false, internalType: "uint256", - name: "withdrawTime", + name: "unstakeDelaySec", type: "uint256", }, ], @@ -198,9 +201,9 @@ const _abi = [ type: "uint32", }, { - internalType: "uint64", + internalType: "uint48", name: "withdrawTime", - type: "uint64", + type: "uint48", }, ], internalType: "struct IStakeManager.DepositInfo", @@ -249,7 +252,7 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, -]; +] as const; export class IStakeManager__factory { static readonly abi = _abi; diff --git a/src/contracts/factories/src/aa-4337/interfaces/index.ts b/src/contracts/factories/src/aa-4337/interfaces/index.ts new file mode 100644 index 00000000..69fca3ca --- /dev/null +++ b/src/contracts/factories/src/aa-4337/interfaces/index.ts @@ -0,0 +1,10 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IAccount__factory } from "./IAccount__factory"; +export { IAggregatedAccount__factory } from "./IAggregatedAccount__factory"; +export { IAggregator__factory } from "./IAggregator__factory"; +export { ICreate2Deployer__factory } from "./ICreate2Deployer__factory"; +export { IEntryPoint__factory } from "./IEntryPoint__factory"; +export { IPaymaster__factory } from "./IPaymaster__factory"; +export { IStakeManager__factory } from "./IStakeManager__factory"; diff --git a/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts new file mode 100644 index 00000000..1b411ee0 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts @@ -0,0 +1,511 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + DepositPaymaster, + DepositPaymasterInterface, +} from "../../../../src/aa-4337/samples/DepositPaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "COST_OF_POST", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "addDepositFor", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "token", + type: "address", + }, + { + internalType: "contract IOracle", + name: "tokenPriceOracle", + type: "address", + }, + ], + name: "addToken", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "balances", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "depositInfo", + outputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "uint256", + name: "_unlockBlock", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "lockTokenDeposit", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "", + type: "address", + }, + ], + name: "oracles", + outputs: [ + { + internalType: "contract IOracle", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "unlockBlock", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockTokenDeposit", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IERC20", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTokensTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b50604051620032fb380380620032fb833981810160405281019062000037919062000234565b80620000586200004c620000a460201b60201c565b620000ac60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200009d6200017060201b60201c565b5062000266565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001e882620001bb565b9050919050565b6000620001fc82620001db565b9050919050565b6200020e81620001ef565b81146200021a57600080fd5b50565b6000815190506200022e8162000203565b92915050565b6000602082840312156200024d576200024c620001b6565b5b60006200025d848285016200021d565b91505092915050565b608051613048620002b3600039600081816104c40152818161055b01528181610ace01528181610afa01528181610b8401528181610c3901528181610eaf01526111af01526130486000f3fe6080604052600436106101355760003560e01c8063addd5099116100ab578063c399ec881161006f578063c399ec88146103de578063cc9c837c14610409578063cd8f80c214610432578063d0e30db014610449578063f2fde38b14610453578063f465c77e1461047c57610135565b8063addd5099146102f9578063b0d691fe14610336578063bb9fe6bf14610361578063c23a5cea14610378578063c23f001f146103a157610135565b80635476bd72116100fd5780635476bd7214610223578063715018a61461024c578063796d4371146102635780638da5cb5b1461028e5780639ed0fb68146102b9578063a9a23409146102d057610135565b80630396cb601461013a578063205c287814610156578063382edd9e1461017f578063493b0170146101a85780634a6f84cf146101e6575b600080fd5b610154600480360381019061014f9190611bc2565b6104ba565b005b34801561016257600080fd5b5061017d60048036038101906101789190611c83565b610551565b005b34801561018b57600080fd5b506101a660048036038101906101a19190611d3f565b6105ea565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190611d92565b6107bb565b6040516101dd929190611de1565b60405180910390f35b3480156101f257600080fd5b5061020d60048036038101906102089190611e0a565b610886565b60405161021a9190611e37565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190611e90565b61089e565b005b34801561025857600080fd5b506102616109f6565b005b34801561026f57600080fd5b50610278610a0a565b6040516102859190611e37565b60405180910390f35b34801561029a57600080fd5b506102a3610a10565b6040516102b09190611edf565b60405180910390f35b3480156102c557600080fd5b506102ce610a39565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190611f84565b610a7f565b005b34801561030557600080fd5b50610320600480360381019061031b9190611ff8565b610a99565b60405161032d9190612084565b60405180910390f35b34801561034257600080fd5b5061034b610acc565b60405161035891906120c0565b60405180910390f35b34801561036d57600080fd5b50610376610af0565b005b34801561038457600080fd5b5061039f600480360381019061039a91906120db565b610b7a565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190611d92565b610c10565b6040516103d59190611e37565b60405180910390f35b3480156103ea57600080fd5b506103f3610c35565b6040516104009190611e37565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190611d3f565b610cd6565b005b34801561043e57600080fd5b50610447610e66565b005b610451610ead565b005b34801561045f57600080fd5b5061047a60048036038101906104759190611e0a565b610f3b565b005b34801561048857600080fd5b506104a3600480360381019061049e9190612163565b610fbf565b6040516104b192919061226b565b60405180910390f35b6104c2610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161051c91906122aa565b6000604051808303818588803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b505050505050565b610559610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016105b49291906122d4565b600060405180830381600087803b1580156105ce57600080fd5b505af11580156105e2573d6000803e3d6000fd5b505050505050565b6106173330838673ffffffffffffffffffffffffffffffffffffffff16611060909392919063ffffffff16565b600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd9061235a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461077291906123a9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156107b6576107b5610e66565b5b505050565b600080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b60036020528060005260406000206000915090505481565b6108a6610fe2565b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b9061244b565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6109fe610fe2565b610a0860006110e9565b565b6188b881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610a876111ad565b610a938484848461123d565b50505050565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610af8610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b6057600080fd5b505af1158015610b74573d6000803e3d6000fd5b50505050565b610b82610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610bdb919061246b565b600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b5050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c909190611edf565b602060405180830381865afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061249b565b905090565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015610d645750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205443115b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a9061253a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2f919061255a565b92505081905550610e6182828573ffffffffffffffffffffffffffffffffffffffff166114289092919063ffffffff16565b505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f079190611edf565b6000604051808303818588803b158015610f2057600080fd5b505af1158015610f34573d6000803e3d6000fd5b5050505050565b610f43610fe2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612600565b60405180910390fd5b610fbc816110e9565b50565b60606000610fcb6111ad565b610fd68585856114ae565b91509150935093915050565b610fea611722565b73ffffffffffffffffffffffffffffffffffffffff16611008610a10565b73ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110559061266c565b60405180910390fd5b565b6110e3846323b872dd60e01b8585856040516024016110819392919061268c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061172a565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061270f565b60405180910390fd5b565b60008060008060008787810190611254919061272f565b9450945094509450945060008183856188b861127091906127aa565b8961127b91906123a9565b61128591906127aa565b61128f9190612833565b90506002808111156112a4576112a3612864565b5b8a60028111156112b7576112b6612864565b5b146112ee576112e98630838873ffffffffffffffffffffffffffffffffffffffff16611060909392919063ffffffff16565b611382565b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461137a919061255a565b925050819055505b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113cc610a10565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141591906123a9565b9250508190555050505050505050505050565b6114a98363a9059cbb60e01b8484604051602401611447929190612893565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061172a565b505050565b606060006188b88560a00135116114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061292e565b60405180910390fd5b3660008680610120019061150e919061295d565b9150915060288282905014611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90612a32565b60405180910390fd5b60008282601490809261156d93929190612a5c565b906115789190612adb565b60601c90506000611588896117f1565b905060006115968389611801565b905060006115a38b611959565b90506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90612bac565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90612c3e565b60405180910390fd5b828482848c6040516020016116ff959493929190612c7f565b604051602081830303815290604052600097509750505050505050935093915050565b600033905090565b600061178c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119959092919063ffffffff16565b90506000815111156117ec57808060200190518101906117ac9190612d0a565b6117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290612da9565b60405180910390fd5b5b505050565b6000808235905080915050919050565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90612e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663d1eca9cf846040518263ffffffff1660e01b815260040161190f9190611e37565b602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611950919061249b565b91505092915050565b6000808260e001359050600083610100013590508082141561197f578192505050611990565b61198b824883016119ad565b925050505b919050565b60606119a484846000856119c6565b90509392505050565b60008183106119bc57816119be565b825b905092915050565b606082471015611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290612ecd565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a349190612f29565b60006040518083038185875af1925050503d8060008114611a71576040519150601f19603f3d011682016040523d82523d6000602084013e611a76565b606091505b5091509150611a8787838387611a93565b92505050949350505050565b60608315611af657600083511415611aee57611aae85611b09565b611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490612f8c565b60405180910390fd5b5b829050611b01565b611b008383611b2c565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115611b3f5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b739190612ff0565b60405180910390fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b611b9f81611b86565b8114611baa57600080fd5b50565b600081359050611bbc81611b96565b92915050565b600060208284031215611bd857611bd7611b7c565b5b6000611be684828501611bad565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c1a82611bef565b9050919050565b611c2a81611c0f565b8114611c3557600080fd5b50565b600081359050611c4781611c21565b92915050565b6000819050919050565b611c6081611c4d565b8114611c6b57600080fd5b50565b600081359050611c7d81611c57565b92915050565b60008060408385031215611c9a57611c99611b7c565b5b6000611ca885828601611c38565b9250506020611cb985828601611c6e565b9150509250929050565b6000611cce82611bef565b9050919050565b6000611ce082611cc3565b9050919050565b611cf081611cd5565b8114611cfb57600080fd5b50565b600081359050611d0d81611ce7565b92915050565b611d1c81611cc3565b8114611d2757600080fd5b50565b600081359050611d3981611d13565b92915050565b600080600060608486031215611d5857611d57611b7c565b5b6000611d6686828701611cfe565b9350506020611d7786828701611d2a565b9250506040611d8886828701611c6e565b9150509250925092565b60008060408385031215611da957611da8611b7c565b5b6000611db785828601611cfe565b9250506020611dc885828601611d2a565b9150509250929050565b611ddb81611c4d565b82525050565b6000604082019050611df66000830185611dd2565b611e036020830184611dd2565b9392505050565b600060208284031215611e2057611e1f611b7c565b5b6000611e2e84828501611d2a565b91505092915050565b6000602082019050611e4c6000830184611dd2565b92915050565b6000611e5d82611cc3565b9050919050565b611e6d81611e52565b8114611e7857600080fd5b50565b600081359050611e8a81611e64565b92915050565b60008060408385031215611ea757611ea6611b7c565b5b6000611eb585828601611cfe565b9250506020611ec685828601611e7b565b9150509250929050565b611ed981611cc3565b82525050565b6000602082019050611ef46000830184611ed0565b92915050565b60038110611f0757600080fd5b50565b600081359050611f1981611efa565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f4457611f43611f1f565b5b8235905067ffffffffffffffff811115611f6157611f60611f24565b5b602083019150836001820283011115611f7d57611f7c611f29565b5b9250929050565b60008060008060608587031215611f9e57611f9d611b7c565b5b6000611fac87828801611f0a565b945050602085013567ffffffffffffffff811115611fcd57611fcc611b81565b5b611fd987828801611f2e565b93509350506040611fec87828801611c6e565b91505092959194509250565b60006020828403121561200e5761200d611b7c565b5b600061201c84828501611cfe565b91505092915050565b6000819050919050565b600061204a61204561204084611bef565b612025565b611bef565b9050919050565b600061205c8261202f565b9050919050565b600061206e82612051565b9050919050565b61207e81612063565b82525050565b60006020820190506120996000830184612075565b92915050565b60006120aa82612051565b9050919050565b6120ba8161209f565b82525050565b60006020820190506120d560008301846120b1565b92915050565b6000602082840312156120f1576120f0611b7c565b5b60006120ff84828501611c38565b91505092915050565b600080fd5b6000610160828403121561212457612123612108565b5b81905092915050565b6000819050919050565b6121408161212d565b811461214b57600080fd5b50565b60008135905061215d81612137565b92915050565b60008060006060848603121561217c5761217b611b7c565b5b600084013567ffffffffffffffff81111561219a57612199611b81565b5b6121a68682870161210d565b93505060206121b78682870161214e565b92505060406121c886828701611c6e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561220c5780820151818401526020810190506121f1565b8381111561221b576000848401525b50505050565b6000601f19601f8301169050919050565b600061223d826121d2565b61224781856121dd565b93506122578185602086016121ee565b61226081612221565b840191505092915050565b600060408201905081810360008301526122858185612232565b90506122946020830184611dd2565b9392505050565b6122a481611b86565b82525050565b60006020820190506122bf600083018461229b565b92915050565b6122ce81611c0f565b82525050565b60006040820190506122e960008301856122c5565b6122f66020830184611dd2565b9392505050565b600082825260208201905092915050565b7f756e737570706f7274656420746f6b656e000000000000000000000000000000600082015250565b60006123446011836122fd565b915061234f8261230e565b602082019050919050565b6000602082019050818103600083015261237381612337565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123b482611c4d565b91506123bf83611c4d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123f4576123f361237a565b5b828201905092915050565b7f546f6b656e20616c726561647920736574000000000000000000000000000000600082015250565b60006124356011836122fd565b9150612440826123ff565b602082019050919050565b6000602082019050818103600083015261246481612428565b9050919050565b600060208201905061248060008301846122c5565b92915050565b60008151905061249581611c57565b92915050565b6000602082840312156124b1576124b0611b7c565b5b60006124bf84828501612486565b91505092915050565b7f4465706f7369745061796d61737465723a206d75737420756e6c6f636b546f6b60008201527f656e4465706f7369740000000000000000000000000000000000000000000000602082015250565b60006125246029836122fd565b915061252f826124c8565b604082019050919050565b6000602082019050818103600083015261255381612517565b9050919050565b600061256582611c4d565b915061257083611c4d565b9250828210156125835761258261237a565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125ea6026836122fd565b91506125f58261258e565b604082019050919050565b60006020820190508181036000830152612619816125dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126566020836122fd565b915061266182612620565b602082019050919050565b6000602082019050818103600083015261268581612649565b9050919050565b60006060820190506126a16000830186611ed0565b6126ae6020830185611ed0565b6126bb6040830184611dd2565b949350505050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b60006126f96015836122fd565b9150612704826126c3565b602082019050919050565b60006020820190508181036000830152612728816126ec565b9050919050565b600080600080600060a0868803121561274b5761274a611b7c565b5b600061275988828901611c38565b955050602061276a88828901611cfe565b945050604061277b88828901611c6e565b935050606061278c88828901611c6e565b925050608061279d88828901611c6e565b9150509295509295909350565b60006127b582611c4d565b91506127c083611c4d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127f9576127f861237a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061283e82611c4d565b915061284983611c4d565b92508261285957612858612804565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006040820190506128a86000830185611ed0565b6128b56020830184611dd2565b9392505050565b7f4465706f7369745061796d61737465723a2067617320746f6f206c6f7720666f60008201527f7220706f73744f70000000000000000000000000000000000000000000000000602082015250565b60006129186028836122fd565b9150612923826128bc565b604082019050919050565b600060208201905081810360008301526129478161290b565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261297a5761297961294e565b5b80840192508235915067ffffffffffffffff82111561299c5761299b612953565b5b6020830192506001820236038313156129b8576129b7612958565b5b509250929050565b7f4465706f7369745061796d61737465723a207061796d6173746572416e64446160008201527f7461206d757374207370656369667920746f6b656e0000000000000000000000602082015250565b6000612a1c6035836122fd565b9150612a27826129c0565b604082019050919050565b60006020820190508181036000830152612a4b81612a0f565b9050919050565b600080fd5b600080fd5b60008085851115612a7057612a6f612a52565b5b83861115612a8157612a80612a57565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000612ae78383612a97565b82612af28135612aa2565b92506014821015612b3257612b2d7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802612ace565b831692505b505092915050565b7f4465706f7369745061796d61737465723a206465706f736974206e6f74206c6f60008201527f636b656400000000000000000000000000000000000000000000000000000000602082015250565b6000612b966024836122fd565b9150612ba182612b3a565b604082019050919050565b60006020820190508181036000830152612bc581612b89565b9050919050565b7f4465706f7369745061796d61737465723a206465706f73697420746f6f206c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c286021836122fd565b9150612c3382612bcc565b604082019050919050565b60006020820190508181036000830152612c5781612c1b565b9050919050565b6000612c6982612051565b9050919050565b612c7981612c5e565b82525050565b600060a082019050612c946000830188611ed0565b612ca16020830187612c70565b612cae6040830186611dd2565b612cbb6060830185611dd2565b612cc86080830184611dd2565b9695505050505050565b60008115159050919050565b612ce781612cd2565b8114612cf257600080fd5b50565b600081519050612d0481612cde565b92915050565b600060208284031215612d2057612d1f611b7c565b5b6000612d2e84828501612cf5565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612d93602a836122fd565b9150612d9e82612d37565b604082019050919050565b60006020820190508181036000830152612dc281612d86565b9050919050565b7f4465706f7369745061796d61737465723a20756e737570706f7274656420746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b6000612e256023836122fd565b9150612e3082612dc9565b604082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612eb76026836122fd565b9150612ec282612e5b565b604082019050919050565b60006020820190508181036000830152612ee681612eaa565b9050919050565b600081905092915050565b6000612f03826121d2565b612f0d8185612eed565b9350612f1d8185602086016121ee565b80840191505092915050565b6000612f358284612ef8565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f76601d836122fd565b9150612f8182612f40565b602082019050919050565b60006020820190508181036000830152612fa581612f69565b9050919050565b600081519050919050565b6000612fc282612fac565b612fcc81856122fd565b9350612fdc8185602086016121ee565b612fe581612221565b840191505092915050565b6000602082019050818103600083015261300a8184612fb7565b90509291505056fea2646970667358221220564f46e54864f353c5e54067b622e2e40ac076e8611079341ed0f61970e61f1064736f6c634300080c0033"; + +type DepositPaymasterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: DepositPaymasterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class DepositPaymaster__factory extends ContractFactory { + constructor(...args: DepositPaymasterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): DepositPaymaster { + return super.attach(address) as DepositPaymaster; + } + override connect(signer: Signer): DepositPaymaster__factory { + return super.connect(signer) as DepositPaymaster__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): DepositPaymasterInterface { + return new utils.Interface(_abi) as DepositPaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): DepositPaymaster { + return new Contract(address, _abi, signerOrProvider) as DepositPaymaster; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts b/src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts new file mode 100644 index 00000000..a5df50e9 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts @@ -0,0 +1,45 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IOracle, + IOracleInterface, +} from "../../../../src/aa-4337/samples/IOracle"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "ethOutput", + type: "uint256", + }, + ], + name: "getTokenValueOfEth", + outputs: [ + { + internalType: "uint256", + name: "tokenInput", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IOracle__factory { + static readonly abi = _abi; + static createInterface(): IOracleInterface { + return new utils.Interface(_abi) as IOracleInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IOracle { + return new Contract(address, _abi, signerOrProvider) as IOracle; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts new file mode 100644 index 00000000..87ff9116 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts @@ -0,0 +1,144 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + SimpleAccountFactory, + SimpleAccountFactoryInterface, +} from "../../../../src/aa-4337/samples/SimpleAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract SimpleAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract SimpleAccount", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b5060405162004ffc38038062004ffc833981810160405281019062000037919062000171565b62000053672226ac95ea43c36560c01b620000e260201b60201c565b6200006f67775c95abe0aa979860c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a91906200020e565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200022b565b50565b613984806200167883390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b6000620001398262000118565b9050919050565b6200014b816200012c565b81146200015757600080fd5b50565b6000815190506200016b8162000140565b92915050565b6000602082840312156200018a5762000189620000f3565b5b60006200019a848285016200015a565b91505092915050565b6000819050919050565b6000620001ce620001c8620001c284620000f8565b620001a3565b620000f8565b9050919050565b6000620001e282620001ad565b9050919050565b6000620001f682620001d5565b9050919050565b6200020881620001e9565b82525050565b6000602082019050620002256000830184620001fd565b92915050565b608051611424620002546000396000818160db0152818161024e015261038101526114246000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b5780635fbfb9cf146200006d5780638cb84e1814620000a3575b600080fd5b62000055620000d9565b6040516200006491906200052f565b60405180910390f35b6200008b6004803603810190620000859190620005d1565b620000fd565b6040516200009a91906200052f565b60405180910390f35b620000c16004803603810190620000bb9190620005d1565b6200030d565b604051620000d0919062000629565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b600062000115679ac70da3cd845a3a60c01b62000451565b6200012b6799c81b097f1b305060c01b62000451565b6200014167bdbf56b66e54104960c01b62000451565b60006200014f84846200030d565b90506200016767f3741095896b688260c01b62000451565b6200017d67356179bea4e18d2560c01b62000451565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620001af672cf9d329540526ec60c01b62000451565b620001c567494517e2742e736660c01b62000451565b60008111156200021c57620001e567c4de6ebc1cb7368360c01b62000451565b620001fb67b4d46d777bd8024860c01b62000451565b6200021167cca68a1361cfc4d560c01b62000451565b819250505062000307565b6200023267a8529df9d9ec3a5060c01b62000451565b620002486787774aba857aa68760c01b62000451565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008660405160240162000280919062000629565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002d39062000496565b620002e0929190620006ea565b8190604051809103906000f590508015801562000301573d6000803e3d6000fd5b50925050505b92915050565b60006200032567a29ce20595e5508260c01b62000451565b6200033b67ece81d43d2cf706760c01b62000451565b6200035167bc40628dbdea6b3160c01b62000451565b620004498260001b604051806020016200036b9062000496565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000086604051602401620003b3919062000629565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516020016200040b929190620006ea565b6040516020818303038152906040526040516020016200042d92919062000760565b6040516020818303038152906040528051906020012062000454565b905092915050565b50565b6000620004638383306200046b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200078983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004ef620004e9620004e384620004a4565b620004c4565b620004a4565b9050919050565b60006200050382620004ce565b9050919050565b60006200051782620004f6565b9050919050565b62000529816200050a565b82525050565b60006020820190506200054660008301846200051e565b92915050565b600080fd5b60006200055e82620004a4565b9050919050565b620005708162000551565b81146200057c57600080fd5b50565b600081359050620005908162000565565b92915050565b6000819050919050565b620005ab8162000596565b8114620005b757600080fd5b50565b600081359050620005cb81620005a0565b92915050565b60008060408385031215620005eb57620005ea6200054c565b5b6000620005fb858286016200057f565b92505060206200060e85828601620005ba565b9150509250929050565b620006238162000551565b82525050565b600060208201905062000640600083018462000618565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200068257808201518184015260208101905062000665565b8381111562000692576000848401525b50505050565b6000601f19601f8301169050919050565b6000620006b68262000646565b620006c2818562000651565b9350620006d481856020860162000662565b620006df8162000698565b840191505092915050565b600060408201905062000701600083018562000618565b8181036020830152620007158184620006a9565b90509392505050565b600081905092915050565b6000620007368262000646565b6200074281856200071e565b93506200075481856020860162000662565b80840191505092915050565b60006200076e828562000729565b91506200077c828462000729565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205c8cd8a78006d2a61c090240e2d04d15726cfcc807c0df3d4f6af8560c4ae08764736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209603e16951cfd497c395837fa957ae1a8da09f5ed9500f76038a12245e5cb98964736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039843803806200398483398181016040528101906200006a91906200026d565b6200008667e236899807012fad60c01b6200012560201b60201c565b620000a2670e5c6885a269e25060c01b6200012560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620000f26721442c76cf437bc460c01b6200012560201b60201c565b6200010e67575c2a8a70ee263c60c01b6200012560201b60201c565b6200011e6200012860201b60201c565b5062000383565b50565b600060019054906101000a900460ff16156200017b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001729062000326565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001e4919062000366565b60405180910390a15b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022182620001f4565b9050919050565b6000620002358262000214565b9050919050565b620002478162000228565b81146200025357600080fd5b50565b60008151905062000267816200023c565b92915050565b600060208284031215620002865762000285620001ef565b5b6000620002968482850162000256565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200030e6027836200029f565b91506200031b82620002b0565b604082019050919050565b600060208201905081810360008301526200034181620002ff565b9050919050565b600060ff82169050919050565b620003608162000348565b82525050565b60006020820190506200037d600083018462000355565b92915050565b60805160a0516135b8620003cc60003960008181610c3c0152611b7a0152600081816104c9015281816105580152818161097601528181610a050152610ab501526135b86000f3fe6080604052600436106100c65760003560e01c806352d1902d1161007f578063b0d691fe11610059578063b0d691fe14610231578063b61d27f61461025c578063c399ec8814610285578063c4d66de8146102b0576100cd565b806352d1902d146101b05780638da5cb5b146101db578063affed0e014610206576100cd565b806318dfb3c7146100d25780633659cfe6146100fb5780633a871cdd146101245780634a58db19146101615780634d44560d1461016b5780634f1ef28614610194576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100f960048036038101906100f49190612273565b6102d9565b005b34801561010757600080fd5b50610122600480360381019061011d9190612352565b6104c7565b005b34801561013057600080fd5b5061014b60048036038101906101469190612410565b610650565b604051610158919061248e565b60405180910390f35b61016961078f565b005b34801561017757600080fd5b50610192600480360381019061018d91906124e7565b610840565b005b6101ae60048036038101906101a99190612668565b610974565b005b3480156101bc57600080fd5b506101c5610ab1565b6040516101d291906126d3565b60405180910390f35b3480156101e757600080fd5b506101f0610b6a565b6040516101fd91906126fd565b60405180910390f35b34801561021257600080fd5b5061021b610b90565b604051610228919061248e565b60405180910390f35b34801561023d57600080fd5b50610246610bfc565b6040516102539190612777565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906127e8565b610c60565b005b34801561029157600080fd5b5061029a610d21565b6040516102a7919061248e565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190612352565b610de5565b005b6102ed67546848a3c5b3f73860c01b610f89565b6103016753efada159d4cd4560c01b610f89565b6103156734079e686a9cb03560c01b610f89565b61031d610f8c565b6103316732e2f8ab2cb49ff060c01b610f89565b61034567d8fde5a555ab20b260c01b610f89565b610359671322da22e1ab1e1160c01b610f89565b8181905084849050146103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610398906128b9565b60405180910390fd5b6103b567fb2fe48ef707ad7160c01b610f89565b6103c967c8d0b2db45874f8060c01b610f89565b6103dd67ac5214eaf6dd9bbd60c01b610f89565b60005b848490508110156104c0576103ff67c7feee239b47870b60c01b610f89565b61041367ef867efcae378f5c60c01b610f89565b6104ad858583818110610429576104286128d9565b5b905060200201602081019061043e9190612352565b6000858585818110610453576104526128d9565b5b90506020028101906104659190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b80806104b8906129a9565b9150506103e0565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661059561121b565b73ffffffffffffffffffffffffffffffffffffffff16146105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e290612af6565b60405180910390fd5b6105f481611272565b61064d81600067ffffffffffffffff8111156106135761061261253d565b5b6040519080825280601f01601f1916602001820160405280156106455781602001600182028036833780820191505090505b5060006112cd565b50565b600061066667cc5c47196db5bd6160c01b61143b565b61067a678b55e749b3c352ab60c01b61143b565b61068e67e6442311764077fa60c01b61143b565b61069661143e565b6106aa671589e0478f7a186060c01b61143b565b6106b48484611519565b90506106ca67d37e8b3807985e7360c01b61143b565b6106de67c2c62d2bb50a980360c01b61143b565b60008480604001906106f09190612917565b905014156107425761070c6714643eaa19656f6660c01b61143b565b61072067cc382f158ab6697a60c01b61143b565b610734674eed3335c27922c660c01b61143b565b61073d846116d4565b610757565b610756672064a1156b0a7c3160c01b61143b565b5b61076b67f68d6061ffc7c0c960c01b61143b565b61077f67bcbc4a08bf13f3b260c01b61143b565b610788826117e6565b9392505050565b6107a367f09d2eb586b30e3160c01b610f89565b6107b767adcd03aa01933f5d60c01b610f89565b6107cb671b7af626582ba27260c01b610f89565b6107d3610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b815260040161080c91906126fd565b6000604051808303818588803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b5050505050565b61085467a4b8b212eba4763360c01b610f89565b61086867c1a85f365e95d34d60c01b610f89565b61087c6790b5229d734a941c60c01b610f89565b61089067ac3f074a4efdca6b60c01b610f89565b610898611927565b6108ac6798f9934e6ef7cbdb60c01b610f89565b6108c067e105cf1835a3cbf760c01b610f89565b6108d467f6d867ceaa041b4d60c01b610f89565b6108e867f4c16aa93970ab1860c01b610f89565b6108fc6799f0d47c2e8fc45e60c01b610f89565b610904610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161093e929190612b25565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a4261121b565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612af6565b60405180910390fd5b610aa182611272565b610aad828260016112cd565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612bc0565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ba6671081c828c013517c60c01b610f89565b610bba67ff98dad8cadf3d9a60c01b610f89565b610bce675e20c6fc536cd58060c01b610f89565b600160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000610c12673dcfe60a9f5f5da860c01b610f89565b610c26678331e2da03262f5460c01b610f89565b610c3a67d782c2e8006a9a4960c01b610f89565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b610c7467b73e6846f32599a860c01b610f89565b610c886723bab6b7c9557bb260c01b610f89565b610c9c67c978b9390b92acfa60c01b610f89565b610ca4610f8c565b610cb86758c04d70e2c0fe0760c01b610f89565b610ccc6758a54e8acfb0b3f060c01b610f89565b610d1b848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b50505050565b6000610d37673fefbc09e2d65fcc60c01b610f89565b610d4b674ac24fed240dae7f60c01b610f89565b610d5f675ac9d6ff41bf388b60c01b610f89565b610d67610bfc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d9f91906126fd565b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de09190612bf5565b905090565b610df967089085103b5d40c760c01b610f89565b60008060019054906101000a900460ff16159050808015610e2a5750600160008054906101000a900460ff1660ff16105b80610e575750610e3930611a8b565b158015610e565750600160008054906101000a900460ff1660ff16145b5b610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612c94565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ed3576001600060016101000a81548160ff0219169083151502179055505b610ee7674e573be3273a425960c01b610f89565b610efb67b04e9ca74a1dc70f60c01b610f89565b610f0f67a41c241defa654ec60c01b610f89565b610f2367722539ebdccfc8b960c01b610f89565b610f2c82611aae565b8015610f855760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f7c9190612cfc565b60405180910390a15b5050565b50565b610fa067bfd421e6631a158760c01b610f89565b610fb467845ea3fb25be09b260c01b610f89565b610fc867dae3f2bf40dea43060c01b610f89565b610fdc67a3421c0f70c6c2ad60c01b610f89565b610fe4610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561102e575061102d67d4e2eb5ba6c238d260c01b611bde565b5b806110a257506001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156110a157506110a0673131787c58fb0cdb60c01b611bde565b5b5b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612d63565b60405180910390fd5b6110f5671069db5f496dbd0660c01b610f89565b565b61110b67263035bb37aa06d160c01b610f89565b61111f674da9f9d954c1951760c01b610f89565b61113367640cbd2d5dc7c75e60c01b610f89565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161115c9190612dfd565b60006040518083038185875af1925050503d8060008114611199576040519150601f19603f3d011682016040523d82523d6000602084013e61119e565b606091505b50915091506111b7674b631257e68216eb60c01b610f89565b6111cb6783ebeb59e2f34cca60c01b610f89565b81611200576111e46759f30e531f9ea25f60c01b610f89565b6111f8674692c14c59360cde60c01b610f89565b805160208201fd5b6112146766b3697559da2bf460c01b610f89565b5050505050565b60006112497f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112866751144b62438d57cf60c01b610f89565b61129a670ac2cb6355a53b8d60c01b610f89565b6112ae67ed2e3f300a9c276860c01b610f89565b6112c267095aa869c694ffe960c01b610f89565b6112ca611927565b50565b6112f97f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611bf3565b60000160009054906101000a900460ff161561131d5761131883611bfd565b611436565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561138557506040513d601f19601f820116820180604052508101906113829190612e29565b60015b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ec8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612f5a565b60405180910390fd5b50611435838383611cb6565b5b505050565b50565b61145267ab1249ee5f609c5960c01b61143b565b61146667e9d28ffc5217f49460c01b61143b565b61147a677f62f43d3fcc921960c01b61143b565b61148e67b585e78c9c1baca960c01b61143b565b611496610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612fec565b60405180910390fd5b611517671deaffe1e91532d360c01b61143b565b565b600061152f6720ac98e939de350760c01b610f89565b611543672ae6921274c7893b60c01b610f89565b6115576792d083c11849074160c01b610f89565b600061156283611ce2565b905061157867b4d983dfa8310faf60c01b610f89565b61158c67dd9daa918030a7df60c01b610f89565b6115f2848061014001906115a09190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d1290919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5761165a674c82ebdca0fc26e860c01b610f89565b61166e675c163536e5ff386260c01b610f89565b611682670568bc5424c23ea860c01b610f89565b60019150506116ce565b6116a06764fd947bcf85ae9a60c01b610f89565b6116b467ec16d317d6d40e3760c01b610f89565b6116c86732d44e11cf5a804660c01b610f89565b60009150505b92915050565b6116e8678566f17aeb82b25660c01b610f89565b6116fc67d9f70333b53965e960c01b610f89565b61171067236d25bd80d0bc0f60c01b610f89565b611724670754a3f296541a8260c01b610f89565b80602001356001600081819054906101000a90046bffffffffffffffffffffffff168092919061175390613024565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906130a5565b60405180910390fd5b6117e36727f3136213cd9d6d60c01b610f89565b50565b6117fa67ca47e48c745f218060c01b61143b565b61180e67aa4dcb26a8800d8160c01b61143b565b61182267583cd7cbacafaf0f60c01b61143b565b6000811461190f5761183e6725200ee2f571393960c01b61143b565b61185267687ed2003b3b530260c01b61143b565b61186667f40eed13435d849860c01b61143b565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118ae906130eb565b600060405180830381858888f193505050503d80600081146118ec576040519150601f19603f3d011682016040523d82523d6000602084013e6118f1565b606091505b5050905061190967ca15a910c2f1fd6f60c01b61143b565b50611924565b61192367e4cf72238c35b10360c01b61143b565b5b50565b61193b670c0c800354d9600160c01b610f89565b61194f67acd6c58705f889b960c01b610f89565b6119636733d2f0ed41d5acdf60c01b610f89565b611977678ad299c73bae7f0660c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156119e457506119e367c90b615b2a8e569c60c01b611bde565b5b80611a3657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611a355750611a3467237645d75bc6b30460c01b611bde565b5b5b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061314c565b60405180910390fd5b611a8967e6e48ef418f50e1c60c01b610f89565b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611ac2675e194caffffc89c960c01b610f89565b611ad667dc82b8d1a8907c3160c01b610f89565b806001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2b671b44aec3248ff5c460c01b610f89565b611b3f67b4aaa1288b890b5b60c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de60405160405180910390a350565b600060019050919050565b6000819050919050565b6000819050919050565b611c0681611a8b565b611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906131de565b60405180910390fd5b80611c727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cbf83611d39565b600082511180611ccc5750805b15611cdd57611cdb8383611d88565b505b505050565b600081604051602001611cf59190613276565b604051602081830303815290604052805190602001209050919050565b6000806000611d218585611db5565b91509150611d2e81611e07565b819250505092915050565b611d4281611bfd565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611dad838360405180606001604052806027815260200161355c60279139611f75565b905092915050565b600080604183511415611df75760008060006020860151925060408601519150606086015160001a9050611deb87828585611ffb565b94509450505050611e00565b60006002915091505b9250929050565b60006004811115611e1b57611e1a61329c565b5b816004811115611e2e57611e2d61329c565b5b1415611e3957611f72565b60016004811115611e4d57611e4c61329c565b5b816004811115611e6057611e5f61329c565b5b1415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613317565b60405180910390fd5b60026004811115611eb557611eb461329c565b5b816004811115611ec857611ec761329c565b5b1415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613383565b60405180910390fd5b60036004811115611f1d57611f1c61329c565b5b816004811115611f3057611f2f61329c565b5b1415611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613415565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f9f9190612dfd565b600060405180830381855af49150503d8060008114611fda576040519150601f19603f3d011682016040523d82523d6000602084013e611fdf565b606091505b5091509150611ff0868383876120de565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156120365760006003915091506120d5565b60006001878787876040516000815260200160405260405161205b9493929190613444565b6020604051602081039080840390855afa15801561207d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cc576000600192509250506120d5565b80600092509250505b94509492505050565b6060831561214157600083511415612139576120f985611a8b565b612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906134d5565b60405180910390fd5b5b82905061214c565b61214b8383612154565b5b949350505050565b6000825111156121675781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b9190613539565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126121dd576121dc6121b8565b5b8235905067ffffffffffffffff8111156121fa576121f96121bd565b5b602083019150836020820283011115612216576122156121c2565b5b9250929050565b60008083601f840112612233576122326121b8565b5b8235905067ffffffffffffffff8111156122505761224f6121bd565b5b60208301915083602082028301111561226c5761226b6121c2565b5b9250929050565b6000806000806040858703121561228d5761228c6121ae565b5b600085013567ffffffffffffffff8111156122ab576122aa6121b3565b5b6122b7878288016121c7565b9450945050602085013567ffffffffffffffff8111156122da576122d96121b3565b5b6122e68782880161221d565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231f826122f4565b9050919050565b61232f81612314565b811461233a57600080fd5b50565b60008135905061234c81612326565b92915050565b600060208284031215612368576123676121ae565b5b60006123768482850161233d565b91505092915050565b600080fd5b6000610160828403121561239b5761239a61237f565b5b81905092915050565b6000819050919050565b6123b7816123a4565b81146123c257600080fd5b50565b6000813590506123d4816123ae565b92915050565b6000819050919050565b6123ed816123da565b81146123f857600080fd5b50565b60008135905061240a816123e4565b92915050565b600080600060608486031215612429576124286121ae565b5b600084013567ffffffffffffffff811115612447576124466121b3565b5b61245386828701612384565b9350506020612464868287016123c5565b9250506040612475868287016123fb565b9150509250925092565b612488816123da565b82525050565b60006020820190506124a3600083018461247f565b92915050565b60006124b4826122f4565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b600080604083850312156124fe576124fd6121ae565b5b600061250c858286016124d2565b925050602061251d858286016123fb565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125758261252c565b810181811067ffffffffffffffff821117156125945761259361253d565b5b80604052505050565b60006125a76121a4565b90506125b3828261256c565b919050565b600067ffffffffffffffff8211156125d3576125d261253d565b5b6125dc8261252c565b9050602081019050919050565b82818337600083830152505050565b600061260b612606846125b8565b61259d565b90508281526020810184848401111561262757612626612527565b5b6126328482856125e9565b509392505050565b600082601f83011261264f5761264e6121b8565b5b813561265f8482602086016125f8565b91505092915050565b6000806040838503121561267f5761267e6121ae565b5b600061268d8582860161233d565b925050602083013567ffffffffffffffff8111156126ae576126ad6121b3565b5b6126ba8582860161263a565b9150509250929050565b6126cd816123a4565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6126f781612314565b82525050565b600060208201905061271260008301846126ee565b92915050565b6000819050919050565b600061273d612738612733846122f4565b612718565b6122f4565b9050919050565b600061274f82612722565b9050919050565b600061276182612744565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b60008083601f8401126127a8576127a76121b8565b5b8235905067ffffffffffffffff8111156127c5576127c46121bd565b5b6020830191508360018202830111156127e1576127e06121c2565b5b9250929050565b60008060008060608587031215612802576128016121ae565b5b60006128108782880161233d565b9450506020612821878288016123fb565b935050604085013567ffffffffffffffff811115612842576128416121b3565b5b61284e87828801612792565b925092505092959194509250565b600082825260208201905092915050565b7f77726f6e67206172726179206c656e6774687300000000000000000000000000600082015250565b60006128a360138361285c565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261293457612933612908565b5b80840192508235915067ffffffffffffffff8211156129565761295561290d565b5b60208301925060018202360383131561297257612971612912565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b4826123da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129e7576129e661297a565b5b600182019050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612a4e602c8361285c565b9150612a59826129f2565b604082019050919050565b60006020820190508181036000830152612a7d81612a41565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ae0602c8361285c565b9150612aeb82612a84565b604082019050919050565b60006020820190508181036000830152612b0f81612ad3565b9050919050565b612b1f816124a9565b82525050565b6000604082019050612b3a6000830185612b16565b612b47602083018461247f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612baa60388361285c565b9150612bb582612b4e565b604082019050919050565b60006020820190508181036000830152612bd981612b9d565b9050919050565b600081519050612bef816123e4565b92915050565b600060208284031215612c0b57612c0a6121ae565b5b6000612c1984828501612be0565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612c7e602e8361285c565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612ce6612ce1612cdc84612cb4565b612718565b612cbe565b9050919050565b612cf681612ccb565b82525050565b6000602082019050612d116000830184612ced565b92915050565b7f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74600082015250565b6000612d4d60208361285c565b9150612d5882612d17565b602082019050919050565b60006020820190508181036000830152612d7c81612d40565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612db7578082015181840152602081019050612d9c565b83811115612dc6576000848401525b50505050565b6000612dd782612d83565b612de18185612d8e565b9350612df1818560208601612d99565b80840191505092915050565b6000612e098284612dcc565b915081905092915050565b600081519050612e23816123ae565b92915050565b600060208284031215612e3f57612e3e6121ae565b5b6000612e4d84828501612e14565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612eb2602e8361285c565b9150612ebd82612e56565b604082019050919050565b60006020820190508181036000830152612ee181612ea5565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612f4460298361285c565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612fd660248361285c565b9150612fe182612f7a565b604082019050919050565b6000602082019050818103600083015261300581612fc9565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061302f8261300c565b91506bffffffffffffffffffffffff82141561304e5761304d61297a565b5b600182019050919050565b7f6163636f756e743a20696e76616c6964206e6f6e636500000000000000000000600082015250565b600061308f60168361285c565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b50565b60006130d5600083612d8e565b91506130e0826130c5565b600082019050919050565b60006130f6826130c8565b9150819050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613136600a8361285c565b915061314182613100565b602082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006131c8602d8361285c565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061323f601c836131fe565b915061324a82613209565b601c82019050919050565b6000819050919050565b61327061326b826123a4565b613255565b82525050565b600061328182613232565b915061328d828461325f565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061330160188361285c565b915061330c826132cb565b602082019050919050565b60006020820190508181036000830152613330816132f4565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061336d601f8361285c565b915061337882613337565b602082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ff60228361285c565b915061340a826133a3565b604082019050919050565b6000602082019050818103600083015261342e816133f2565b9050919050565b61343e81612cbe565b82525050565b600060808201905061345960008301876126c4565b6134666020830186613435565b61347360408301856126c4565b61348060608301846126c4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006134bf601d8361285c565b91506134ca82613489565b602082019050919050565b600060208201905081810360008301526134ee816134b2565b9050919050565b600081519050919050565b600061350b826134f5565b613515818561285c565b9350613525818560208601612d99565b61352e8161252c565b840191505092915050565b600060208201905081810360008301526135538184613500565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d15b7d1346a3528350a214376c0ce8c50b5131822417d37282d9db07d885ede364736f6c634300080c0033"; + +type SimpleAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SimpleAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SimpleAccountFactory__factory extends ContractFactory { + constructor(...args: SimpleAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): SimpleAccountFactory { + return super.attach(address) as SimpleAccountFactory; + } + override connect(signer: Signer): SimpleAccountFactory__factory { + return super.connect(signer) as SimpleAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SimpleAccountFactoryInterface { + return new utils.Interface(_abi) as SimpleAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SimpleAccountFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as SimpleAccountFactory; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts b/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts new file mode 100644 index 00000000..90a15f54 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts @@ -0,0 +1,421 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + SimpleAccount, + SimpleAccountInterface, +} from "../../../../src/aa-4337/samples/SimpleAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "SimpleAccountInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039843803806200398483398181016040528101906200006a91906200026d565b6200008667e236899807012fad60c01b6200012560201b60201c565b620000a2670e5c6885a269e25060c01b6200012560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620000f26721442c76cf437bc460c01b6200012560201b60201c565b6200010e67575c2a8a70ee263c60c01b6200012560201b60201c565b6200011e6200012860201b60201c565b5062000383565b50565b600060019054906101000a900460ff16156200017b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001729062000326565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001e4919062000366565b60405180910390a15b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022182620001f4565b9050919050565b6000620002358262000214565b9050919050565b620002478162000228565b81146200025357600080fd5b50565b60008151905062000267816200023c565b92915050565b600060208284031215620002865762000285620001ef565b5b6000620002968482850162000256565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200030e6027836200029f565b91506200031b82620002b0565b604082019050919050565b600060208201905081810360008301526200034181620002ff565b9050919050565b600060ff82169050919050565b620003608162000348565b82525050565b60006020820190506200037d600083018462000355565b92915050565b60805160a0516135b8620003cc60003960008181610c3c0152611b7a0152600081816104c9015281816105580152818161097601528181610a050152610ab501526135b86000f3fe6080604052600436106100c65760003560e01c806352d1902d1161007f578063b0d691fe11610059578063b0d691fe14610231578063b61d27f61461025c578063c399ec8814610285578063c4d66de8146102b0576100cd565b806352d1902d146101b05780638da5cb5b146101db578063affed0e014610206576100cd565b806318dfb3c7146100d25780633659cfe6146100fb5780633a871cdd146101245780634a58db19146101615780634d44560d1461016b5780634f1ef28614610194576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100f960048036038101906100f49190612273565b6102d9565b005b34801561010757600080fd5b50610122600480360381019061011d9190612352565b6104c7565b005b34801561013057600080fd5b5061014b60048036038101906101469190612410565b610650565b604051610158919061248e565b60405180910390f35b61016961078f565b005b34801561017757600080fd5b50610192600480360381019061018d91906124e7565b610840565b005b6101ae60048036038101906101a99190612668565b610974565b005b3480156101bc57600080fd5b506101c5610ab1565b6040516101d291906126d3565b60405180910390f35b3480156101e757600080fd5b506101f0610b6a565b6040516101fd91906126fd565b60405180910390f35b34801561021257600080fd5b5061021b610b90565b604051610228919061248e565b60405180910390f35b34801561023d57600080fd5b50610246610bfc565b6040516102539190612777565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906127e8565b610c60565b005b34801561029157600080fd5b5061029a610d21565b6040516102a7919061248e565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190612352565b610de5565b005b6102ed67546848a3c5b3f73860c01b610f89565b6103016753efada159d4cd4560c01b610f89565b6103156734079e686a9cb03560c01b610f89565b61031d610f8c565b6103316732e2f8ab2cb49ff060c01b610f89565b61034567d8fde5a555ab20b260c01b610f89565b610359671322da22e1ab1e1160c01b610f89565b8181905084849050146103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610398906128b9565b60405180910390fd5b6103b567fb2fe48ef707ad7160c01b610f89565b6103c967c8d0b2db45874f8060c01b610f89565b6103dd67ac5214eaf6dd9bbd60c01b610f89565b60005b848490508110156104c0576103ff67c7feee239b47870b60c01b610f89565b61041367ef867efcae378f5c60c01b610f89565b6104ad858583818110610429576104286128d9565b5b905060200201602081019061043e9190612352565b6000858585818110610453576104526128d9565b5b90506020028101906104659190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b80806104b8906129a9565b9150506103e0565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661059561121b565b73ffffffffffffffffffffffffffffffffffffffff16146105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e290612af6565b60405180910390fd5b6105f481611272565b61064d81600067ffffffffffffffff8111156106135761061261253d565b5b6040519080825280601f01601f1916602001820160405280156106455781602001600182028036833780820191505090505b5060006112cd565b50565b600061066667cc5c47196db5bd6160c01b61143b565b61067a678b55e749b3c352ab60c01b61143b565b61068e67e6442311764077fa60c01b61143b565b61069661143e565b6106aa671589e0478f7a186060c01b61143b565b6106b48484611519565b90506106ca67d37e8b3807985e7360c01b61143b565b6106de67c2c62d2bb50a980360c01b61143b565b60008480604001906106f09190612917565b905014156107425761070c6714643eaa19656f6660c01b61143b565b61072067cc382f158ab6697a60c01b61143b565b610734674eed3335c27922c660c01b61143b565b61073d846116d4565b610757565b610756672064a1156b0a7c3160c01b61143b565b5b61076b67f68d6061ffc7c0c960c01b61143b565b61077f67bcbc4a08bf13f3b260c01b61143b565b610788826117e6565b9392505050565b6107a367f09d2eb586b30e3160c01b610f89565b6107b767adcd03aa01933f5d60c01b610f89565b6107cb671b7af626582ba27260c01b610f89565b6107d3610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b815260040161080c91906126fd565b6000604051808303818588803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b5050505050565b61085467a4b8b212eba4763360c01b610f89565b61086867c1a85f365e95d34d60c01b610f89565b61087c6790b5229d734a941c60c01b610f89565b61089067ac3f074a4efdca6b60c01b610f89565b610898611927565b6108ac6798f9934e6ef7cbdb60c01b610f89565b6108c067e105cf1835a3cbf760c01b610f89565b6108d467f6d867ceaa041b4d60c01b610f89565b6108e867f4c16aa93970ab1860c01b610f89565b6108fc6799f0d47c2e8fc45e60c01b610f89565b610904610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161093e929190612b25565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a4261121b565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612af6565b60405180910390fd5b610aa182611272565b610aad828260016112cd565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612bc0565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ba6671081c828c013517c60c01b610f89565b610bba67ff98dad8cadf3d9a60c01b610f89565b610bce675e20c6fc536cd58060c01b610f89565b600160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000610c12673dcfe60a9f5f5da860c01b610f89565b610c26678331e2da03262f5460c01b610f89565b610c3a67d782c2e8006a9a4960c01b610f89565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b610c7467b73e6846f32599a860c01b610f89565b610c886723bab6b7c9557bb260c01b610f89565b610c9c67c978b9390b92acfa60c01b610f89565b610ca4610f8c565b610cb86758c04d70e2c0fe0760c01b610f89565b610ccc6758a54e8acfb0b3f060c01b610f89565b610d1b848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b50505050565b6000610d37673fefbc09e2d65fcc60c01b610f89565b610d4b674ac24fed240dae7f60c01b610f89565b610d5f675ac9d6ff41bf388b60c01b610f89565b610d67610bfc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d9f91906126fd565b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de09190612bf5565b905090565b610df967089085103b5d40c760c01b610f89565b60008060019054906101000a900460ff16159050808015610e2a5750600160008054906101000a900460ff1660ff16105b80610e575750610e3930611a8b565b158015610e565750600160008054906101000a900460ff1660ff16145b5b610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612c94565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ed3576001600060016101000a81548160ff0219169083151502179055505b610ee7674e573be3273a425960c01b610f89565b610efb67b04e9ca74a1dc70f60c01b610f89565b610f0f67a41c241defa654ec60c01b610f89565b610f2367722539ebdccfc8b960c01b610f89565b610f2c82611aae565b8015610f855760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f7c9190612cfc565b60405180910390a15b5050565b50565b610fa067bfd421e6631a158760c01b610f89565b610fb467845ea3fb25be09b260c01b610f89565b610fc867dae3f2bf40dea43060c01b610f89565b610fdc67a3421c0f70c6c2ad60c01b610f89565b610fe4610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561102e575061102d67d4e2eb5ba6c238d260c01b611bde565b5b806110a257506001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156110a157506110a0673131787c58fb0cdb60c01b611bde565b5b5b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612d63565b60405180910390fd5b6110f5671069db5f496dbd0660c01b610f89565b565b61110b67263035bb37aa06d160c01b610f89565b61111f674da9f9d954c1951760c01b610f89565b61113367640cbd2d5dc7c75e60c01b610f89565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161115c9190612dfd565b60006040518083038185875af1925050503d8060008114611199576040519150601f19603f3d011682016040523d82523d6000602084013e61119e565b606091505b50915091506111b7674b631257e68216eb60c01b610f89565b6111cb6783ebeb59e2f34cca60c01b610f89565b81611200576111e46759f30e531f9ea25f60c01b610f89565b6111f8674692c14c59360cde60c01b610f89565b805160208201fd5b6112146766b3697559da2bf460c01b610f89565b5050505050565b60006112497f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112866751144b62438d57cf60c01b610f89565b61129a670ac2cb6355a53b8d60c01b610f89565b6112ae67ed2e3f300a9c276860c01b610f89565b6112c267095aa869c694ffe960c01b610f89565b6112ca611927565b50565b6112f97f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611bf3565b60000160009054906101000a900460ff161561131d5761131883611bfd565b611436565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561138557506040513d601f19601f820116820180604052508101906113829190612e29565b60015b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ec8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612f5a565b60405180910390fd5b50611435838383611cb6565b5b505050565b50565b61145267ab1249ee5f609c5960c01b61143b565b61146667e9d28ffc5217f49460c01b61143b565b61147a677f62f43d3fcc921960c01b61143b565b61148e67b585e78c9c1baca960c01b61143b565b611496610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612fec565b60405180910390fd5b611517671deaffe1e91532d360c01b61143b565b565b600061152f6720ac98e939de350760c01b610f89565b611543672ae6921274c7893b60c01b610f89565b6115576792d083c11849074160c01b610f89565b600061156283611ce2565b905061157867b4d983dfa8310faf60c01b610f89565b61158c67dd9daa918030a7df60c01b610f89565b6115f2848061014001906115a09190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d1290919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5761165a674c82ebdca0fc26e860c01b610f89565b61166e675c163536e5ff386260c01b610f89565b611682670568bc5424c23ea860c01b610f89565b60019150506116ce565b6116a06764fd947bcf85ae9a60c01b610f89565b6116b467ec16d317d6d40e3760c01b610f89565b6116c86732d44e11cf5a804660c01b610f89565b60009150505b92915050565b6116e8678566f17aeb82b25660c01b610f89565b6116fc67d9f70333b53965e960c01b610f89565b61171067236d25bd80d0bc0f60c01b610f89565b611724670754a3f296541a8260c01b610f89565b80602001356001600081819054906101000a90046bffffffffffffffffffffffff168092919061175390613024565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906130a5565b60405180910390fd5b6117e36727f3136213cd9d6d60c01b610f89565b50565b6117fa67ca47e48c745f218060c01b61143b565b61180e67aa4dcb26a8800d8160c01b61143b565b61182267583cd7cbacafaf0f60c01b61143b565b6000811461190f5761183e6725200ee2f571393960c01b61143b565b61185267687ed2003b3b530260c01b61143b565b61186667f40eed13435d849860c01b61143b565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118ae906130eb565b600060405180830381858888f193505050503d80600081146118ec576040519150601f19603f3d011682016040523d82523d6000602084013e6118f1565b606091505b5050905061190967ca15a910c2f1fd6f60c01b61143b565b50611924565b61192367e4cf72238c35b10360c01b61143b565b5b50565b61193b670c0c800354d9600160c01b610f89565b61194f67acd6c58705f889b960c01b610f89565b6119636733d2f0ed41d5acdf60c01b610f89565b611977678ad299c73bae7f0660c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156119e457506119e367c90b615b2a8e569c60c01b611bde565b5b80611a3657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611a355750611a3467237645d75bc6b30460c01b611bde565b5b5b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061314c565b60405180910390fd5b611a8967e6e48ef418f50e1c60c01b610f89565b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611ac2675e194caffffc89c960c01b610f89565b611ad667dc82b8d1a8907c3160c01b610f89565b806001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2b671b44aec3248ff5c460c01b610f89565b611b3f67b4aaa1288b890b5b60c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de60405160405180910390a350565b600060019050919050565b6000819050919050565b6000819050919050565b611c0681611a8b565b611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906131de565b60405180910390fd5b80611c727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cbf83611d39565b600082511180611ccc5750805b15611cdd57611cdb8383611d88565b505b505050565b600081604051602001611cf59190613276565b604051602081830303815290604052805190602001209050919050565b6000806000611d218585611db5565b91509150611d2e81611e07565b819250505092915050565b611d4281611bfd565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611dad838360405180606001604052806027815260200161355c60279139611f75565b905092915050565b600080604183511415611df75760008060006020860151925060408601519150606086015160001a9050611deb87828585611ffb565b94509450505050611e00565b60006002915091505b9250929050565b60006004811115611e1b57611e1a61329c565b5b816004811115611e2e57611e2d61329c565b5b1415611e3957611f72565b60016004811115611e4d57611e4c61329c565b5b816004811115611e6057611e5f61329c565b5b1415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613317565b60405180910390fd5b60026004811115611eb557611eb461329c565b5b816004811115611ec857611ec761329c565b5b1415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613383565b60405180910390fd5b60036004811115611f1d57611f1c61329c565b5b816004811115611f3057611f2f61329c565b5b1415611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613415565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f9f9190612dfd565b600060405180830381855af49150503d8060008114611fda576040519150601f19603f3d011682016040523d82523d6000602084013e611fdf565b606091505b5091509150611ff0868383876120de565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156120365760006003915091506120d5565b60006001878787876040516000815260200160405260405161205b9493929190613444565b6020604051602081039080840390855afa15801561207d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cc576000600192509250506120d5565b80600092509250505b94509492505050565b6060831561214157600083511415612139576120f985611a8b565b612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906134d5565b60405180910390fd5b5b82905061214c565b61214b8383612154565b5b949350505050565b6000825111156121675781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b9190613539565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126121dd576121dc6121b8565b5b8235905067ffffffffffffffff8111156121fa576121f96121bd565b5b602083019150836020820283011115612216576122156121c2565b5b9250929050565b60008083601f840112612233576122326121b8565b5b8235905067ffffffffffffffff8111156122505761224f6121bd565b5b60208301915083602082028301111561226c5761226b6121c2565b5b9250929050565b6000806000806040858703121561228d5761228c6121ae565b5b600085013567ffffffffffffffff8111156122ab576122aa6121b3565b5b6122b7878288016121c7565b9450945050602085013567ffffffffffffffff8111156122da576122d96121b3565b5b6122e68782880161221d565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231f826122f4565b9050919050565b61232f81612314565b811461233a57600080fd5b50565b60008135905061234c81612326565b92915050565b600060208284031215612368576123676121ae565b5b60006123768482850161233d565b91505092915050565b600080fd5b6000610160828403121561239b5761239a61237f565b5b81905092915050565b6000819050919050565b6123b7816123a4565b81146123c257600080fd5b50565b6000813590506123d4816123ae565b92915050565b6000819050919050565b6123ed816123da565b81146123f857600080fd5b50565b60008135905061240a816123e4565b92915050565b600080600060608486031215612429576124286121ae565b5b600084013567ffffffffffffffff811115612447576124466121b3565b5b61245386828701612384565b9350506020612464868287016123c5565b9250506040612475868287016123fb565b9150509250925092565b612488816123da565b82525050565b60006020820190506124a3600083018461247f565b92915050565b60006124b4826122f4565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b600080604083850312156124fe576124fd6121ae565b5b600061250c858286016124d2565b925050602061251d858286016123fb565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125758261252c565b810181811067ffffffffffffffff821117156125945761259361253d565b5b80604052505050565b60006125a76121a4565b90506125b3828261256c565b919050565b600067ffffffffffffffff8211156125d3576125d261253d565b5b6125dc8261252c565b9050602081019050919050565b82818337600083830152505050565b600061260b612606846125b8565b61259d565b90508281526020810184848401111561262757612626612527565b5b6126328482856125e9565b509392505050565b600082601f83011261264f5761264e6121b8565b5b813561265f8482602086016125f8565b91505092915050565b6000806040838503121561267f5761267e6121ae565b5b600061268d8582860161233d565b925050602083013567ffffffffffffffff8111156126ae576126ad6121b3565b5b6126ba8582860161263a565b9150509250929050565b6126cd816123a4565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6126f781612314565b82525050565b600060208201905061271260008301846126ee565b92915050565b6000819050919050565b600061273d612738612733846122f4565b612718565b6122f4565b9050919050565b600061274f82612722565b9050919050565b600061276182612744565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b60008083601f8401126127a8576127a76121b8565b5b8235905067ffffffffffffffff8111156127c5576127c46121bd565b5b6020830191508360018202830111156127e1576127e06121c2565b5b9250929050565b60008060008060608587031215612802576128016121ae565b5b60006128108782880161233d565b9450506020612821878288016123fb565b935050604085013567ffffffffffffffff811115612842576128416121b3565b5b61284e87828801612792565b925092505092959194509250565b600082825260208201905092915050565b7f77726f6e67206172726179206c656e6774687300000000000000000000000000600082015250565b60006128a360138361285c565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261293457612933612908565b5b80840192508235915067ffffffffffffffff8211156129565761295561290d565b5b60208301925060018202360383131561297257612971612912565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b4826123da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129e7576129e661297a565b5b600182019050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612a4e602c8361285c565b9150612a59826129f2565b604082019050919050565b60006020820190508181036000830152612a7d81612a41565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ae0602c8361285c565b9150612aeb82612a84565b604082019050919050565b60006020820190508181036000830152612b0f81612ad3565b9050919050565b612b1f816124a9565b82525050565b6000604082019050612b3a6000830185612b16565b612b47602083018461247f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612baa60388361285c565b9150612bb582612b4e565b604082019050919050565b60006020820190508181036000830152612bd981612b9d565b9050919050565b600081519050612bef816123e4565b92915050565b600060208284031215612c0b57612c0a6121ae565b5b6000612c1984828501612be0565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612c7e602e8361285c565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612ce6612ce1612cdc84612cb4565b612718565b612cbe565b9050919050565b612cf681612ccb565b82525050565b6000602082019050612d116000830184612ced565b92915050565b7f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74600082015250565b6000612d4d60208361285c565b9150612d5882612d17565b602082019050919050565b60006020820190508181036000830152612d7c81612d40565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612db7578082015181840152602081019050612d9c565b83811115612dc6576000848401525b50505050565b6000612dd782612d83565b612de18185612d8e565b9350612df1818560208601612d99565b80840191505092915050565b6000612e098284612dcc565b915081905092915050565b600081519050612e23816123ae565b92915050565b600060208284031215612e3f57612e3e6121ae565b5b6000612e4d84828501612e14565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612eb2602e8361285c565b9150612ebd82612e56565b604082019050919050565b60006020820190508181036000830152612ee181612ea5565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612f4460298361285c565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612fd660248361285c565b9150612fe182612f7a565b604082019050919050565b6000602082019050818103600083015261300581612fc9565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061302f8261300c565b91506bffffffffffffffffffffffff82141561304e5761304d61297a565b5b600182019050919050565b7f6163636f756e743a20696e76616c6964206e6f6e636500000000000000000000600082015250565b600061308f60168361285c565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b50565b60006130d5600083612d8e565b91506130e0826130c5565b600082019050919050565b60006130f6826130c8565b9150819050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613136600a8361285c565b915061314182613100565b602082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006131c8602d8361285c565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061323f601c836131fe565b915061324a82613209565b601c82019050919050565b6000819050919050565b61327061326b826123a4565b613255565b82525050565b600061328182613232565b915061328d828461325f565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061330160188361285c565b915061330c826132cb565b602082019050919050565b60006020820190508181036000830152613330816132f4565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061336d601f8361285c565b915061337882613337565b602082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ff60228361285c565b915061340a826133a3565b604082019050919050565b6000602082019050818103600083015261342e816133f2565b9050919050565b61343e81612cbe565b82525050565b600060808201905061345960008301876126c4565b6134666020830186613435565b61347360408301856126c4565b61348060608301846126c4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006134bf601d8361285c565b91506134ca82613489565b602082019050919050565b600060208201905081810360008301526134ee816134b2565b9050919050565b600081519050919050565b600061350b826134f5565b613515818561285c565b9350613525818560208601612d99565b61352e8161252c565b840191505092915050565b600060208201905081810360008301526135538184613500565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d15b7d1346a3528350a214376c0ce8c50b5131822417d37282d9db07d885ede364736f6c634300080c0033"; + +type SimpleAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SimpleAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SimpleAccount__factory extends ContractFactory { + constructor(...args: SimpleAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anEntryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anEntryPoint, overrides || {}); + } + override attach(address: string): SimpleAccount { + return super.attach(address) as SimpleAccount; + } + override connect(signer: Signer): SimpleAccount__factory { + return super.connect(signer) as SimpleAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SimpleAccountInterface { + return new utils.Interface(_abi) as SimpleAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SimpleAccount { + return new Contract(address, _abi, signerOrProvider) as SimpleAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts new file mode 100644 index 00000000..88c95d07 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts @@ -0,0 +1,164 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestAggregatedAccountFactory, + TestAggregatedAccountFactoryInterface, +} from "../../../../src/aa-4337/samples/TestAggregatedAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract TestAggregatedAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract TestAggregatedAccount", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b506040516200555f3803806200555f83398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b614003806200155c83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516113ca620001926000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b154c3ffc7110e8c6ea6ca766e29ec620b1647851e431a63e392598f5211f5a964736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620040033803806200400383398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613e796200018a60003960008181610b360152610dc7015260008181610bf201528181610c8101528181610ee201528181610f7101526110210152613e796000f3fe6080604052600436106101695760003560e01c80634a58db19116100d15780638da5cb5b1161008a578063b61d27f611610064578063b61d27f61461051a578063c0c53b8b14610543578063c399ec881461056c578063f23a6e611461059757610170565b80638da5cb5b14610499578063affed0e0146104c4578063b0d691fe146104ef57610170565b80634a58db19146103c95780634d44560d146103d35780634f1ef286146103fc57806352d1902d1461041857806379cbc5fa146104435780637b1039991461046e57610170565b806320c13b0b1161012357806320c13b0b14610293578063245a7bfc146102d0578063249cb3fa146102fb5780633659cfe6146103385780633a871cdd146103615780633ad59dbc1461039e57610170565b806223de2914610175578063150b7a021461019e5780631626ba7e146101db57806318dfb3c7146102185780631a5da6c8146102415780631b71bb6e1461026a57610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c600480360381019061019791906122f9565b6105d4565b005b3480156101aa57600080fd5b506101c560048036038101906101c091906123c8565b610619565b6040516101d2919061248b565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906124dc565b61062e565b60405161020f919061248b565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e8565b610711565b005b34801561024d57600080fd5b5061026860048036038101906102639190612669565b610823565b005b34801561027657600080fd5b50610291600480360381019061028c9190612669565b610937565b005b34801561029f57600080fd5b506102ba60048036038101906102b59190612696565b610a4e565b6040516102c7919061248b565b60405180910390f35b3480156102dc57600080fd5b506102e5610b34565b6040516102f29190612726565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612741565b610b58565b60405161032f9190612790565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612669565b610bf0565b005b34801561036d57600080fd5b50610388600480360381019061038391906127d0565b610d79565b604051610395919061284e565b60405180910390f35b3480156103aa57600080fd5b506103b3610dc3565b6040516103c09190612726565b60405180910390f35b6103d1610deb565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906128a7565b610e60565b005b61041660048036038101906104119190612a28565b610ee0565b005b34801561042457600080fd5b5061042d61101d565b60405161043a9190612790565b60405180910390f35b34801561044f57600080fd5b506104586110d6565b6040516104659190612726565b60405180910390f35b34801561047a57600080fd5b506104836110fa565b6040516104909190612726565b60405180910390f35b3480156104a557600080fd5b506104ae611123565b6040516104bb9190612726565b60405180910390f35b3480156104d057600080fd5b506104d9611149565b6040516104e6919061284e565b60405180910390f35b3480156104fb57600080fd5b50610504611179565b6040516105119190612ae3565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612afe565b6111a3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612bb0565b611200565b005b34801561057857600080fd5b5061058161134a565b60405161058e919061284e565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612c03565b6113d2565b6040516105cb919061248b565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161060793929190612c9d565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106909493929190612d12565b602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190612d8a565b6106e25763ffffffff60e01b610708565b6040516020016106f190612e0e565b604051602081830303815290604052805190602001205b90509392505050565b6107196113e8565b818190508484905014610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890612ea6565b60405180910390fd5b60005b8484905081101561081c5761080985858381811061078557610784612ec6565b5b905060200201602081019061079a9190612669565b60008585858181106107af576107ae612ec6565b5b90506020028101906107c19190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b808061081490612f96565b915050610764565b5050505050565b61082b61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089290613051565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108ec929190613071565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61093f61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a69061310c565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a02929190613071565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ab295949392919061312c565b602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190612d8a565b610b045763ffffffff60e01b610b2a565b604051602001610b13906131c1565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b6a90613222565b6040516020818303038152906040528051906020012084148015610bb957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610be657604051602001610bcd90613283565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c769061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610cbe611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061339c565b60405180910390fd5b610d1d8161165a565b610d7681600067ffffffffffffffff811115610d3c57610d3b6128fd565b5b6040519080825280601f01601f191660200182016040528015610d6e5781602001600182028036833780820191505090505b506000611665565b50565b6000610d836117d3565b610d8d848461184a565b90506000848060400190610da19190612f04565b90501415610db357610db284611928565b5b610dbc826119d6565b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610df3611179565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e2c9190612726565b6000604051808303818588803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b5050505050565b610e6861153b565b610e70611179565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610eaa9291906133cb565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f669061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610fae611603565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061339c565b60405180910390fd5b61100d8261165a565b61101982826001611665565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613466565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ab6113e8565b6111fa848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b50505050565b60008060159054906101000a900460ff1615905080801561123357506001600060149054906101000a900460ff1660ff16105b80611262575061124230611a72565b15801561126157506001600060149054906101000a900460ff1660ff16145b5b6112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134f8565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156112df576001600060156101000a81548160ff0219169083151502179055505b6112eb84846000611a95565b80156113445760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161133b9190613560565b60405180910390a15b50505050565b6000611354611179565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161138c9190612726565b602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd9190613590565b905090565b600063f23a6e6160e01b90509695505050505050565b6113f0611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147657506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061362f565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114e091906136c9565b60006040518083038185875af1925050503d806000811461151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b50915091508161153457805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c257503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061372c565b60405180910390fd5b565b60006116317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166261153b565b50565b6116917f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611c3b565b60000160009054906101000a900460ff16156116b5576116b083611c45565b6117ce565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561171d57506040513d601f19601f8201168201806040525081019061171a9190613761565b60015b61175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613800565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613892565b60405180910390fd5b506117cd838383611cfe565b5b505050565b6117db611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90613924565b60405180910390fd5b565b60008061185683611d2a565b90506118be8480610140019061186c9190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d5a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576001915050611922565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906119579061395c565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906139dd565b60405180910390fd5b50565b60008114611a6f5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611a2690613a23565b600060405180830381858888f193505050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611c4e81611a72565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613aaa565b60405180910390fd5b80611cba7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0783611d81565b600082511180611d145750805b15611d2557611d238383611dd0565b505b505050565b600081604051602001611d3d9190613b37565b604051602081830303815290604052805190602001209050919050565b6000806000611d698585611dfd565b91509150611d7681611e4f565b819250505092915050565b611d8a81611c45565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611df58383604051806060016040528060278152602001613e1d60279139611fbd565b905092915050565b600080604183511415611e3f5760008060006020860151925060408601519150606086015160001a9050611e3387828585612043565b94509450505050611e48565b60006002915091505b9250929050565b60006004811115611e6357611e62613b5d565b5b816004811115611e7657611e75613b5d565b5b1415611e8157611fba565b60016004811115611e9557611e94613b5d565b5b816004811115611ea857611ea7613b5d565b5b1415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613bd8565b60405180910390fd5b60026004811115611efd57611efc613b5d565b5b816004811115611f1057611f0f613b5d565b5b1415611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613c44565b60405180910390fd5b60036004811115611f6557611f64613b5d565b5b816004811115611f7857611f77613b5d565b5b1415611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613cd6565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611fe791906136c9565b600060405180830381855af49150503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b509150915061203886838387612126565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561207e57600060039150915061211d565b6000600187878787604051600081526020016040526040516120a39493929190613d05565b6020604051602081039080840390855afa1580156120c5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121145760006001925092505061211d565b80600092509250505b94509492505050565b60608315612189576000835114156121815761214185611a72565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613d96565b60405180910390fd5b5b829050612194565b612193838361219c565b5b949350505050565b6000825111156121af5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39190613dfa565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061222b82612200565b9050919050565b61223b81612220565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126122b9576122b8612294565b5b8235905067ffffffffffffffff8111156122d6576122d5612299565b5b6020830191508360018202830111156122f2576122f161229e565b5b9250929050565b60008060008060008060008060c0898b031215612319576123186121f6565b5b60006123278b828c01612249565b98505060206123388b828c01612249565b97505060406123498b828c01612249565b965050606061235a8b828c0161227f565b955050608089013567ffffffffffffffff81111561237b5761237a6121fb565b5b6123878b828c016122a3565b945094505060a089013567ffffffffffffffff8111156123aa576123a96121fb565b5b6123b68b828c016122a3565b92509250509295985092959890939650565b6000806000806000608086880312156123e4576123e36121f6565b5b60006123f288828901612249565b955050602061240388828901612249565b94505060406124148882890161227f565b935050606086013567ffffffffffffffff811115612435576124346121fb565b5b612441888289016122a3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61248581612450565b82525050565b60006020820190506124a0600083018461247c565b92915050565b6000819050919050565b6124b9816124a6565b81146124c457600080fd5b50565b6000813590506124d6816124b0565b92915050565b6000806000604084860312156124f5576124f46121f6565b5b6000612503868287016124c7565b935050602084013567ffffffffffffffff811115612524576125236121fb565b5b612530868287016122a3565b92509250509250925092565b60008083601f84011261255257612551612294565b5b8235905067ffffffffffffffff81111561256f5761256e612299565b5b60208301915083602082028301111561258b5761258a61229e565b5b9250929050565b60008083601f8401126125a8576125a7612294565b5b8235905067ffffffffffffffff8111156125c5576125c4612299565b5b6020830191508360208202830111156125e1576125e061229e565b5b9250929050565b60008060008060408587031215612602576126016121f6565b5b600085013567ffffffffffffffff8111156126205761261f6121fb565b5b61262c8782880161253c565b9450945050602085013567ffffffffffffffff81111561264f5761264e6121fb565b5b61265b87828801612592565b925092505092959194509250565b60006020828403121561267f5761267e6121f6565b5b600061268d84828501612249565b91505092915050565b600080600080604085870312156126b0576126af6121f6565b5b600085013567ffffffffffffffff8111156126ce576126cd6121fb565b5b6126da878288016122a3565b9450945050602085013567ffffffffffffffff8111156126fd576126fc6121fb565b5b612709878288016122a3565b925092505092959194509250565b61272081612220565b82525050565b600060208201905061273b6000830184612717565b92915050565b60008060408385031215612758576127576121f6565b5b6000612766858286016124c7565b925050602061277785828601612249565b9150509250929050565b61278a816124a6565b82525050565b60006020820190506127a56000830184612781565b92915050565b600080fd5b600061016082840312156127c7576127c66127ab565b5b81905092915050565b6000806000606084860312156127e9576127e86121f6565b5b600084013567ffffffffffffffff811115612807576128066121fb565b5b612813868287016127b0565b9350506020612824868287016124c7565b92505060406128358682870161227f565b9150509250925092565b6128488161225e565b82525050565b6000602082019050612863600083018461283f565b92915050565b600061287482612200565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b600080604083850312156128be576128bd6121f6565b5b60006128cc85828601612892565b92505060206128dd8582860161227f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612935826128ec565b810181811067ffffffffffffffff82111715612954576129536128fd565b5b80604052505050565b60006129676121ec565b9050612973828261292c565b919050565b600067ffffffffffffffff821115612993576129926128fd565b5b61299c826128ec565b9050602081019050919050565b82818337600083830152505050565b60006129cb6129c684612978565b61295d565b9050828152602081018484840111156129e7576129e66128e7565b5b6129f28482856129a9565b509392505050565b600082601f830112612a0f57612a0e612294565b5b8135612a1f8482602086016129b8565b91505092915050565b60008060408385031215612a3f57612a3e6121f6565b5b6000612a4d85828601612249565b925050602083013567ffffffffffffffff811115612a6e57612a6d6121fb565b5b612a7a858286016129fa565b9150509250929050565b6000819050919050565b6000612aa9612aa4612a9f84612200565b612a84565b612200565b9050919050565b6000612abb82612a8e565b9050919050565b6000612acd82612ab0565b9050919050565b612add81612ac2565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b60008060008060608587031215612b1857612b176121f6565b5b6000612b2687828801612249565b9450506020612b378782880161227f565b935050604085013567ffffffffffffffff811115612b5857612b576121fb565b5b612b64878288016122a3565b925092505092959194509250565b6000612b7d82612220565b9050919050565b612b8d81612b72565b8114612b9857600080fd5b50565b600081359050612baa81612b84565b92915050565b600080600060608486031215612bc957612bc86121f6565b5b6000612bd786828701612b9b565b9350506020612be886828701612249565b9250506040612bf986828701612249565b9150509250925092565b60008060008060008060a08789031215612c2057612c1f6121f6565b5b6000612c2e89828a01612249565b9650506020612c3f89828a01612249565b9550506040612c5089828a0161227f565b9450506060612c6189828a0161227f565b935050608087013567ffffffffffffffff811115612c8257612c816121fb565b5b612c8e89828a016122a3565b92509250509295509295509295565b6000606082019050612cb26000830186612717565b612cbf6020830185612717565b612ccc604083018461283f565b949350505050565b600082825260208201905092915050565b6000612cf18385612cd4565b9350612cfe8385846129a9565b612d07836128ec565b840190509392505050565b6000606082019050612d276000830187612717565b612d346020830186612781565b8181036040830152612d47818486612ce5565b905095945050505050565b60008115159050919050565b612d6781612d52565b8114612d7257600080fd5b50565b600081519050612d8481612d5e565b92915050565b600060208284031215612da057612d9f6121f6565b5b6000612dae84828501612d75565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612df8601f83612db7565b9150612e0382612dc2565b601f82019050919050565b6000612e1982612deb565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612e90603383612e23565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612f2157612f20612ef5565b5b80840192508235915067ffffffffffffffff821115612f4357612f42612efa565b5b602083019250600182023603831315612f5f57612f5e612eff565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa18261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fd457612fd3612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061303b603183612e23565b915061304682612fdf565b604082019050919050565b6000602082019050818103600083015261306a8161302e565b9050919050565b60006040820190506130866000830185612717565b6130936020830184612717565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006130f6603383612e23565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b60006060820190506131416000830188612717565b8181036020830152613154818688612ce5565b90508181036040830152613169818486612ce5565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006131ab601d83612db7565b91506131b682613175565b601d82019050919050565b60006131cc8261319e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061320c601583612db7565b9150613217826131d6565b601582019050919050565b600061322d826131ff565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b600061326d601483612db7565b915061327882613237565b601482019050919050565b600061328e82613260565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006132f4602c83612e23565b91506132ff82613298565b604082019050919050565b60006020820190508181036000830152613323816132e7565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613386602c83612e23565b91506133918261332a565b604082019050919050565b600060208201905081810360008301526133b581613379565b9050919050565b6133c581612869565b82525050565b60006040820190506133e060008301856133bc565b6133ed602083018461283f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613450603883612e23565b915061345b826133f4565b604082019050919050565b6000602082019050818103600083015261347f81613443565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006134e2602e83612e23565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b6000819050919050565b600060ff82169050919050565b600061354a61354561354084613518565b612a84565b613522565b9050919050565b61355a8161352f565b82525050565b60006020820190506135756000830184613551565b92915050565b60008151905061358a81612268565b92915050565b6000602082840312156135a6576135a56121f6565b5b60006135b48482850161357b565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613619602983612e23565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613683578082015181840152602081019050613668565b83811115613692576000848401525b50505050565b60006136a38261364f565b6136ad818561365a565b93506136bd818560208601613665565b80840191505092915050565b60006136d58284613698565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613716601c83612e23565b9150613721826136e0565b602082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b60008151905061375b816124b0565b92915050565b600060208284031215613777576137766121f6565b5b60006137858482850161374c565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006137ea602e83612e23565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061387c602983612e23565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612e23565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061396782613944565b91506bffffffffffffffffffffffff82141561398657613985612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006139c7601f83612e23565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b50565b6000613a0d60008361365a565b9150613a18826139fd565b600082019050919050565b6000613a2e82613a00565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613a94602d83612e23565b9150613a9f82613a38565b604082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613b00601c83612db7565b9150613b0b82613aca565b601c82019050919050565b6000819050919050565b613b31613b2c826124a6565b613b16565b82525050565b6000613b4282613af3565b9150613b4e8284613b20565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613bc2601883612e23565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613c2e601f83612e23565b9150613c3982613bf8565b602082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc0602283612e23565b9150613ccb82613c64565b604082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b613cff81613522565b82525050565b6000608082019050613d1a6000830187612781565b613d276020830186613cf6565b613d346040830185612781565b613d416060830184612781565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d80601d83612e23565b9150613d8b82613d4a565b602082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b600081519050919050565b6000613dcc82613db6565b613dd68185612e23565b9350613de6818560208601613665565b613def816128ec565b840191505092915050565b60006020820190508181036000830152613e148184613dc1565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c0d173128a7be508d830d455354150c9883cf63f98f48007a01cf1d9cf05f5e464736f6c634300080c0033"; + +type TestAggregatedAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestAggregatedAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestAggregatedAccountFactory__factory extends ContractFactory { + constructor(...args: TestAggregatedAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anAggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): TestAggregatedAccountFactory { + return super.attach(address) as TestAggregatedAccountFactory; + } + override connect(signer: Signer): TestAggregatedAccountFactory__factory { + return super.connect(signer) as TestAggregatedAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestAggregatedAccountFactoryInterface { + return new utils.Interface(_abi) as TestAggregatedAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestAggregatedAccountFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestAggregatedAccountFactory; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts new file mode 100644 index 00000000..00997c8b --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts @@ -0,0 +1,765 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestAggregatedAccount, + TestAggregatedAccountInterface, +} from "../../../../src/aa-4337/samples/TestAggregatedAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "aggregator", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getAggregator", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620040033803806200400383398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613e796200018a60003960008181610b360152610dc7015260008181610bf201528181610c8101528181610ee201528181610f7101526110210152613e796000f3fe6080604052600436106101695760003560e01c80634a58db19116100d15780638da5cb5b1161008a578063b61d27f611610064578063b61d27f61461051a578063c0c53b8b14610543578063c399ec881461056c578063f23a6e611461059757610170565b80638da5cb5b14610499578063affed0e0146104c4578063b0d691fe146104ef57610170565b80634a58db19146103c95780634d44560d146103d35780634f1ef286146103fc57806352d1902d1461041857806379cbc5fa146104435780637b1039991461046e57610170565b806320c13b0b1161012357806320c13b0b14610293578063245a7bfc146102d0578063249cb3fa146102fb5780633659cfe6146103385780633a871cdd146103615780633ad59dbc1461039e57610170565b806223de2914610175578063150b7a021461019e5780631626ba7e146101db57806318dfb3c7146102185780631a5da6c8146102415780631b71bb6e1461026a57610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c600480360381019061019791906122f9565b6105d4565b005b3480156101aa57600080fd5b506101c560048036038101906101c091906123c8565b610619565b6040516101d2919061248b565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906124dc565b61062e565b60405161020f919061248b565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e8565b610711565b005b34801561024d57600080fd5b5061026860048036038101906102639190612669565b610823565b005b34801561027657600080fd5b50610291600480360381019061028c9190612669565b610937565b005b34801561029f57600080fd5b506102ba60048036038101906102b59190612696565b610a4e565b6040516102c7919061248b565b60405180910390f35b3480156102dc57600080fd5b506102e5610b34565b6040516102f29190612726565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612741565b610b58565b60405161032f9190612790565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612669565b610bf0565b005b34801561036d57600080fd5b50610388600480360381019061038391906127d0565b610d79565b604051610395919061284e565b60405180910390f35b3480156103aa57600080fd5b506103b3610dc3565b6040516103c09190612726565b60405180910390f35b6103d1610deb565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906128a7565b610e60565b005b61041660048036038101906104119190612a28565b610ee0565b005b34801561042457600080fd5b5061042d61101d565b60405161043a9190612790565b60405180910390f35b34801561044f57600080fd5b506104586110d6565b6040516104659190612726565b60405180910390f35b34801561047a57600080fd5b506104836110fa565b6040516104909190612726565b60405180910390f35b3480156104a557600080fd5b506104ae611123565b6040516104bb9190612726565b60405180910390f35b3480156104d057600080fd5b506104d9611149565b6040516104e6919061284e565b60405180910390f35b3480156104fb57600080fd5b50610504611179565b6040516105119190612ae3565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612afe565b6111a3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612bb0565b611200565b005b34801561057857600080fd5b5061058161134a565b60405161058e919061284e565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612c03565b6113d2565b6040516105cb919061248b565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161060793929190612c9d565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106909493929190612d12565b602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190612d8a565b6106e25763ffffffff60e01b610708565b6040516020016106f190612e0e565b604051602081830303815290604052805190602001205b90509392505050565b6107196113e8565b818190508484905014610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890612ea6565b60405180910390fd5b60005b8484905081101561081c5761080985858381811061078557610784612ec6565b5b905060200201602081019061079a9190612669565b60008585858181106107af576107ae612ec6565b5b90506020028101906107c19190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b808061081490612f96565b915050610764565b5050505050565b61082b61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089290613051565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108ec929190613071565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61093f61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a69061310c565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a02929190613071565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ab295949392919061312c565b602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190612d8a565b610b045763ffffffff60e01b610b2a565b604051602001610b13906131c1565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b6a90613222565b6040516020818303038152906040528051906020012084148015610bb957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610be657604051602001610bcd90613283565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c769061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610cbe611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061339c565b60405180910390fd5b610d1d8161165a565b610d7681600067ffffffffffffffff811115610d3c57610d3b6128fd565b5b6040519080825280601f01601f191660200182016040528015610d6e5781602001600182028036833780820191505090505b506000611665565b50565b6000610d836117d3565b610d8d848461184a565b90506000848060400190610da19190612f04565b90501415610db357610db284611928565b5b610dbc826119d6565b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610df3611179565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e2c9190612726565b6000604051808303818588803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b5050505050565b610e6861153b565b610e70611179565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610eaa9291906133cb565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f669061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610fae611603565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061339c565b60405180910390fd5b61100d8261165a565b61101982826001611665565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613466565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ab6113e8565b6111fa848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b50505050565b60008060159054906101000a900460ff1615905080801561123357506001600060149054906101000a900460ff1660ff16105b80611262575061124230611a72565b15801561126157506001600060149054906101000a900460ff1660ff16145b5b6112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134f8565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156112df576001600060156101000a81548160ff0219169083151502179055505b6112eb84846000611a95565b80156113445760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161133b9190613560565b60405180910390a15b50505050565b6000611354611179565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161138c9190612726565b602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd9190613590565b905090565b600063f23a6e6160e01b90509695505050505050565b6113f0611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147657506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061362f565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114e091906136c9565b60006040518083038185875af1925050503d806000811461151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b50915091508161153457805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c257503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061372c565b60405180910390fd5b565b60006116317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166261153b565b50565b6116917f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611c3b565b60000160009054906101000a900460ff16156116b5576116b083611c45565b6117ce565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561171d57506040513d601f19601f8201168201806040525081019061171a9190613761565b60015b61175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613800565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613892565b60405180910390fd5b506117cd838383611cfe565b5b505050565b6117db611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90613924565b60405180910390fd5b565b60008061185683611d2a565b90506118be8480610140019061186c9190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d5a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576001915050611922565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906119579061395c565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906139dd565b60405180910390fd5b50565b60008114611a6f5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611a2690613a23565b600060405180830381858888f193505050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611c4e81611a72565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613aaa565b60405180910390fd5b80611cba7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0783611d81565b600082511180611d145750805b15611d2557611d238383611dd0565b505b505050565b600081604051602001611d3d9190613b37565b604051602081830303815290604052805190602001209050919050565b6000806000611d698585611dfd565b91509150611d7681611e4f565b819250505092915050565b611d8a81611c45565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611df58383604051806060016040528060278152602001613e1d60279139611fbd565b905092915050565b600080604183511415611e3f5760008060006020860151925060408601519150606086015160001a9050611e3387828585612043565b94509450505050611e48565b60006002915091505b9250929050565b60006004811115611e6357611e62613b5d565b5b816004811115611e7657611e75613b5d565b5b1415611e8157611fba565b60016004811115611e9557611e94613b5d565b5b816004811115611ea857611ea7613b5d565b5b1415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613bd8565b60405180910390fd5b60026004811115611efd57611efc613b5d565b5b816004811115611f1057611f0f613b5d565b5b1415611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613c44565b60405180910390fd5b60036004811115611f6557611f64613b5d565b5b816004811115611f7857611f77613b5d565b5b1415611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613cd6565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611fe791906136c9565b600060405180830381855af49150503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b509150915061203886838387612126565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561207e57600060039150915061211d565b6000600187878787604051600081526020016040526040516120a39493929190613d05565b6020604051602081039080840390855afa1580156120c5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121145760006001925092505061211d565b80600092509250505b94509492505050565b60608315612189576000835114156121815761214185611a72565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613d96565b60405180910390fd5b5b829050612194565b612193838361219c565b5b949350505050565b6000825111156121af5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39190613dfa565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061222b82612200565b9050919050565b61223b81612220565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126122b9576122b8612294565b5b8235905067ffffffffffffffff8111156122d6576122d5612299565b5b6020830191508360018202830111156122f2576122f161229e565b5b9250929050565b60008060008060008060008060c0898b031215612319576123186121f6565b5b60006123278b828c01612249565b98505060206123388b828c01612249565b97505060406123498b828c01612249565b965050606061235a8b828c0161227f565b955050608089013567ffffffffffffffff81111561237b5761237a6121fb565b5b6123878b828c016122a3565b945094505060a089013567ffffffffffffffff8111156123aa576123a96121fb565b5b6123b68b828c016122a3565b92509250509295985092959890939650565b6000806000806000608086880312156123e4576123e36121f6565b5b60006123f288828901612249565b955050602061240388828901612249565b94505060406124148882890161227f565b935050606086013567ffffffffffffffff811115612435576124346121fb565b5b612441888289016122a3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61248581612450565b82525050565b60006020820190506124a0600083018461247c565b92915050565b6000819050919050565b6124b9816124a6565b81146124c457600080fd5b50565b6000813590506124d6816124b0565b92915050565b6000806000604084860312156124f5576124f46121f6565b5b6000612503868287016124c7565b935050602084013567ffffffffffffffff811115612524576125236121fb565b5b612530868287016122a3565b92509250509250925092565b60008083601f84011261255257612551612294565b5b8235905067ffffffffffffffff81111561256f5761256e612299565b5b60208301915083602082028301111561258b5761258a61229e565b5b9250929050565b60008083601f8401126125a8576125a7612294565b5b8235905067ffffffffffffffff8111156125c5576125c4612299565b5b6020830191508360208202830111156125e1576125e061229e565b5b9250929050565b60008060008060408587031215612602576126016121f6565b5b600085013567ffffffffffffffff8111156126205761261f6121fb565b5b61262c8782880161253c565b9450945050602085013567ffffffffffffffff81111561264f5761264e6121fb565b5b61265b87828801612592565b925092505092959194509250565b60006020828403121561267f5761267e6121f6565b5b600061268d84828501612249565b91505092915050565b600080600080604085870312156126b0576126af6121f6565b5b600085013567ffffffffffffffff8111156126ce576126cd6121fb565b5b6126da878288016122a3565b9450945050602085013567ffffffffffffffff8111156126fd576126fc6121fb565b5b612709878288016122a3565b925092505092959194509250565b61272081612220565b82525050565b600060208201905061273b6000830184612717565b92915050565b60008060408385031215612758576127576121f6565b5b6000612766858286016124c7565b925050602061277785828601612249565b9150509250929050565b61278a816124a6565b82525050565b60006020820190506127a56000830184612781565b92915050565b600080fd5b600061016082840312156127c7576127c66127ab565b5b81905092915050565b6000806000606084860312156127e9576127e86121f6565b5b600084013567ffffffffffffffff811115612807576128066121fb565b5b612813868287016127b0565b9350506020612824868287016124c7565b92505060406128358682870161227f565b9150509250925092565b6128488161225e565b82525050565b6000602082019050612863600083018461283f565b92915050565b600061287482612200565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b600080604083850312156128be576128bd6121f6565b5b60006128cc85828601612892565b92505060206128dd8582860161227f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612935826128ec565b810181811067ffffffffffffffff82111715612954576129536128fd565b5b80604052505050565b60006129676121ec565b9050612973828261292c565b919050565b600067ffffffffffffffff821115612993576129926128fd565b5b61299c826128ec565b9050602081019050919050565b82818337600083830152505050565b60006129cb6129c684612978565b61295d565b9050828152602081018484840111156129e7576129e66128e7565b5b6129f28482856129a9565b509392505050565b600082601f830112612a0f57612a0e612294565b5b8135612a1f8482602086016129b8565b91505092915050565b60008060408385031215612a3f57612a3e6121f6565b5b6000612a4d85828601612249565b925050602083013567ffffffffffffffff811115612a6e57612a6d6121fb565b5b612a7a858286016129fa565b9150509250929050565b6000819050919050565b6000612aa9612aa4612a9f84612200565b612a84565b612200565b9050919050565b6000612abb82612a8e565b9050919050565b6000612acd82612ab0565b9050919050565b612add81612ac2565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b60008060008060608587031215612b1857612b176121f6565b5b6000612b2687828801612249565b9450506020612b378782880161227f565b935050604085013567ffffffffffffffff811115612b5857612b576121fb565b5b612b64878288016122a3565b925092505092959194509250565b6000612b7d82612220565b9050919050565b612b8d81612b72565b8114612b9857600080fd5b50565b600081359050612baa81612b84565b92915050565b600080600060608486031215612bc957612bc86121f6565b5b6000612bd786828701612b9b565b9350506020612be886828701612249565b9250506040612bf986828701612249565b9150509250925092565b60008060008060008060a08789031215612c2057612c1f6121f6565b5b6000612c2e89828a01612249565b9650506020612c3f89828a01612249565b9550506040612c5089828a0161227f565b9450506060612c6189828a0161227f565b935050608087013567ffffffffffffffff811115612c8257612c816121fb565b5b612c8e89828a016122a3565b92509250509295509295509295565b6000606082019050612cb26000830186612717565b612cbf6020830185612717565b612ccc604083018461283f565b949350505050565b600082825260208201905092915050565b6000612cf18385612cd4565b9350612cfe8385846129a9565b612d07836128ec565b840190509392505050565b6000606082019050612d276000830187612717565b612d346020830186612781565b8181036040830152612d47818486612ce5565b905095945050505050565b60008115159050919050565b612d6781612d52565b8114612d7257600080fd5b50565b600081519050612d8481612d5e565b92915050565b600060208284031215612da057612d9f6121f6565b5b6000612dae84828501612d75565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612df8601f83612db7565b9150612e0382612dc2565b601f82019050919050565b6000612e1982612deb565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612e90603383612e23565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612f2157612f20612ef5565b5b80840192508235915067ffffffffffffffff821115612f4357612f42612efa565b5b602083019250600182023603831315612f5f57612f5e612eff565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa18261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fd457612fd3612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061303b603183612e23565b915061304682612fdf565b604082019050919050565b6000602082019050818103600083015261306a8161302e565b9050919050565b60006040820190506130866000830185612717565b6130936020830184612717565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006130f6603383612e23565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b60006060820190506131416000830188612717565b8181036020830152613154818688612ce5565b90508181036040830152613169818486612ce5565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006131ab601d83612db7565b91506131b682613175565b601d82019050919050565b60006131cc8261319e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061320c601583612db7565b9150613217826131d6565b601582019050919050565b600061322d826131ff565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b600061326d601483612db7565b915061327882613237565b601482019050919050565b600061328e82613260565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006132f4602c83612e23565b91506132ff82613298565b604082019050919050565b60006020820190508181036000830152613323816132e7565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613386602c83612e23565b91506133918261332a565b604082019050919050565b600060208201905081810360008301526133b581613379565b9050919050565b6133c581612869565b82525050565b60006040820190506133e060008301856133bc565b6133ed602083018461283f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613450603883612e23565b915061345b826133f4565b604082019050919050565b6000602082019050818103600083015261347f81613443565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006134e2602e83612e23565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b6000819050919050565b600060ff82169050919050565b600061354a61354561354084613518565b612a84565b613522565b9050919050565b61355a8161352f565b82525050565b60006020820190506135756000830184613551565b92915050565b60008151905061358a81612268565b92915050565b6000602082840312156135a6576135a56121f6565b5b60006135b48482850161357b565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613619602983612e23565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613683578082015181840152602081019050613668565b83811115613692576000848401525b50505050565b60006136a38261364f565b6136ad818561365a565b93506136bd818560208601613665565b80840191505092915050565b60006136d58284613698565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613716601c83612e23565b9150613721826136e0565b602082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b60008151905061375b816124b0565b92915050565b600060208284031215613777576137766121f6565b5b60006137858482850161374c565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006137ea602e83612e23565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061387c602983612e23565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612e23565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061396782613944565b91506bffffffffffffffffffffffff82141561398657613985612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006139c7601f83612e23565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b50565b6000613a0d60008361365a565b9150613a18826139fd565b600082019050919050565b6000613a2e82613a00565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613a94602d83612e23565b9150613a9f82613a38565b604082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613b00601c83612db7565b9150613b0b82613aca565b601c82019050919050565b6000819050919050565b613b31613b2c826124a6565b613b16565b82525050565b6000613b4282613af3565b9150613b4e8284613b20565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613bc2601883612e23565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613c2e601f83612e23565b9150613c3982613bf8565b602082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc0602283612e23565b9150613ccb82613c64565b604082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b613cff81613522565b82525050565b6000608082019050613d1a6000830187612781565b613d276020830186613cf6565b613d346040830185612781565b613d416060830184612781565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d80601d83612e23565b9150613d8b82613d4a565b602082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b600081519050919050565b6000613dcc82613db6565b613dd68185612e23565b9350613de6818560208601613665565b613def816128ec565b840191505092915050565b60006020820190508181036000830152613e148184613dc1565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c0d173128a7be508d830d455354150c9883cf63f98f48007a01cf1d9cf05f5e464736f6c634300080c0033"; + +type TestAggregatedAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestAggregatedAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestAggregatedAccount__factory extends ContractFactory { + constructor(...args: TestAggregatedAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anAggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): TestAggregatedAccount { + return super.attach(address) as TestAggregatedAccount; + } + override connect(signer: Signer): TestAggregatedAccount__factory { + return super.connect(signer) as TestAggregatedAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestAggregatedAccountInterface { + return new utils.Interface(_abi) as TestAggregatedAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestAggregatedAccount { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestAggregatedAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts new file mode 100644 index 00000000..2e6e143c --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts @@ -0,0 +1,664 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TokenPaymaster, + TokenPaymasterInterface, +} from "../../../../src/aa-4337/samples/TokenPaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "accountFactory", + type: "address", + }, + { + internalType: "string", + name: "_symbol", + type: "string", + }, + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + 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: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + 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: [], + name: "COST_OF_POST", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + 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: "amount", + 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: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + 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: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + 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: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "mintTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "theFactory", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60c06040523480156200001157600080fd5b506040516200377938038062003779833981810160405281019062000037919062000855565b8182826200005a6200004e6200014660201b60201c565b6200014e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508160049080519060200190620000a79291906200055e565b508060059080519060200190620000c09291906200055e565b5050508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200010a3060016200021260201b60201c565b6200013d30337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200038160201b60201c565b50505062000bac565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000285576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027c9062000931565b60405180910390fd5b62000299600083836200055460201b60201c565b8060036000828254620002ad91906200098c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003619190620009fa565b60405180910390a36200037d600083836200055960201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620003f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003eb9062000a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000467576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045e9062000b25565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620005479190620009fa565b60405180910390a3505050565b505050565b505050565b8280546200056c9062000b76565b90600052602060002090601f016020900481019282620005905760008555620005dc565b82601f10620005ab57805160ff1916838001178555620005dc565b82800160010185558215620005dc579182015b82811115620005db578251825591602001919060010190620005be565b5b509050620005eb9190620005ef565b5090565b5b808211156200060a576000816000905550600101620005f0565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200064f8262000622565b9050919050565b620006618162000642565b81146200066d57600080fd5b50565b600081519050620006818162000656565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006dc8262000691565b810181811067ffffffffffffffff82111715620006fe57620006fd620006a2565b5b80604052505050565b6000620007136200060e565b9050620007218282620006d1565b919050565b600067ffffffffffffffff821115620007445762000743620006a2565b5b6200074f8262000691565b9050602081019050919050565b60005b838110156200077c5780820151818401526020810190506200075f565b838111156200078c576000848401525b50505050565b6000620007a9620007a38462000726565b62000707565b905082815260208101848484011115620007c857620007c76200068c565b5b620007d58482856200075c565b509392505050565b600082601f830112620007f557620007f462000687565b5b81516200080784826020860162000792565b91505092915050565b60006200081d8262000642565b9050919050565b6200082f8162000810565b81146200083b57600080fd5b50565b6000815190506200084f8162000824565b92915050565b60008060006060848603121562000871576200087062000618565b5b6000620008818682870162000670565b935050602084015167ffffffffffffffff811115620008a557620008a46200061d565b5b620008b386828701620007dd565b9250506040620008c6868287016200083e565b9150509250925092565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000919601f83620008d0565b91506200092682620008e1565b602082019050919050565b600060208201905081810360008301526200094c816200090a565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009998262000953565b9150620009a68362000953565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620009de57620009dd6200095d565b5b828201905092915050565b620009f48162000953565b82525050565b600060208201905062000a116000830184620009e9565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000a75602483620008d0565b915062000a828262000a17565b604082019050919050565b6000602082019050818103600083015262000aa88162000a66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000b0d602283620008d0565b915062000b1a8262000aaf565b604082019050919050565b6000602082019050818103600083015262000b408162000afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8f57607f821691505b6020821081141562000ba65762000ba562000b47565b5b50919050565b60805160a051612b6f62000c0a60003960008181610991015261188501526000818161061d0152818161077301528181610a6901528181610a9501528181610b1f01528181610baf01528181610c4e015261140a0152612b6f6000f3fe6080604052600436106101815760003560e01c80639f5ca221116100d1578063c23a5cea1161008a578063dd62ed3e11610064578063dd62ed3e14610546578063f0dda65c14610583578063f2fde38b146105ac578063f465c77e146105d557610181565b8063c23a5cea146104e8578063c399ec8814610511578063d0e30db01461053c57610181565b80639f5ca221146103d8578063a457c2d714610403578063a9059cbb14610440578063a9a234091461047d578063b0d691fe146104a6578063bb9fe6bf146104d157610181565b8063313ce5671161013e578063715018a611610118578063715018a614610340578063796d4371146103575780638da5cb5b1461038257806395d89b41146103ad57610181565b8063313ce5671461029b57806339509351146102c657806370a082311461030357610181565b80630396cb601461018657806306fdde03146101a2578063095ea7b3146101cd57806318160ddd1461020a578063205c28781461023557806323b872dd1461025e575b600080fd5b6101a0600480360381019061019b919061195b565b610613565b005b3480156101ae57600080fd5b506101b76106aa565b6040516101c49190611a21565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190611ad7565b61073c565b6040516102019190611b32565b60405180910390f35b34801561021657600080fd5b5061021f61075f565b60405161022c9190611b5c565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190611bb5565b610769565b005b34801561026a57600080fd5b5061028560048036038101906102809190611bf5565b610802565b6040516102929190611b32565b60405180910390f35b3480156102a757600080fd5b506102b0610831565b6040516102bd9190611c64565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190611ad7565b61083a565b6040516102fa9190611b32565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190611c7f565b610871565b6040516103379190611b5c565b60405180910390f35b34801561034c57600080fd5b506103556108ba565b005b34801561036357600080fd5b5061036c6108ce565b6040516103799190611b5c565b60405180910390f35b34801561038e57600080fd5b506103976108d4565b6040516103a49190611cbb565b60405180910390f35b3480156103b957600080fd5b506103c26108fd565b6040516103cf9190611a21565b60405180910390f35b3480156103e457600080fd5b506103ed61098f565b6040516103fa9190611cbb565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190611ad7565b6109b3565b6040516104379190611b32565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190611ad7565b610a2a565b6040516104749190611b32565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190611d60565b610a4d565b005b3480156104b257600080fd5b506104bb610a67565b6040516104c89190611e33565b60405180910390f35b3480156104dd57600080fd5b506104e6610a8b565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190611e4e565b610b15565b005b34801561051d57600080fd5b50610526610bab565b6040516105339190611b5c565b60405180910390f35b610544610c4c565b005b34801561055257600080fd5b5061056d60048036038101906105689190611e7b565b610cda565b60405161057a9190611b5c565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190611ad7565b610d61565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190611c7f565b610d77565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190611f16565b610dc9565b60405161060a929190611fda565b60405180910390f35b61061b610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016106759190612019565b6000604051808303818588803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050505050565b6060600480546106b990612063565b80601f01602080910402602001604051908101604052809291908181526020018280546106e590612063565b80156107325780601f1061070757610100808354040283529160200191610732565b820191906000526020600020905b81548152906001019060200180831161071557829003601f168201915b5050505050905090565b600080610747610e6a565b9050610754818585610e72565b600191505092915050565b6000600354905090565b610771610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016107cc9291906120a4565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505050565b60008061080d610e6a565b905061081a85828561103d565b6108258585856110c9565b60019150509392505050565b60006012905090565b600080610845610e6a565b90506108668185856108578589610cda565b61086191906120fc565b610e72565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c2610dec565b6108cc6000611344565b565b613a9881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461090c90612063565b80601f016020809104026020016040519081016040528092919081815260200182805461093890612063565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806109be610e6a565b905060006109cc8286610cda565b905083811015610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906121c4565b60405180910390fd5b610a1e8286868403610e72565b60019250505092915050565b600080610a35610e6a565b9050610a428185856110c9565b600191505092915050565b610a55611408565b610a6184848484611498565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a93610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610afb57600080fd5b505af1158015610b0f573d6000803e3d6000fd5b50505050565b610b1d610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610b7691906121e4565b600060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c069190611cbb565b602060405180830381865afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612214565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ca69190611cbb565b6000604051808303818588803b158015610cbf57600080fd5b505af1158015610cd3573d6000803e3d6000fd5b5050505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d69610dec565b610d7382826114d8565b5050565b610d7f610dec565b610d9230610d8b6108d4565b6000610e72565b610d9b81611630565b610dc630827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e72565b50565b60606000610dd5611408565b610de08585856116b4565b91509150935093915050565b610df4610e6a565b73ffffffffffffffffffffffffffffffffffffffff16610e126108d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061228d565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed99061231f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906123b1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110309190611b5c565b60405180910390a3505050565b60006110498484610cda565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110c357818110156110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061241d565b60405180910390fd5b6110c28484848403610e72565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611130906124af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612541565b60405180910390fd5b6111b483838361182f565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906125d3565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161132b9190611b5c565b60405180910390a361133e848484611834565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d9061263f565b60405180910390fd5b565b600083838101906114a99190611e4e565b905060006114c3613a98846114be91906120fc565b611839565b90506114d08230836110c9565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906126ab565b60405180910390fd5b6115546000838361182f565b806003600082825461156691906120fc565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116189190611b5c565b60405180910390a361162c60008383611834565b5050565b611638610dec565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061273d565b60405180910390fd5b6116b181611344565b50565b60606000806116c284611839565b9050613a988660a001351161170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906127cf565b60405180910390fd5b600086806040019061171e91906127fe565b9050146117905761172e8661184f565b8061174a8760000160208101906117459190611c7f565b610871565b101561178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906128d3565b60405180910390fd5b6117ee565b806117ac8760000160208101906117a79190611c7f565b610871565b10156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e49061293f565b60405180910390fd5b5b8560000160208101906118019190611c7f565b6040516020016118119190611cbb565b60405160208183030381529060405260009250925050935093915050565b505050565b505050565b6000606482611848919061298e565b9050919050565b600081806040019061186191906127fe565b600090601492611873939291906129c9565b9061187e9190612a48565b60601c90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612b19565b60405180910390fd5b5050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6119388161191f565b811461194357600080fd5b50565b6000813590506119558161192f565b92915050565b60006020828403121561197157611970611915565b5b600061197f84828501611946565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119c25780820151818401526020810190506119a7565b838111156119d1576000848401525b50505050565b6000601f19601f8301169050919050565b60006119f382611988565b6119fd8185611993565b9350611a0d8185602086016119a4565b611a16816119d7565b840191505092915050565b60006020820190508181036000830152611a3b81846119e8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6e82611a43565b9050919050565b611a7e81611a63565b8114611a8957600080fd5b50565b600081359050611a9b81611a75565b92915050565b6000819050919050565b611ab481611aa1565b8114611abf57600080fd5b50565b600081359050611ad181611aab565b92915050565b60008060408385031215611aee57611aed611915565b5b6000611afc85828601611a8c565b9250506020611b0d85828601611ac2565b9150509250929050565b60008115159050919050565b611b2c81611b17565b82525050565b6000602082019050611b476000830184611b23565b92915050565b611b5681611aa1565b82525050565b6000602082019050611b716000830184611b4d565b92915050565b6000611b8282611a43565b9050919050565b611b9281611b77565b8114611b9d57600080fd5b50565b600081359050611baf81611b89565b92915050565b60008060408385031215611bcc57611bcb611915565b5b6000611bda85828601611ba0565b9250506020611beb85828601611ac2565b9150509250929050565b600080600060608486031215611c0e57611c0d611915565b5b6000611c1c86828701611a8c565b9350506020611c2d86828701611a8c565b9250506040611c3e86828701611ac2565b9150509250925092565b600060ff82169050919050565b611c5e81611c48565b82525050565b6000602082019050611c796000830184611c55565b92915050565b600060208284031215611c9557611c94611915565b5b6000611ca384828501611a8c565b91505092915050565b611cb581611a63565b82525050565b6000602082019050611cd06000830184611cac565b92915050565b60038110611ce357600080fd5b50565b600081359050611cf581611cd6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d2057611d1f611cfb565b5b8235905067ffffffffffffffff811115611d3d57611d3c611d00565b5b602083019150836001820283011115611d5957611d58611d05565b5b9250929050565b60008060008060608587031215611d7a57611d79611915565b5b6000611d8887828801611ce6565b945050602085013567ffffffffffffffff811115611da957611da861191a565b5b611db587828801611d0a565b93509350506040611dc887828801611ac2565b91505092959194509250565b6000819050919050565b6000611df9611df4611def84611a43565b611dd4565b611a43565b9050919050565b6000611e0b82611dde565b9050919050565b6000611e1d82611e00565b9050919050565b611e2d81611e12565b82525050565b6000602082019050611e486000830184611e24565b92915050565b600060208284031215611e6457611e63611915565b5b6000611e7284828501611ba0565b91505092915050565b60008060408385031215611e9257611e91611915565b5b6000611ea085828601611a8c565b9250506020611eb185828601611a8c565b9150509250929050565b600080fd5b60006101608284031215611ed757611ed6611ebb565b5b81905092915050565b6000819050919050565b611ef381611ee0565b8114611efe57600080fd5b50565b600081359050611f1081611eea565b92915050565b600080600060608486031215611f2f57611f2e611915565b5b600084013567ffffffffffffffff811115611f4d57611f4c61191a565b5b611f5986828701611ec0565b9350506020611f6a86828701611f01565b9250506040611f7b86828701611ac2565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000611fac82611f85565b611fb68185611f90565b9350611fc68185602086016119a4565b611fcf816119d7565b840191505092915050565b60006040820190508181036000830152611ff48185611fa1565b90506120036020830184611b4d565b9392505050565b6120138161191f565b82525050565b600060208201905061202e600083018461200a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207b57607f821691505b6020821081141561208f5761208e612034565b5b50919050565b61209e81611b77565b82525050565b60006040820190506120b96000830185612095565b6120c66020830184611b4d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061210782611aa1565b915061211283611aa1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612147576121466120cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006121ae602583611993565b91506121b982612152565b604082019050919050565b600060208201905081810360008301526121dd816121a1565b9050919050565b60006020820190506121f96000830184612095565b92915050565b60008151905061220e81611aab565b92915050565b60006020828403121561222a57612229611915565b5b6000612238848285016121ff565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612277602083611993565b915061228282612241565b602082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612309602483611993565b9150612314826122ad565b604082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061239b602283611993565b91506123a68261233f565b604082019050919050565b600060208201905081810360008301526123ca8161238e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612407601d83611993565b9150612412826123d1565b602082019050919050565b60006020820190508181036000830152612436816123fa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612499602583611993565b91506124a48261243d565b604082019050919050565b600060208201905081810360008301526124c88161248c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061252b602383611993565b9150612536826124cf565b604082019050919050565b6000602082019050818103600083015261255a8161251e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006125bd602683611993565b91506125c882612561565b604082019050919050565b600060208201905081810360008301526125ec816125b0565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000612629601583611993565b9150612634826125f3565b602082019050919050565b600060208201905081810360008301526126588161261c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612695601f83611993565b91506126a08261265f565b602082019050919050565b600060208201905081810360008301526126c481612688565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612727602683611993565b9150612732826126cb565b604082019050919050565b600060208201905081810360008301526127568161271a565b9050919050565b7f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060008201527f706f73744f700000000000000000000000000000000000000000000000000000602082015250565b60006127b9602683611993565b91506127c48261275d565b604082019050919050565b600060208201905081810360008301526127e8816127ac565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261281b5761281a6127ef565b5b80840192508235915067ffffffffffffffff82111561283d5761283c6127f4565b5b602083019250600182023603831315612859576128586127f9565b5b509250929050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60008201527f6372656174652900000000000000000000000000000000000000000000000000602082015250565b60006128bd602783611993565b91506128c882612861565b604082019050919050565b600060208201905081810360008301526128ec816128b0565b9050919050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e6365000000000000600082015250565b6000612929601a83611993565b9150612934826128f3565b602082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299982611aa1565b91506129a483611aa1565b9250826129b4576129b361295f565b5b828204905092915050565b600080fd5b600080fd5b600080858511156129dd576129dc6129bf565b5b838611156129ee576129ed6129c4565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000612a548383612a04565b82612a5f8135612a0f565b92506014821015612a9f57612a9a7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802612a3b565b831692505b505092915050565b7f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160008201527f63746f7279000000000000000000000000000000000000000000000000000000602082015250565b6000612b03602583611993565b9150612b0e82612aa7565b604082019050919050565b60006020820190508181036000830152612b3281612af6565b905091905056fea2646970667358221220e79ec71e5840aa90a1271e7c33822c6cce68c24ee1f7a160b52aac0d2cf717f064736f6c634300080c0033"; + +type TokenPaymasterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TokenPaymasterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TokenPaymaster__factory extends ContractFactory { + constructor(...args: TokenPaymasterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + accountFactory: PromiseOrValue, + _symbol: PromiseOrValue, + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + accountFactory, + _symbol, + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + accountFactory: PromiseOrValue, + _symbol: PromiseOrValue, + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + accountFactory, + _symbol, + _entryPoint, + overrides || {} + ); + } + override attach(address: string): TokenPaymaster { + return super.attach(address) as TokenPaymaster; + } + override connect(signer: Signer): TokenPaymaster__factory { + return super.connect(signer) as TokenPaymaster__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TokenPaymasterInterface { + return new utils.Interface(_abi) as TokenPaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TokenPaymaster { + return new Contract(address, _abi, signerOrProvider) as TokenPaymaster; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts new file mode 100644 index 00000000..98a4ddfd --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts @@ -0,0 +1,488 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + VerifyingPaymaster, + VerifyingPaymasterInterface, +} from "../../../../src/aa-4337/samples/VerifyingPaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + { + internalType: "address", + name: "_verifyingSigner", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + ], + name: "getHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "parsePaymasterAndData", + outputs: [ + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "senderNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "verifyingSigner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60c06040523480156200001157600080fd5b506040516200228438038062002284833981810160405281019062000037919062000244565b81620000586200004c620000c960201b60201c565b620000d160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050506200028b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001c7826200019a565b9050919050565b6000620001db82620001ba565b9050919050565b620001ed81620001ce565b8114620001f957600080fd5b50565b6000815190506200020d81620001e2565b92915050565b6200021e81620001ba565b81146200022a57600080fd5b50565b6000815190506200023e8162000213565b92915050565b600080604083850312156200025e576200025d62000195565b5b60006200026e85828601620001fc565b925050602062000281858286016200022d565b9150509250929050565b60805160a051611f9b620002e9600039600081816104c60152610d0201526000818161039e01528181610435015281816106330152818161065f015281816106e901528181610779015281816108180152610ae10152611f9b6000f3fe6080604052600436106100f35760003560e01c8063a9a234091161008a578063c399ec8811610059578063c399ec88146102f8578063d0e30db014610323578063f2fde38b1461032d578063f465c77e14610356576100f3565b8063a9a2340914610264578063b0d691fe1461028d578063bb9fe6bf146102b8578063c23a5cea146102cf576100f3565b80638da5cb5b116100c65780638da5cb5b1461017f57806394d4ad60146101aa57806394e1fc19146101ea5780639c90b44314610227576100f3565b80630396cb60146100f8578063205c28781461011457806323d9ac9b1461013d578063715018a614610168575b600080fd5b610112600480360381019061010d9190611117565b610394565b005b34801561012057600080fd5b5061013b600480360381019061013691906111d8565b61042b565b005b34801561014957600080fd5b506101526104c4565b60405161015f9190611239565b60405180910390f35b34801561017457600080fd5b5061017d6104e8565b005b34801561018b57600080fd5b506101946104fc565b6040516101a19190611239565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc91906112b9565b610525565b6040516101e19493929190611385565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190611416565b610574565b60405161021e919061149e565b60405180910390f35b34801561023357600080fd5b5061024e600480360381019061024991906114e5565b6105ff565b60405161025b9190611521565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190611561565b610617565b005b34801561029957600080fd5b506102a2610631565b6040516102af9190611634565b60405180910390f35b3480156102c457600080fd5b506102cd610655565b005b3480156102db57600080fd5b506102f660048036038101906102f1919061164f565b6106df565b005b34801561030457600080fd5b5061030d610775565b60405161031a9190611521565b60405180910390f35b61032b610816565b005b34801561033957600080fd5b50610354600480360381019061034f91906114e5565b6108a4565b005b34801561036257600080fd5b5061037d600480360381019061037891906116a8565b610928565b60405161038b92919061178e565b60405180910390f35b61039c61094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016103f691906117cd565b6000604051808303818588803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505050505050565b61043361094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161048e9291906117f7565b600060405180830381600087803b1580156104a857600080fd5b505af11580156104bc573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104f061094b565b6104fa60006109c9565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080366000858560149060549261053f9392919061182a565b81019061054c9190611865565b8094508195505050858560549080926105679392919061182a565b9150915092959194509250565b600061057f84610a8d565b46306001600061058e89610acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486866040516020016105e0969594939291906118a5565b6040516020818303038152906040528051906020012090509392505050565b60016020528060005260406000206000915090505481565b61061f610adf565b61062b84848484610b6f565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61065d61094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106c557600080fd5b505af11580156106d9573d6000803e3d6000fd5b50505050565b6106e761094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610740919061190d565b600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107d09190611239565b602060405180830381865afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610811919061193d565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108709190611239565b6000604051808303818588803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b5050505050565b6108ac61094b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610913906119ed565b60405180910390fd5b610925816109c9565b50565b60606000610934610adf565b61093f858585610baa565b91509150935093915050565b610953610d96565b73ffffffffffffffffffffffffffffffffffffffff166109716104fc565b73ffffffffffffffffffffffffffffffffffffffff16146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90611a59565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606036600083806101200190610aa39190611a88565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b6000808235905080915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490611b37565b60405180910390fd5b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190611ba3565b60405180910390fd5b606060008080366000610bcc89806101200190610bc79190611a88565b610525565b93509350935093506040828290501480610be95750604182829050145b610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90611c35565b60405180910390fd5b6000610c3d610c388b8787610574565b610d9e565b905060016000610c4c8c610acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610c9790611c84565b9190505550610cea8184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610dce565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d6757610d4860018686610df5565b6040518060200160405280600081525090965096505050505050610d8e565b610d7360008686610df5565b60405180602001604052806000815250909650965050505050505b935093915050565b600033905090565b600081604051602001610db19190611d45565b604051602081830303815290604052805190602001209050919050565b6000806000610ddd8585610e2e565b91509150610dea81610e80565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610e1d576000610e20565b60015b60ff16171790509392505050565b600080604183511415610e705760008060006020860151925060408601519150606086015160001a9050610e6487828585610fee565b94509450505050610e79565b60006002915091505b9250929050565b60006004811115610e9457610e93611d6b565b5b816004811115610ea757610ea6611d6b565b5b1415610eb257610feb565b60016004811115610ec657610ec5611d6b565b5b816004811115610ed957610ed8611d6b565b5b1415610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190611de6565b60405180910390fd5b60026004811115610f2e57610f2d611d6b565b5b816004811115610f4157610f40611d6b565b5b1415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990611e52565b60405180910390fd5b60036004811115610f9657610f95611d6b565b5b816004811115610fa957610fa8611d6b565b5b1415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611ee4565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156110295760006003915091506110c8565b60006001878787876040516000815260200160405260405161104e9493929190611f20565b6020604051602081039080840390855afa158015611070573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110bf576000600192509250506110c8565b80600092509250505b94509492505050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6110f4816110db565b81146110ff57600080fd5b50565b600081359050611111816110eb565b92915050565b60006020828403121561112d5761112c6110d1565b5b600061113b84828501611102565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061116f82611144565b9050919050565b61117f81611164565b811461118a57600080fd5b50565b60008135905061119c81611176565b92915050565b6000819050919050565b6111b5816111a2565b81146111c057600080fd5b50565b6000813590506111d2816111ac565b92915050565b600080604083850312156111ef576111ee6110d1565b5b60006111fd8582860161118d565b925050602061120e858286016111c3565b9150509250929050565b600061122382611144565b9050919050565b61123381611218565b82525050565b600060208201905061124e600083018461122a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261127957611278611254565b5b8235905067ffffffffffffffff81111561129657611295611259565b5b6020830191508360018202830111156112b2576112b161125e565b5b9250929050565b600080602083850312156112d0576112cf6110d1565b5b600083013567ffffffffffffffff8111156112ee576112ed6110d6565b5b6112fa85828601611263565b92509250509250929050565b600065ffffffffffff82169050919050565b61132181611306565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006113648385611327565b9350611371838584611338565b61137a83611347565b840190509392505050565b600060608201905061139a6000830187611318565b6113a76020830186611318565b81810360408301526113ba818486611358565b905095945050505050565b600080fd5b600061016082840312156113e1576113e06113c5565b5b81905092915050565b6113f381611306565b81146113fe57600080fd5b50565b600081359050611410816113ea565b92915050565b60008060006060848603121561142f5761142e6110d1565b5b600084013567ffffffffffffffff81111561144d5761144c6110d6565b5b611459868287016113ca565b935050602061146a86828701611401565b925050604061147b86828701611401565b9150509250925092565b6000819050919050565b61149881611485565b82525050565b60006020820190506114b3600083018461148f565b92915050565b6114c281611218565b81146114cd57600080fd5b50565b6000813590506114df816114b9565b92915050565b6000602082840312156114fb576114fa6110d1565b5b6000611509848285016114d0565b91505092915050565b61151b816111a2565b82525050565b60006020820190506115366000830184611512565b92915050565b6003811061154957600080fd5b50565b60008135905061155b8161153c565b92915050565b6000806000806060858703121561157b5761157a6110d1565b5b60006115898782880161154c565b945050602085013567ffffffffffffffff8111156115aa576115a96110d6565b5b6115b687828801611263565b935093505060406115c9878288016111c3565b91505092959194509250565b6000819050919050565b60006115fa6115f56115f084611144565b6115d5565b611144565b9050919050565b600061160c826115df565b9050919050565b600061161e82611601565b9050919050565b61162e81611613565b82525050565b60006020820190506116496000830184611625565b92915050565b600060208284031215611665576116646110d1565b5b60006116738482850161118d565b91505092915050565b61168581611485565b811461169057600080fd5b50565b6000813590506116a28161167c565b92915050565b6000806000606084860312156116c1576116c06110d1565b5b600084013567ffffffffffffffff8111156116df576116de6110d6565b5b6116eb868287016113ca565b93505060206116fc86828701611693565b925050604061170d868287016111c3565b9150509250925092565b600081519050919050565b60005b83811015611740578082015181840152602081019050611725565b8381111561174f576000848401525b50505050565b600061176082611717565b61176a8185611327565b935061177a818560208601611722565b61178381611347565b840191505092915050565b600060408201905081810360008301526117a88185611755565b90506117b76020830184611512565b9392505050565b6117c7816110db565b82525050565b60006020820190506117e260008301846117be565b92915050565b6117f181611164565b82525050565b600060408201905061180c60008301856117e8565b6118196020830184611512565b9392505050565b600080fd5b600080fd5b6000808585111561183e5761183d611820565b5b8386111561184f5761184e611825565b5b6001850283019150848603905094509492505050565b6000806040838503121561187c5761187b6110d1565b5b600061188a85828601611401565b925050602061189b85828601611401565b9150509250929050565b600060c08201905081810360008301526118bf8189611755565b90506118ce6020830188611512565b6118db604083018761122a565b6118e86060830186611512565b6118f56080830185611318565b61190260a0830184611318565b979650505050505050565b600060208201905061192260008301846117e8565b92915050565b600081519050611937816111ac565b92915050565b600060208284031215611953576119526110d1565b5b600061196184828501611928565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006119d760268361196a565b91506119e28261197b565b604082019050919050565b60006020820190508181036000830152611a06816119ca565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a4360208361196a565b9150611a4e82611a0d565b602082019050919050565b60006020820190508181036000830152611a7281611a36565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611aa557611aa4611a79565b5b80840192508235915067ffffffffffffffff821115611ac757611ac6611a7e565b5b602083019250600182023603831315611ae357611ae2611a83565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000611b2160158361196a565b9150611b2c82611aeb565b602082019050919050565b60006020820190508181036000830152611b5081611b14565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611b8d600d8361196a565b9150611b9882611b57565b602082019050919050565b60006020820190508181036000830152611bbc81611b80565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e60008201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b6000611c1f60408361196a565b9150611c2a82611bc3565b604082019050919050565b60006020820190508181036000830152611c4e81611c12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c8f826111a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611cc257611cc1611c55565b5b600182019050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611d0e601c83611ccd565b9150611d1982611cd8565b601c82019050919050565b6000819050919050565b611d3f611d3a82611485565b611d24565b82525050565b6000611d5082611d01565b9150611d5c8284611d2e565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611dd060188361196a565b9150611ddb82611d9a565b602082019050919050565b60006020820190508181036000830152611dff81611dc3565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611e3c601f8361196a565b9150611e4782611e06565b602082019050919050565b60006020820190508181036000830152611e6b81611e2f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ece60228361196a565b9150611ed982611e72565b604082019050919050565b60006020820190508181036000830152611efd81611ec1565b9050919050565b600060ff82169050919050565b611f1a81611f04565b82525050565b6000608082019050611f35600083018761148f565b611f426020830186611f11565b611f4f604083018561148f565b611f5c606083018461148f565b9594505050505056fea26469706673582212201c5abfaaf385ce49cfbc8c62299461000b93686a2380258a810c5e2489eda74964736f6c634300080c0033"; + +type VerifyingPaymasterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: VerifyingPaymasterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class VerifyingPaymaster__factory extends ContractFactory { + constructor(...args: VerifyingPaymasterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + _verifyingSigner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + _verifyingSigner, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + _verifyingSigner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + _entryPoint, + _verifyingSigner, + overrides || {} + ); + } + override attach(address: string): VerifyingPaymaster { + return super.attach(address) as VerifyingPaymaster; + } + override connect(signer: Signer): VerifyingPaymaster__factory { + return super.connect(signer) as VerifyingPaymaster__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): VerifyingPaymasterInterface { + return new utils.Interface(_abi) as VerifyingPaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): VerifyingPaymaster { + return new Contract(address, _abi, signerOrProvider) as VerifyingPaymaster; + } +} diff --git a/src/contracts/factories/src/aa-4337/samples/index.ts b/src/contracts/factories/src/aa-4337/samples/index.ts new file mode 100644 index 00000000..21e41aa8 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/samples/index.ts @@ -0,0 +1,9 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { DepositPaymaster__factory } from "./DepositPaymaster__factory"; +export { IOracle__factory } from "./IOracle__factory"; +export { TestAggregatedAccount__factory } from "./TestAggregatedAccount__factory"; +export { TestAggregatedAccountFactory__factory } from "./TestAggregatedAccountFactory__factory"; +export { TokenPaymaster__factory } from "./TokenPaymaster__factory"; +export { VerifyingPaymaster__factory } from "./VerifyingPaymaster__factory"; diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts new file mode 100644 index 00000000..cd218bf5 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts @@ -0,0 +1,164 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../common"; +import type { + BrokenBLSAccountFactory, + BrokenBLSAccountFactoryInterface, +} from "../../../../../src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract BrokenBLSAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract BrokenBLSAccount", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b50604051620055433803806200554383398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b613dd0806200177383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516115e1620001926000396000818160db0152818161012f015261024f01526115e16000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b600480360381019062000085919062000643565b620000fd565b6040516200009a9190620006c6565b60405180910390f35b620000c16004803603810190620000bb919062000643565b62000205565b604051620000d09190620003ef565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b60405180602001620001199062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888876040516024016200016593929190620007d7565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620008a7565b604051602081830303815290604052604051602001620001df9291906200091d565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000806200021686868686620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002495781925050506200030c565b8460001b7f00000000000000000000000000000000000000000000000000000000000000008888876040516024016200028593929190620007d7565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002d89062000356565b620002e5929190620008a7565b8190604051809103906000f590508015801562000306573d6000803e3d6000fd5b50925050505b949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200094683390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b6000604051905090565b600080fd5b6000620004288262000364565b9050919050565b60006200043c826200041b565b9050919050565b6200044e816200042f565b81146200045a57600080fd5b50565b6000813590506200046e8162000443565b92915050565b6200047f816200041b565b81146200048b57600080fd5b50565b6000813590506200049f8162000474565b92915050565b6000819050919050565b620004ba81620004a5565b8114620004c657600080fd5b50565b600081359050620004da81620004af565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053082620004e5565b810181811067ffffffffffffffff82111715620005525762000551620004f6565b5b80604052505050565b6000620005676200040c565b905062000575828262000525565b919050565b600067ffffffffffffffff821115620005985762000597620004f6565b5b602082029050919050565b600080fd5b6000620005bf620005b9846200057a565b6200055b565b90508060208402830185811115620005dc57620005db620005a3565b5b835b81811015620006095780620005f48882620004c9565b845260208401935050602081019050620005de565b5050509392505050565b600082601f8301126200062b576200062a620004e0565b5b60046200063a848285620005a8565b91505092915050565b60008060008060e0858703121562000660576200065f62000416565b5b600062000670878288016200045d565b945050602062000683878288016200048e565b93505060406200069687828801620004c9565b9250506060620006a98782880162000613565b91505092959194509250565b620006c0816200041b565b82525050565b6000602082019050620006dd6000830184620006b5565b92915050565b6000620006f0826200038e565b9050919050565b60006200070482620006e3565b9050919050565b6200071681620006f7565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b6200074781620004a5565b82525050565b60006200075b83836200073c565b60208301905092915050565b6000602082019050919050565b6200077f816200071c565b6200078b818462000727565b9250620007988262000732565b8060005b83811015620007cf578151620007b387826200074d565b9650620007c08362000767565b9250506001810190506200079c565b505050505050565b600060c082019050620007ee60008301866200070b565b620007fd6020830185620006b5565b6200080c604083018462000774565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200085057808201518184015260208101905062000833565b8381111562000860576000848401525b50505050565b6000620008738262000814565b6200087f81856200081f565b93506200089181856020860162000830565b6200089c81620004e5565b840191505092915050565b6000604082019050620008be6000830185620006b5565b8181036020830152620008d2818462000866565b90509392505050565b600081905092915050565b6000620008f38262000814565b620008ff8185620008db565b93506200091181856020860162000830565b80840191505092915050565b60006200092b8285620008e6565b9150620009398284620008e6565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b9b507dced6ab71ef743a6cda413325a8a34f41eb63a35b40de4b3f5d204a87264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162003dd038038062003dd083398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613c466200018a60003960008181610cc40152611b97015260008181610d8001528181610e0f01528181611048015281816110d701526111870152613c466000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b1461055c578063c399ec8814610585578063e02afbae146105b0578063f23a6e61146105db5761018b565b8063affed0e0146104dd578063b0d691fe14610508578063b61d27f6146105335761018b565b80634d44560d146103ec5780634f1ef2861461041557806352d1902d1461043157806379cbc5fa1461045c5780637b103999146104875780638da5cb5b146104b25761018b565b80631b71bb6e1161013e578063249cb3fa11610118578063249cb3fa1461033f5780633659cfe61461037c5780633a871cdd146103a55780634a58db19146103e25761018b565b80631b71bb6e146102ae57806320c13b0b146102d7578063245a7bfc146103145761018b565b806223de291461019057806305d3177d146101b9578063150b7a02146101e25780631626ba7e1461021f57806318dfb3c71461025c5780631a5da6c8146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b2919061217c565b610618565b005b3480156101c557600080fd5b506101e060048036038101906101db91906123c6565b61065d565b005b3480156101ee57600080fd5b5061020960048036038101906102049190612419565b6107a7565b60405161021691906124dc565b60405180910390f35b34801561022b57600080fd5b506102466004803603810190610241919061252d565b6107bc565b60405161025391906124dc565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190612639565b61089f565b005b34801561029157600080fd5b506102ac60048036038101906102a791906126ba565b6109b1565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906126ba565b610ac5565b005b3480156102e357600080fd5b506102fe60048036038101906102f991906126e7565b610bdc565b60405161030b91906124dc565b60405180910390f35b34801561032057600080fd5b50610329610cc2565b6040516103369190612777565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612792565b610ce6565b60405161037391906127e1565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906126ba565b610d7e565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612821565b610f07565b6040516103d9919061289f565b60405180910390f35b6103ea610f51565b005b3480156103f857600080fd5b50610413600480360381019061040e91906128f8565b610fc6565b005b61042f600480360381019061042a91906129ed565b611046565b005b34801561043d57600080fd5b50610446611183565b60405161045391906127e1565b60405180910390f35b34801561046857600080fd5b5061047161123c565b60405161047e9190612777565b60405180910390f35b34801561049357600080fd5b5061049c611260565b6040516104a99190612777565b60405180910390f35b3480156104be57600080fd5b506104c7611289565b6040516104d49190612777565b60405180910390f35b3480156104e957600080fd5b506104f26112af565b6040516104ff919061289f565b60405180910390f35b34801561051457600080fd5b5061051d6112df565b60405161052a9190612aa8565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ac3565b611309565b005b34801561056857600080fd5b50610583600480360381019061057e9190612b37565b611366565b005b34801561059157600080fd5b5061059a6114af565b6040516105a7919061289f565b60405180910390f35b3480156105bc57600080fd5b506105c5611537565b6040516105d29190612c35565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190612c50565b61154e565b60405161060f91906124dc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161064b93929190612cea565b60405180910390a15050505050505050565b60008060159054906101000a900460ff1615905080801561069057506001600060149054906101000a900460ff1660ff16105b806106bf575061069f30611564565b1580156106be57506001600060149054906101000a900460ff1660ff16145b5b6106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff160217905550801561073c576001600060156101000a81548160ff0219169083151502179055505b61074884846000611587565b80156107a15760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107989190612e0c565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161081e9493929190612e65565b602060405180830381865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612edd565b6108705763ffffffff60e01b610896565b60405160200161087f90612f61565b604051602081830303815290604052805190602001205b90509392505050565b6108a7611723565b8181905084849050146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690612fe8565b60405180910390fd5b60005b848490508110156109aa5761099785858381811061091357610912613008565b5b905060200201602081019061092891906126ba565b600085858581811061093d5761093c613008565b5b905060200281019061094f9190613046565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b80806109a2906130d8565b9150506108f2565b5050505050565b6109b9611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613193565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a7a9291906131b3565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acd611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061324e565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610b909291906131b3565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610c4095949392919061326e565b602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612edd565b610c925763ffffffff60e01b610cb8565b604051602001610ca190613303565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610cf890613364565b6040516020818303038152906040528051906020012084148015610d4757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d7457604051602001610d5b906133c5565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e049061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e4c61193e565b73ffffffffffffffffffffffffffffffffffffffff1614610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906134de565b60405180910390fd5b610eab81611995565b610f0481600067ffffffffffffffff811115610eca57610ec961229a565b5b6040519080825280601f01601f191660200182016040528015610efc5781602001600182028036833780820191505090505b5060006119a0565b50565b6000610f11611b0e565b610f1b8484611b85565b90506000848060400190610f2f9190613046565b90501415610f4157610f4084611bfa565b5b610f4a82611ca8565b9392505050565b610f596112df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f929190612777565b6000604051808303818588803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b5050505050565b610fce611876565b610fd66112df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161101092919061350d565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661111461193e565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134de565b60405180910390fd5b61117382611995565b61117f828260016119a0565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906135a8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611311611723565b611360848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b50505050565b60008060159054906101000a900460ff1615905080801561139957506001600060149054906101000a900460ff1660ff16105b806113c857506113a830611564565b1580156113c757506001600060149054906101000a900460ff1660ff16145b5b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611445576001600060156101000a81548160ff0219169083151502179055505b611450848484611587565b80156114a95760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516114a09190612e0c565b60405180910390a15b50505050565b60006114b96112df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114f19190612777565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153291906135dd565b905090565b61153f61204d565b61154761204d565b8091505090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b61172b6112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117b157506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061367c565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161181b9190613716565b60006040518083038185875af1925050503d8060008114611858576040519150601f19603f3d011682016040523d82523d6000602084013e61185d565b606091505b50915091508161186f57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118fd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613779565b60405180910390fd5b565b600061196c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199d611876565b50565b6119cc7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d4e565b60000160009054906101000a900460ff16156119f0576119eb83611d58565b611b09565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a5857506040513d601f19601f82011682018060405250810190611a5591906137ae565b60015b611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e9061384d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906138df565b60405180910390fd5b50611b08838383611e11565b5b505050565b611b166112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613971565b60405180910390fd5b565b6000611bf260405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611e3d565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611c29906139a9565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613a2a565b60405180910390fd5b50565b60008114611d415760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611cf890613a70565b600060405180830381858888f193505050503d8060008114611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611d6181611564565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790613af7565b60405180910390fd5b80611dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1a83611e85565b600082511180611e275750805b15611e3857611e368383611ed4565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611e8e81611d58565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ef98383604051806060016040528060278152602001613bea60279139611f01565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f2b9190613716565b600060405180830381855af49150503d8060008114611f66576040519150601f19603f3d011682016040523d82523d6000602084013e611f6b565b606091505b5091509150611f7c86838387611f87565b925050509392505050565b60608315611fea57600083511415611fe257611fa285611564565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b63565b60405180910390fd5b5b829050611ff5565b611ff48383611ffd565b5b949350505050565b6000825111156120105781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120449190613bc7565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120ae82612083565b9050919050565b6120be816120a3565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b6000819050919050565b6120f4816120e1565b81146120ff57600080fd5b50565b600081359050612111816120eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261213c5761213b612117565b5b8235905067ffffffffffffffff8111156121595761215861211c565b5b60208301915083600182028301111561217557612174612121565b5b9250929050565b60008060008060008060008060c0898b03121561219c5761219b612079565b5b60006121aa8b828c016120cc565b98505060206121bb8b828c016120cc565b97505060406121cc8b828c016120cc565b96505060606121dd8b828c01612102565b955050608089013567ffffffffffffffff8111156121fe576121fd61207e565b5b61220a8b828c01612126565b945094505060a089013567ffffffffffffffff81111561222d5761222c61207e565b5b6122398b828c01612126565b92509250509295985092959890939650565b6000612256826120a3565b9050919050565b6122668161224b565b811461227157600080fd5b50565b6000813590506122838161225d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d282612289565b810181811067ffffffffffffffff821117156122f1576122f061229a565b5b80604052505050565b600061230461206f565b905061231082826122c9565b919050565b600067ffffffffffffffff8211156123305761232f61229a565b5b602082029050919050565b600061234e61234984612315565b6122fa565b9050806020840283018581111561236857612367612121565b5b835b81811015612391578061237d8882612102565b84526020840193505060208101905061236a565b5050509392505050565b600082601f8301126123b0576123af612117565b5b60046123bd84828561233b565b91505092915050565b600080600060c084860312156123df576123de612079565b5b60006123ed86828701612274565b93505060206123fe868287016120cc565b925050604061240f8682870161239b565b9150509250925092565b60008060008060006080868803121561243557612434612079565b5b6000612443888289016120cc565b9550506020612454888289016120cc565b945050604061246588828901612102565b935050606086013567ffffffffffffffff8111156124865761248561207e565b5b61249288828901612126565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d6816124a1565b82525050565b60006020820190506124f160008301846124cd565b92915050565b6000819050919050565b61250a816124f7565b811461251557600080fd5b50565b60008135905061252781612501565b92915050565b60008060006040848603121561254657612545612079565b5b600061255486828701612518565b935050602084013567ffffffffffffffff8111156125755761257461207e565b5b61258186828701612126565b92509250509250925092565b60008083601f8401126125a3576125a2612117565b5b8235905067ffffffffffffffff8111156125c0576125bf61211c565b5b6020830191508360208202830111156125dc576125db612121565b5b9250929050565b60008083601f8401126125f9576125f8612117565b5b8235905067ffffffffffffffff8111156126165761261561211c565b5b60208301915083602082028301111561263257612631612121565b5b9250929050565b6000806000806040858703121561265357612652612079565b5b600085013567ffffffffffffffff8111156126715761267061207e565b5b61267d8782880161258d565b9450945050602085013567ffffffffffffffff8111156126a05761269f61207e565b5b6126ac878288016125e3565b925092505092959194509250565b6000602082840312156126d0576126cf612079565b5b60006126de848285016120cc565b91505092915050565b6000806000806040858703121561270157612700612079565b5b600085013567ffffffffffffffff81111561271f5761271e61207e565b5b61272b87828801612126565b9450945050602085013567ffffffffffffffff81111561274e5761274d61207e565b5b61275a87828801612126565b925092505092959194509250565b612771816120a3565b82525050565b600060208201905061278c6000830184612768565b92915050565b600080604083850312156127a9576127a8612079565b5b60006127b785828601612518565b92505060206127c8858286016120cc565b9150509250929050565b6127db816124f7565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080fd5b60006101608284031215612818576128176127fc565b5b81905092915050565b60008060006060848603121561283a57612839612079565b5b600084013567ffffffffffffffff8111156128585761285761207e565b5b61286486828701612801565b935050602061287586828701612518565b925050604061288686828701612102565b9150509250925092565b612899816120e1565b82525050565b60006020820190506128b46000830184612890565b92915050565b60006128c582612083565b9050919050565b6128d5816128ba565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e612079565b5b600061291d858286016128e3565b925050602061292e85828601612102565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156129585761295761229a565b5b61296182612289565b9050602081019050919050565b82818337600083830152505050565b600061299061298b8461293d565b6122fa565b9050828152602081018484840111156129ac576129ab612938565b5b6129b784828561296e565b509392505050565b600082601f8301126129d4576129d3612117565b5b81356129e484826020860161297d565b91505092915050565b60008060408385031215612a0457612a03612079565b5b6000612a12858286016120cc565b925050602083013567ffffffffffffffff811115612a3357612a3261207e565b5b612a3f858286016129bf565b9150509250929050565b6000819050919050565b6000612a6e612a69612a6484612083565b612a49565b612083565b9050919050565b6000612a8082612a53565b9050919050565b6000612a9282612a75565b9050919050565b612aa281612a87565b82525050565b6000602082019050612abd6000830184612a99565b92915050565b60008060008060608587031215612add57612adc612079565b5b6000612aeb878288016120cc565b9450506020612afc87828801612102565b935050604085013567ffffffffffffffff811115612b1d57612b1c61207e565b5b612b2987828801612126565b925092505092959194509250565b600080600060608486031215612b5057612b4f612079565b5b6000612b5e86828701612274565b9350506020612b6f868287016120cc565b9250506040612b80868287016120cc565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612bb3816120e1565b82525050565b6000612bc58383612baa565b60208301905092915050565b6000602082019050919050565b612be781612b8a565b612bf18184612b95565b9250612bfc82612ba0565b8060005b83811015612c2d578151612c148782612bb9565b9650612c1f83612bd1565b925050600181019050612c00565b505050505050565b6000608082019050612c4a6000830184612bde565b92915050565b60008060008060008060a08789031215612c6d57612c6c612079565b5b6000612c7b89828a016120cc565b9650506020612c8c89828a016120cc565b9550506040612c9d89828a01612102565b9450506060612cae89828a01612102565b935050608087013567ffffffffffffffff811115612ccf57612cce61207e565b5b612cdb89828a01612126565b92509250509295509295509295565b6000606082019050612cff6000830186612768565b612d0c6020830185612768565b612d196040830184612890565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d8e602e83612d21565b9150612d9982612d32565b604082019050919050565b60006020820190508181036000830152612dbd81612d81565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612df6612df1612dec84612dc4565b612a49565b612dce565b9050919050565b612e0681612ddb565b82525050565b6000602082019050612e216000830184612dfd565b92915050565b600082825260208201905092915050565b6000612e448385612e27565b9350612e5183858461296e565b612e5a83612289565b840190509392505050565b6000606082019050612e7a6000830187612768565b612e8760208301866127d2565b8181036040830152612e9a818486612e38565b905095945050505050565b60008115159050919050565b612eba81612ea5565b8114612ec557600080fd5b50565b600081519050612ed781612eb1565b92915050565b600060208284031215612ef357612ef2612079565b5b6000612f0184828501612ec8565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612f4b601f83612f0a565b9150612f5682612f15565b601f82019050919050565b6000612f6c82612f3e565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612fd2603383612d21565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261306357613062613037565b5b80840192508235915067ffffffffffffffff8211156130855761308461303c565b5b6020830192506001820236038313156130a1576130a0613041565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130e3826120e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613116576131156130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061317d603183612d21565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b60006040820190506131c86000830185612768565b6131d56020830184612768565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613238603383612d21565b9150613243826131dc565b604082019050919050565b600060208201905081810360008301526132678161322b565b9050919050565b60006060820190506132836000830188612768565b8181036020830152613296818688612e38565b905081810360408301526132ab818486612e38565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006132ed601d83612f0a565b91506132f8826132b7565b601d82019050919050565b600061330e826132e0565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061334e601583612f0a565b915061335982613318565b601582019050919050565b600061336f82613341565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006133af601483612f0a565b91506133ba82613379565b601482019050919050565b60006133d0826133a2565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613436602c83612d21565b9150613441826133da565b604082019050919050565b6000602082019050818103600083015261346581613429565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006134c8602c83612d21565b91506134d38261346c565b604082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b613507816128ba565b82525050565b600060408201905061352260008301856134fe565b61352f6020830184612890565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613592603883612d21565b915061359d82613536565b604082019050919050565b600060208201905081810360008301526135c181613585565b9050919050565b6000815190506135d7816120eb565b92915050565b6000602082840312156135f3576135f2612079565b5b6000613601848285016135c8565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613666602983612d21565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156136d05780820151818401526020810190506136b5565b838111156136df576000848401525b50505050565b60006136f08261369c565b6136fa81856136a7565b935061370a8185602086016136b2565b80840191505092915050565b600061372282846136e5565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613763601c83612d21565b915061376e8261372d565b602082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b6000815190506137a881612501565b92915050565b6000602082840312156137c4576137c3612079565b5b60006137d284828501613799565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613837602e83612d21565b9150613842826137db565b604082019050919050565b600060208201905081810360008301526138668161382a565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006138c9602983612d21565b91506138d48261386d565b604082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061395b602483612d21565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006139b482613991565b91506bffffffffffffffffffffffff8214156139d3576139d26130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613a14601f83612d21565b9150613a1f826139de565b602082019050919050565b60006020820190508181036000830152613a4381613a07565b9050919050565b50565b6000613a5a6000836136a7565b9150613a6582613a4a565b600082019050919050565b6000613a7b82613a4d565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613ae1602d83612d21565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b4d601d83612d21565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b600081519050919050565b6000613b9982613b83565b613ba38185612d21565b9350613bb38185602086016136b2565b613bbc81612289565b840191505092915050565b60006020820190508181036000830152613be18184613b8e565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d681329940afaf841d42fcc1038e4f740360de20cf344ab1e2734a64f4d4912d64736f6c634300080c0033"; + +type BrokenBLSAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BrokenBLSAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BrokenBLSAccountFactory__factory extends ContractFactory { + constructor(...args: BrokenBLSAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + aggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + aggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + aggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(aggregator, overrides || {}); + } + override attach(address: string): BrokenBLSAccountFactory { + return super.attach(address) as BrokenBLSAccountFactory; + } + override connect(signer: Signer): BrokenBLSAccountFactory__factory { + return super.connect(signer) as BrokenBLSAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BrokenBLSAccountFactoryInterface { + return new utils.Interface(_abi) as BrokenBLSAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BrokenBLSAccountFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as BrokenBLSAccountFactory; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts new file mode 100644 index 00000000..63676b77 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts @@ -0,0 +1,803 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../common"; +import type { + BrokenBLSAccount, + BrokenBLSAccountInterface, +} from "../../../../../src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256[4]", + name: "oldPublicKey", + type: "uint256[4]", + }, + { + indexed: false, + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", + }, + ], + name: "PublicKeyChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "aggregator", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getBlsPublicKey", + outputs: [ + { + internalType: "uint256[4]", + name: "", + type: "uint256[4]", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162003dd038038062003dd083398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613c466200018a60003960008181610cc40152611b97015260008181610d8001528181610e0f01528181611048015281816110d701526111870152613c466000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b1461055c578063c399ec8814610585578063e02afbae146105b0578063f23a6e61146105db5761018b565b8063affed0e0146104dd578063b0d691fe14610508578063b61d27f6146105335761018b565b80634d44560d146103ec5780634f1ef2861461041557806352d1902d1461043157806379cbc5fa1461045c5780637b103999146104875780638da5cb5b146104b25761018b565b80631b71bb6e1161013e578063249cb3fa11610118578063249cb3fa1461033f5780633659cfe61461037c5780633a871cdd146103a55780634a58db19146103e25761018b565b80631b71bb6e146102ae57806320c13b0b146102d7578063245a7bfc146103145761018b565b806223de291461019057806305d3177d146101b9578063150b7a02146101e25780631626ba7e1461021f57806318dfb3c71461025c5780631a5da6c8146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b2919061217c565b610618565b005b3480156101c557600080fd5b506101e060048036038101906101db91906123c6565b61065d565b005b3480156101ee57600080fd5b5061020960048036038101906102049190612419565b6107a7565b60405161021691906124dc565b60405180910390f35b34801561022b57600080fd5b506102466004803603810190610241919061252d565b6107bc565b60405161025391906124dc565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190612639565b61089f565b005b34801561029157600080fd5b506102ac60048036038101906102a791906126ba565b6109b1565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906126ba565b610ac5565b005b3480156102e357600080fd5b506102fe60048036038101906102f991906126e7565b610bdc565b60405161030b91906124dc565b60405180910390f35b34801561032057600080fd5b50610329610cc2565b6040516103369190612777565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612792565b610ce6565b60405161037391906127e1565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906126ba565b610d7e565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612821565b610f07565b6040516103d9919061289f565b60405180910390f35b6103ea610f51565b005b3480156103f857600080fd5b50610413600480360381019061040e91906128f8565b610fc6565b005b61042f600480360381019061042a91906129ed565b611046565b005b34801561043d57600080fd5b50610446611183565b60405161045391906127e1565b60405180910390f35b34801561046857600080fd5b5061047161123c565b60405161047e9190612777565b60405180910390f35b34801561049357600080fd5b5061049c611260565b6040516104a99190612777565b60405180910390f35b3480156104be57600080fd5b506104c7611289565b6040516104d49190612777565b60405180910390f35b3480156104e957600080fd5b506104f26112af565b6040516104ff919061289f565b60405180910390f35b34801561051457600080fd5b5061051d6112df565b60405161052a9190612aa8565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ac3565b611309565b005b34801561056857600080fd5b50610583600480360381019061057e9190612b37565b611366565b005b34801561059157600080fd5b5061059a6114af565b6040516105a7919061289f565b60405180910390f35b3480156105bc57600080fd5b506105c5611537565b6040516105d29190612c35565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190612c50565b61154e565b60405161060f91906124dc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161064b93929190612cea565b60405180910390a15050505050505050565b60008060159054906101000a900460ff1615905080801561069057506001600060149054906101000a900460ff1660ff16105b806106bf575061069f30611564565b1580156106be57506001600060149054906101000a900460ff1660ff16145b5b6106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff160217905550801561073c576001600060156101000a81548160ff0219169083151502179055505b61074884846000611587565b80156107a15760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107989190612e0c565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161081e9493929190612e65565b602060405180830381865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612edd565b6108705763ffffffff60e01b610896565b60405160200161087f90612f61565b604051602081830303815290604052805190602001205b90509392505050565b6108a7611723565b8181905084849050146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690612fe8565b60405180910390fd5b60005b848490508110156109aa5761099785858381811061091357610912613008565b5b905060200201602081019061092891906126ba565b600085858581811061093d5761093c613008565b5b905060200281019061094f9190613046565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b80806109a2906130d8565b9150506108f2565b5050505050565b6109b9611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613193565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a7a9291906131b3565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acd611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061324e565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610b909291906131b3565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610c4095949392919061326e565b602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612edd565b610c925763ffffffff60e01b610cb8565b604051602001610ca190613303565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610cf890613364565b6040516020818303038152906040528051906020012084148015610d4757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d7457604051602001610d5b906133c5565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e049061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e4c61193e565b73ffffffffffffffffffffffffffffffffffffffff1614610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906134de565b60405180910390fd5b610eab81611995565b610f0481600067ffffffffffffffff811115610eca57610ec961229a565b5b6040519080825280601f01601f191660200182016040528015610efc5781602001600182028036833780820191505090505b5060006119a0565b50565b6000610f11611b0e565b610f1b8484611b85565b90506000848060400190610f2f9190613046565b90501415610f4157610f4084611bfa565b5b610f4a82611ca8565b9392505050565b610f596112df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f929190612777565b6000604051808303818588803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b5050505050565b610fce611876565b610fd66112df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161101092919061350d565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661111461193e565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134de565b60405180910390fd5b61117382611995565b61117f828260016119a0565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906135a8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611311611723565b611360848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b50505050565b60008060159054906101000a900460ff1615905080801561139957506001600060149054906101000a900460ff1660ff16105b806113c857506113a830611564565b1580156113c757506001600060149054906101000a900460ff1660ff16145b5b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611445576001600060156101000a81548160ff0219169083151502179055505b611450848484611587565b80156114a95760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516114a09190612e0c565b60405180910390a15b50505050565b60006114b96112df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114f19190612777565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153291906135dd565b905090565b61153f61204d565b61154761204d565b8091505090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b61172b6112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117b157506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061367c565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161181b9190613716565b60006040518083038185875af1925050503d8060008114611858576040519150601f19603f3d011682016040523d82523d6000602084013e61185d565b606091505b50915091508161186f57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118fd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613779565b60405180910390fd5b565b600061196c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199d611876565b50565b6119cc7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d4e565b60000160009054906101000a900460ff16156119f0576119eb83611d58565b611b09565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a5857506040513d601f19601f82011682018060405250810190611a5591906137ae565b60015b611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e9061384d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906138df565b60405180910390fd5b50611b08838383611e11565b5b505050565b611b166112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613971565b60405180910390fd5b565b6000611bf260405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611e3d565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611c29906139a9565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613a2a565b60405180910390fd5b50565b60008114611d415760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611cf890613a70565b600060405180830381858888f193505050503d8060008114611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611d6181611564565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790613af7565b60405180910390fd5b80611dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1a83611e85565b600082511180611e275750805b15611e3857611e368383611ed4565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611e8e81611d58565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ef98383604051806060016040528060278152602001613bea60279139611f01565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f2b9190613716565b600060405180830381855af49150503d8060008114611f66576040519150601f19603f3d011682016040523d82523d6000602084013e611f6b565b606091505b5091509150611f7c86838387611f87565b925050509392505050565b60608315611fea57600083511415611fe257611fa285611564565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b63565b60405180910390fd5b5b829050611ff5565b611ff48383611ffd565b5b949350505050565b6000825111156120105781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120449190613bc7565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120ae82612083565b9050919050565b6120be816120a3565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b6000819050919050565b6120f4816120e1565b81146120ff57600080fd5b50565b600081359050612111816120eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261213c5761213b612117565b5b8235905067ffffffffffffffff8111156121595761215861211c565b5b60208301915083600182028301111561217557612174612121565b5b9250929050565b60008060008060008060008060c0898b03121561219c5761219b612079565b5b60006121aa8b828c016120cc565b98505060206121bb8b828c016120cc565b97505060406121cc8b828c016120cc565b96505060606121dd8b828c01612102565b955050608089013567ffffffffffffffff8111156121fe576121fd61207e565b5b61220a8b828c01612126565b945094505060a089013567ffffffffffffffff81111561222d5761222c61207e565b5b6122398b828c01612126565b92509250509295985092959890939650565b6000612256826120a3565b9050919050565b6122668161224b565b811461227157600080fd5b50565b6000813590506122838161225d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d282612289565b810181811067ffffffffffffffff821117156122f1576122f061229a565b5b80604052505050565b600061230461206f565b905061231082826122c9565b919050565b600067ffffffffffffffff8211156123305761232f61229a565b5b602082029050919050565b600061234e61234984612315565b6122fa565b9050806020840283018581111561236857612367612121565b5b835b81811015612391578061237d8882612102565b84526020840193505060208101905061236a565b5050509392505050565b600082601f8301126123b0576123af612117565b5b60046123bd84828561233b565b91505092915050565b600080600060c084860312156123df576123de612079565b5b60006123ed86828701612274565b93505060206123fe868287016120cc565b925050604061240f8682870161239b565b9150509250925092565b60008060008060006080868803121561243557612434612079565b5b6000612443888289016120cc565b9550506020612454888289016120cc565b945050604061246588828901612102565b935050606086013567ffffffffffffffff8111156124865761248561207e565b5b61249288828901612126565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d6816124a1565b82525050565b60006020820190506124f160008301846124cd565b92915050565b6000819050919050565b61250a816124f7565b811461251557600080fd5b50565b60008135905061252781612501565b92915050565b60008060006040848603121561254657612545612079565b5b600061255486828701612518565b935050602084013567ffffffffffffffff8111156125755761257461207e565b5b61258186828701612126565b92509250509250925092565b60008083601f8401126125a3576125a2612117565b5b8235905067ffffffffffffffff8111156125c0576125bf61211c565b5b6020830191508360208202830111156125dc576125db612121565b5b9250929050565b60008083601f8401126125f9576125f8612117565b5b8235905067ffffffffffffffff8111156126165761261561211c565b5b60208301915083602082028301111561263257612631612121565b5b9250929050565b6000806000806040858703121561265357612652612079565b5b600085013567ffffffffffffffff8111156126715761267061207e565b5b61267d8782880161258d565b9450945050602085013567ffffffffffffffff8111156126a05761269f61207e565b5b6126ac878288016125e3565b925092505092959194509250565b6000602082840312156126d0576126cf612079565b5b60006126de848285016120cc565b91505092915050565b6000806000806040858703121561270157612700612079565b5b600085013567ffffffffffffffff81111561271f5761271e61207e565b5b61272b87828801612126565b9450945050602085013567ffffffffffffffff81111561274e5761274d61207e565b5b61275a87828801612126565b925092505092959194509250565b612771816120a3565b82525050565b600060208201905061278c6000830184612768565b92915050565b600080604083850312156127a9576127a8612079565b5b60006127b785828601612518565b92505060206127c8858286016120cc565b9150509250929050565b6127db816124f7565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080fd5b60006101608284031215612818576128176127fc565b5b81905092915050565b60008060006060848603121561283a57612839612079565b5b600084013567ffffffffffffffff8111156128585761285761207e565b5b61286486828701612801565b935050602061287586828701612518565b925050604061288686828701612102565b9150509250925092565b612899816120e1565b82525050565b60006020820190506128b46000830184612890565b92915050565b60006128c582612083565b9050919050565b6128d5816128ba565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e612079565b5b600061291d858286016128e3565b925050602061292e85828601612102565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156129585761295761229a565b5b61296182612289565b9050602081019050919050565b82818337600083830152505050565b600061299061298b8461293d565b6122fa565b9050828152602081018484840111156129ac576129ab612938565b5b6129b784828561296e565b509392505050565b600082601f8301126129d4576129d3612117565b5b81356129e484826020860161297d565b91505092915050565b60008060408385031215612a0457612a03612079565b5b6000612a12858286016120cc565b925050602083013567ffffffffffffffff811115612a3357612a3261207e565b5b612a3f858286016129bf565b9150509250929050565b6000819050919050565b6000612a6e612a69612a6484612083565b612a49565b612083565b9050919050565b6000612a8082612a53565b9050919050565b6000612a9282612a75565b9050919050565b612aa281612a87565b82525050565b6000602082019050612abd6000830184612a99565b92915050565b60008060008060608587031215612add57612adc612079565b5b6000612aeb878288016120cc565b9450506020612afc87828801612102565b935050604085013567ffffffffffffffff811115612b1d57612b1c61207e565b5b612b2987828801612126565b925092505092959194509250565b600080600060608486031215612b5057612b4f612079565b5b6000612b5e86828701612274565b9350506020612b6f868287016120cc565b9250506040612b80868287016120cc565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612bb3816120e1565b82525050565b6000612bc58383612baa565b60208301905092915050565b6000602082019050919050565b612be781612b8a565b612bf18184612b95565b9250612bfc82612ba0565b8060005b83811015612c2d578151612c148782612bb9565b9650612c1f83612bd1565b925050600181019050612c00565b505050505050565b6000608082019050612c4a6000830184612bde565b92915050565b60008060008060008060a08789031215612c6d57612c6c612079565b5b6000612c7b89828a016120cc565b9650506020612c8c89828a016120cc565b9550506040612c9d89828a01612102565b9450506060612cae89828a01612102565b935050608087013567ffffffffffffffff811115612ccf57612cce61207e565b5b612cdb89828a01612126565b92509250509295509295509295565b6000606082019050612cff6000830186612768565b612d0c6020830185612768565b612d196040830184612890565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d8e602e83612d21565b9150612d9982612d32565b604082019050919050565b60006020820190508181036000830152612dbd81612d81565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612df6612df1612dec84612dc4565b612a49565b612dce565b9050919050565b612e0681612ddb565b82525050565b6000602082019050612e216000830184612dfd565b92915050565b600082825260208201905092915050565b6000612e448385612e27565b9350612e5183858461296e565b612e5a83612289565b840190509392505050565b6000606082019050612e7a6000830187612768565b612e8760208301866127d2565b8181036040830152612e9a818486612e38565b905095945050505050565b60008115159050919050565b612eba81612ea5565b8114612ec557600080fd5b50565b600081519050612ed781612eb1565b92915050565b600060208284031215612ef357612ef2612079565b5b6000612f0184828501612ec8565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612f4b601f83612f0a565b9150612f5682612f15565b601f82019050919050565b6000612f6c82612f3e565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612fd2603383612d21565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261306357613062613037565b5b80840192508235915067ffffffffffffffff8211156130855761308461303c565b5b6020830192506001820236038313156130a1576130a0613041565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130e3826120e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613116576131156130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061317d603183612d21565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b60006040820190506131c86000830185612768565b6131d56020830184612768565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613238603383612d21565b9150613243826131dc565b604082019050919050565b600060208201905081810360008301526132678161322b565b9050919050565b60006060820190506132836000830188612768565b8181036020830152613296818688612e38565b905081810360408301526132ab818486612e38565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006132ed601d83612f0a565b91506132f8826132b7565b601d82019050919050565b600061330e826132e0565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061334e601583612f0a565b915061335982613318565b601582019050919050565b600061336f82613341565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006133af601483612f0a565b91506133ba82613379565b601482019050919050565b60006133d0826133a2565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613436602c83612d21565b9150613441826133da565b604082019050919050565b6000602082019050818103600083015261346581613429565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006134c8602c83612d21565b91506134d38261346c565b604082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b613507816128ba565b82525050565b600060408201905061352260008301856134fe565b61352f6020830184612890565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613592603883612d21565b915061359d82613536565b604082019050919050565b600060208201905081810360008301526135c181613585565b9050919050565b6000815190506135d7816120eb565b92915050565b6000602082840312156135f3576135f2612079565b5b6000613601848285016135c8565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613666602983612d21565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156136d05780820151818401526020810190506136b5565b838111156136df576000848401525b50505050565b60006136f08261369c565b6136fa81856136a7565b935061370a8185602086016136b2565b80840191505092915050565b600061372282846136e5565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613763601c83612d21565b915061376e8261372d565b602082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b6000815190506137a881612501565b92915050565b6000602082840312156137c4576137c3612079565b5b60006137d284828501613799565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613837602e83612d21565b9150613842826137db565b604082019050919050565b600060208201905081810360008301526138668161382a565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006138c9602983612d21565b91506138d48261386d565b604082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061395b602483612d21565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006139b482613991565b91506bffffffffffffffffffffffff8214156139d3576139d26130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613a14601f83612d21565b9150613a1f826139de565b602082019050919050565b60006020820190508181036000830152613a4381613a07565b9050919050565b50565b6000613a5a6000836136a7565b9150613a6582613a4a565b600082019050919050565b6000613a7b82613a4d565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613ae1602d83612d21565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b4d601d83612d21565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b600081519050919050565b6000613b9982613b83565b613ba38185612d21565b9350613bb38185602086016136b2565b613bbc81612289565b840191505092915050565b60006020820190508181036000830152613be18184613b8e565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d681329940afaf841d42fcc1038e4f740360de20cf344ab1e2734a64f4d4912d64736f6c634300080c0033"; + +type BrokenBLSAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: BrokenBLSAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class BrokenBLSAccount__factory extends ContractFactory { + constructor(...args: BrokenBLSAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anAggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): BrokenBLSAccount { + return super.attach(address) as BrokenBLSAccount; + } + override connect(signer: Signer): BrokenBLSAccount__factory { + return super.connect(signer) as BrokenBLSAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): BrokenBLSAccountInterface { + return new utils.Interface(_abi) as BrokenBLSAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BrokenBLSAccount { + return new Contract(address, _abi, signerOrProvider) as BrokenBLSAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts new file mode 100644 index 00000000..7690375f --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { BrokenBLSAccount__factory } from "./BrokenBLSAccount__factory"; +export { BrokenBLSAccountFactory__factory } from "./BrokenBLSAccountFactory__factory"; diff --git a/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts new file mode 100644 index 00000000..87607851 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts @@ -0,0 +1,168 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + PayableOverrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + MaliciousAccount, + MaliciousAccountInterface, +} from "../../../../src/aa-4337/test/MaliciousAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_ep", + type: "address", + }, + ], + stateMutability: "payable", + type: "constructor", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x6080604052604051610607380380610607833981810160405281019061002591906100e0565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009b82610070565b9050919050565b60006100ad82610090565b9050919050565b6100bd816100a2565b81146100c857600080fd5b50565b6000815190506100da816100b4565b92915050565b6000602082840312156100f6576100f561006b565b5b6000610104848285016100cb565b91505092915050565b6104eb8061011c6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a871cdd14610030575b600080fd5b61004a6004803603810190610045919061022a565b610060565b60405161005791906102a8565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b81526004016100bd9190610304565b6000604051808303818588803b1580156100d657600080fd5b505af11580156100ea573d6000803e3d6000fd5b505050505060008460c001358560a00135866080013561010a919061034e565b610114919061034e565b90506000818461012491906103d3565b90506000866101000135826101399190610404565b905086602001358114610181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017890610495565b60405180910390fd5b600093505050509392505050565b600080fd5b600080fd5b600080fd5b600061016082840312156101b5576101b4610199565b5b81905092915050565b6000819050919050565b6101d1816101be565b81146101dc57600080fd5b50565b6000813590506101ee816101c8565b92915050565b6000819050919050565b610207816101f4565b811461021257600080fd5b50565b600081359050610224816101fe565b92915050565b6000806000606084860312156102435761024261018f565b5b600084013567ffffffffffffffff81111561026157610260610194565b5b61026d8682870161019e565b935050602061027e868287016101df565b925050604061028f86828701610215565b9150509250925092565b6102a2816101f4565b82525050565b60006020820190506102bd6000830184610299565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102ee826102c3565b9050919050565b6102fe816102e3565b82525050565b600060208201905061031960008301846102f5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610359826101f4565b9150610364836101f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103995761039861031f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006103de826101f4565b91506103e9836101f4565b9250826103f9576103f86103a4565b5b828204905092915050565b600061040f826101f4565b915061041a836101f4565b92508282101561042d5761042c61031f565b5b828203905092915050565b600082825260208201905092915050565b7f5265766572742061667465722066697273742076616c69646174696f6e000000600082015250565b600061047f601d83610438565b915061048a82610449565b602082019050919050565b600060208201905081810360008301526104ae81610472565b905091905056fea264697066735822122099332b3f09d8268dca15aa7275cf4e661e4a287298292021e73dc2765563482264736f6c634300080c0033"; + +type MaliciousAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: MaliciousAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class MaliciousAccount__factory extends ContractFactory { + constructor(...args: MaliciousAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(_ep, overrides || {}) as Promise; + } + override getDeployTransaction( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_ep, overrides || {}); + } + override attach(address: string): MaliciousAccount { + return super.attach(address) as MaliciousAccount; + } + override connect(signer: Signer): MaliciousAccount__factory { + return super.connect(signer) as MaliciousAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): MaliciousAccountInterface { + return new utils.Interface(_abi) as MaliciousAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): MaliciousAccount { + return new Contract(address, _abi, signerOrProvider) as MaliciousAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts new file mode 100644 index 00000000..996ca765 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts @@ -0,0 +1,164 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestAggregatedAccountFactory, + TestAggregatedAccountFactoryInterface, +} from "../../../../src/aa-4337/test/TestAggregatedAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract TestAggregatedAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract TestAggregatedAccount", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b5060405162004f5638038062004f5683398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b6139fa806200155c83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516113ca620001926000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206d09ac52964ac9cc5a488deefb74933cd9f8a3a5011361362292b85d7e998d1b64736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039fa380380620039fa83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516138706200018a60003960008181610af001526117ee015260008181610bac01528181610c3b01528181610e7401528181610f030152610fb301526138706000f3fe60806040526004361061014e5760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e01461047e578063b0d691fe146104a9578063b61d27f6146104d4578063c0c53b8b146104fd578063c399ec8814610526578063f23a6e611461055157610155565b80634d44560d1461038d5780634f1ef286146103b657806352d1902d146103d257806379cbc5fa146103fd5780637b103999146104285780638da5cb5b1461045357610155565b806320c13b0b1161010857806320c13b0b14610278578063245a7bfc146102b5578063249cb3fa146102e05780633659cfe61461031d5780633a871cdd146103465780634a58db191461038357610155565b806223de291461015a578063150b7a02146101835780631626ba7e146101c057806318dfb3c7146101fd5780631a5da6c8146102265780631b71bb6e1461024f57610155565b3661015557005b600080fd5b34801561016657600080fd5b50610181600480360381019061017c9190611f70565b61058e565b005b34801561018f57600080fd5b506101aa60048036038101906101a5919061203f565b6105d3565b6040516101b79190612102565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190612153565b6105e8565b6040516101f49190612102565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f919061225f565b6106cb565b005b34801561023257600080fd5b5061024d600480360381019061024891906122e0565b6107dd565b005b34801561025b57600080fd5b50610276600480360381019061027191906122e0565b6108f1565b005b34801561028457600080fd5b5061029f600480360381019061029a919061230d565b610a08565b6040516102ac9190612102565b60405180910390f35b3480156102c157600080fd5b506102ca610aee565b6040516102d7919061239d565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906123b8565b610b12565b6040516103149190612407565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906122e0565b610baa565b005b34801561035257600080fd5b5061036d60048036038101906103689190612447565b610d33565b60405161037a91906124c5565b60405180910390f35b61038b610d7d565b005b34801561039957600080fd5b506103b460048036038101906103af919061251e565b610df2565b005b6103d060048036038101906103cb919061269f565b610e72565b005b3480156103de57600080fd5b506103e7610faf565b6040516103f49190612407565b60405180910390f35b34801561040957600080fd5b50610412611068565b60405161041f919061239d565b60405180910390f35b34801561043457600080fd5b5061043d61108c565b60405161044a919061239d565b60405180910390f35b34801561045f57600080fd5b506104686110b5565b604051610475919061239d565b60405180910390f35b34801561048a57600080fd5b506104936110db565b6040516104a091906124c5565b60405180910390f35b3480156104b557600080fd5b506104be61110b565b6040516104cb919061275a565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612775565b611135565b005b34801561050957600080fd5b50610524600480360381019061051f9190612827565b611192565b005b34801561053257600080fd5b5061053b6112dc565b60405161054891906124c5565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061287a565b611364565b6040516105859190612102565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d156508787876040516105c193929190612914565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161064a9493929190612989565b602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190612a01565b61069c5763ffffffff60e01b6106c2565b6040516020016106ab90612a85565b604051602081830303815290604052805190602001205b90509392505050565b6106d361137a565b81819050848490501461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290612b1d565b60405180910390fd5b60005b848490508110156107d6576107c385858381811061073f5761073e612b3d565b5b905060200201602081019061075491906122e0565b600085858581811061076957610768612b3d565b5b905060200281019061077b9190612b7b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b80806107ce90612c0d565b91505061071e565b5050505050565b6107e56114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612cc8565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108a6929190612ce8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f96114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096090612d83565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516109bc929190612ce8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a6c959493929190612da3565b602060405180830381865afa158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190612a01565b610abe5763ffffffff60e01b610ae4565b604051602001610acd90612e38565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b2490612e99565b6040516020818303038152906040528051906020012084148015610b7357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ba057604051602001610b8790612efa565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c78611595565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613013565b60405180910390fd5b610cd7816115ec565b610d3081600067ffffffffffffffff811115610cf657610cf5612574565b5b6040519080825280601f01601f191660200182016040528015610d285781602001600182028036833780820191505090505b5060006115f7565b50565b6000610d3d611765565b610d4784846117dc565b90506000848060400190610d5b9190612b7b565b90501415610d6d57610d6c84611851565b5b610d76826118ff565b9392505050565b610d8561110b565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610dbe919061239d565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050505050565b610dfa6114cd565b610e0261110b565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610e3c929190613042565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f40611595565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613013565b60405180910390fd5b610f9f826115ec565b610fab828260016115f7565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906130dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61113d61137a565b61118c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b50505050565b60008060159054906101000a900460ff161590508080156111c557506001600060149054906101000a900460ff1660ff16105b806111f457506111d43061199b565b1580156111f357506001600060149054906101000a900460ff1660ff16145b5b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061316f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611271576001600060156101000a81548160ff0219169083151502179055505b61127d848460006119be565b80156112d65760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112cd91906131d7565b60405180910390a15b50505050565b60006112e661110b565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161131e919061239d565b602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613207565b905090565b600063f23a6e6160e01b90509695505050505050565b61138261110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140857506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906132a6565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114729190613340565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c657805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061155457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a906133a3565b60405180910390fd5b565b60006115c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46114cd565b50565b6116237f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b64565b60000160009054906101000a900460ff16156116475761164283611b6e565b611760565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116af57506040513d601f19601f820116820180604052508101906116ac91906133d8565b60015b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613477565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a90613509565b60405180910390fd5b5061175f838383611c27565b5b505050565b61176d61110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d19061359b565b60405180910390fd5b565b600061184960405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611c53565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611880906135d3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613654565b60405180910390fd5b50565b600081146119985760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161194f9061369a565b600060405180830381858888f193505050503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b778161199b565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613721565b60405180910390fd5b80611be37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3083611c9b565b600082511180611c3d5750805b15611c4e57611c4c8383611cea565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611ca481611b6e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d0f838360405180606001604052806027815260200161381460279139611d17565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d419190613340565b600060405180830381855af49150503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b5091509150611d9286838387611d9d565b925050509392505050565b60608315611e0057600083511415611df857611db88561199b565b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061378d565b60405180910390fd5b5b829050611e0b565b611e0a8383611e13565b5b949350505050565b600082511115611e265781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a91906137f1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ea282611e77565b9050919050565b611eb281611e97565b8114611ebd57600080fd5b50565b600081359050611ecf81611ea9565b92915050565b6000819050919050565b611ee881611ed5565b8114611ef357600080fd5b50565b600081359050611f0581611edf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f3057611f2f611f0b565b5b8235905067ffffffffffffffff811115611f4d57611f4c611f10565b5b602083019150836001820283011115611f6957611f68611f15565b5b9250929050565b60008060008060008060008060c0898b031215611f9057611f8f611e6d565b5b6000611f9e8b828c01611ec0565b9850506020611faf8b828c01611ec0565b9750506040611fc08b828c01611ec0565b9650506060611fd18b828c01611ef6565b955050608089013567ffffffffffffffff811115611ff257611ff1611e72565b5b611ffe8b828c01611f1a565b945094505060a089013567ffffffffffffffff81111561202157612020611e72565b5b61202d8b828c01611f1a565b92509250509295985092959890939650565b60008060008060006080868803121561205b5761205a611e6d565b5b600061206988828901611ec0565b955050602061207a88828901611ec0565b945050604061208b88828901611ef6565b935050606086013567ffffffffffffffff8111156120ac576120ab611e72565b5b6120b888828901611f1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120fc816120c7565b82525050565b600060208201905061211760008301846120f3565b92915050565b6000819050919050565b6121308161211d565b811461213b57600080fd5b50565b60008135905061214d81612127565b92915050565b60008060006040848603121561216c5761216b611e6d565b5b600061217a8682870161213e565b935050602084013567ffffffffffffffff81111561219b5761219a611e72565b5b6121a786828701611f1a565b92509250509250925092565b60008083601f8401126121c9576121c8611f0b565b5b8235905067ffffffffffffffff8111156121e6576121e5611f10565b5b60208301915083602082028301111561220257612201611f15565b5b9250929050565b60008083601f84011261221f5761221e611f0b565b5b8235905067ffffffffffffffff81111561223c5761223b611f10565b5b60208301915083602082028301111561225857612257611f15565b5b9250929050565b6000806000806040858703121561227957612278611e6d565b5b600085013567ffffffffffffffff81111561229757612296611e72565b5b6122a3878288016121b3565b9450945050602085013567ffffffffffffffff8111156122c6576122c5611e72565b5b6122d287828801612209565b925092505092959194509250565b6000602082840312156122f6576122f5611e6d565b5b600061230484828501611ec0565b91505092915050565b6000806000806040858703121561232757612326611e6d565b5b600085013567ffffffffffffffff81111561234557612344611e72565b5b61235187828801611f1a565b9450945050602085013567ffffffffffffffff81111561237457612373611e72565b5b61238087828801611f1a565b925092505092959194509250565b61239781611e97565b82525050565b60006020820190506123b2600083018461238e565b92915050565b600080604083850312156123cf576123ce611e6d565b5b60006123dd8582860161213e565b92505060206123ee85828601611ec0565b9150509250929050565b6124018161211d565b82525050565b600060208201905061241c60008301846123f8565b92915050565b600080fd5b6000610160828403121561243e5761243d612422565b5b81905092915050565b6000806000606084860312156124605761245f611e6d565b5b600084013567ffffffffffffffff81111561247e5761247d611e72565b5b61248a86828701612427565b935050602061249b8682870161213e565b92505060406124ac86828701611ef6565b9150509250925092565b6124bf81611ed5565b82525050565b60006020820190506124da60008301846124b6565b92915050565b60006124eb82611e77565b9050919050565b6124fb816124e0565b811461250657600080fd5b50565b600081359050612518816124f2565b92915050565b6000806040838503121561253557612534611e6d565b5b600061254385828601612509565b925050602061255485828601611ef6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125ac82612563565b810181811067ffffffffffffffff821117156125cb576125ca612574565b5b80604052505050565b60006125de611e63565b90506125ea82826125a3565b919050565b600067ffffffffffffffff82111561260a57612609612574565b5b61261382612563565b9050602081019050919050565b82818337600083830152505050565b600061264261263d846125ef565b6125d4565b90508281526020810184848401111561265e5761265d61255e565b5b612669848285612620565b509392505050565b600082601f83011261268657612685611f0b565b5b813561269684826020860161262f565b91505092915050565b600080604083850312156126b6576126b5611e6d565b5b60006126c485828601611ec0565b925050602083013567ffffffffffffffff8111156126e5576126e4611e72565b5b6126f185828601612671565b9150509250929050565b6000819050919050565b600061272061271b61271684611e77565b6126fb565b611e77565b9050919050565b600061273282612705565b9050919050565b600061274482612727565b9050919050565b61275481612739565b82525050565b600060208201905061276f600083018461274b565b92915050565b6000806000806060858703121561278f5761278e611e6d565b5b600061279d87828801611ec0565b94505060206127ae87828801611ef6565b935050604085013567ffffffffffffffff8111156127cf576127ce611e72565b5b6127db87828801611f1a565b925092505092959194509250565b60006127f482611e97565b9050919050565b612804816127e9565b811461280f57600080fd5b50565b600081359050612821816127fb565b92915050565b6000806000606084860312156128405761283f611e6d565b5b600061284e86828701612812565b935050602061285f86828701611ec0565b925050604061287086828701611ec0565b9150509250925092565b60008060008060008060a0878903121561289757612896611e6d565b5b60006128a589828a01611ec0565b96505060206128b689828a01611ec0565b95505060406128c789828a01611ef6565b94505060606128d889828a01611ef6565b935050608087013567ffffffffffffffff8111156128f9576128f8611e72565b5b61290589828a01611f1a565b92509250509295509295509295565b6000606082019050612929600083018661238e565b612936602083018561238e565b61294360408301846124b6565b949350505050565b600082825260208201905092915050565b6000612968838561294b565b9350612975838584612620565b61297e83612563565b840190509392505050565b600060608201905061299e600083018761238e565b6129ab60208301866123f8565b81810360408301526129be81848661295c565b905095945050505050565b60008115159050919050565b6129de816129c9565b81146129e957600080fd5b50565b6000815190506129fb816129d5565b92915050565b600060208284031215612a1757612a16611e6d565b5b6000612a25848285016129ec565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612a6f601f83612a2e565b9150612a7a82612a39565b601f82019050919050565b6000612a9082612a62565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612b07603383612a9a565b9150612b1282612aab565b604082019050919050565b60006020820190508181036000830152612b3681612afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b9857612b97612b6c565b5b80840192508235915067ffffffffffffffff821115612bba57612bb9612b71565b5b602083019250600182023603831315612bd657612bd5612b76565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1882611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4b57612c4a612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612cb2603183612a9a565b9150612cbd82612c56565b604082019050919050565b60006020820190508181036000830152612ce181612ca5565b9050919050565b6000604082019050612cfd600083018561238e565b612d0a602083018461238e565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612d6d603383612a9a565b9150612d7882612d11565b604082019050919050565b60006020820190508181036000830152612d9c81612d60565b9050919050565b6000606082019050612db8600083018861238e565b8181036020830152612dcb81868861295c565b90508181036040830152612de081848661295c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612e22601d83612a2e565b9150612e2d82612dec565b601d82019050919050565b6000612e4382612e15565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000612e83601583612a2e565b9150612e8e82612e4d565b601582019050919050565b6000612ea482612e76565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000612ee4601483612a2e565b9150612eef82612eae565b601482019050919050565b6000612f0582612ed7565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612f6b602c83612a9a565b9150612f7682612f0f565b604082019050919050565b60006020820190508181036000830152612f9a81612f5e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ffd602c83612a9a565b915061300882612fa1565b604082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b61303c816124e0565b82525050565b60006040820190506130576000830185613033565b61306460208301846124b6565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006130c7603883612a9a565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613159602e83612a9a565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b6000819050919050565b600060ff82169050919050565b60006131c16131bc6131b78461318f565b6126fb565b613199565b9050919050565b6131d1816131a6565b82525050565b60006020820190506131ec60008301846131c8565b92915050565b60008151905061320181611edf565b92915050565b60006020828403121561321d5761321c611e6d565b5b600061322b848285016131f2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613290602983612a9a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b83811115613309576000848401525b50505050565b600061331a826132c6565b61332481856132d1565b93506133348185602086016132dc565b80840191505092915050565b600061334c828461330f565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061338d601c83612a9a565b915061339882613357565b602082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b6000815190506133d281612127565b92915050565b6000602082840312156133ee576133ed611e6d565b5b60006133fc848285016133c3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613461602e83612a9a565b915061346c82613405565b604082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006134f3602983612a9a565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613585602483612a9a565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006135de826135bb565b91506bffffffffffffffffffffffff8214156135fd576135fc612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061363e601f83612a9a565b915061364982613608565b602082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b50565b60006136846000836132d1565b915061368f82613674565b600082019050919050565b60006136a582613677565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061370b602d83612a9a565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613777601d83612a9a565b915061378282613741565b602082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b600081519050919050565b60006137c3826137ad565b6137cd8185612a9a565b93506137dd8185602086016132dc565b6137e681612563565b840191505092915050565b6000602082019050818103600083015261380b81846137b8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dbbd5559e3326881dda71ce0f054137186932c3a13d23a194356cd589c120f5264736f6c634300080c0033"; + +type TestAggregatedAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestAggregatedAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestAggregatedAccountFactory__factory extends ContractFactory { + constructor(...args: TestAggregatedAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anAggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): TestAggregatedAccountFactory { + return super.attach(address) as TestAggregatedAccountFactory; + } + override connect(signer: Signer): TestAggregatedAccountFactory__factory { + return super.connect(signer) as TestAggregatedAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestAggregatedAccountFactoryInterface { + return new utils.Interface(_abi) as TestAggregatedAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestAggregatedAccountFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestAggregatedAccountFactory; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts new file mode 100644 index 00000000..00241f58 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts @@ -0,0 +1,752 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestAggregatedAccount, + TestAggregatedAccountInterface, +} from "../../../../src/aa-4337/test/TestAggregatedAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "anAggregator", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "aggregator", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039fa380380620039fa83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516138706200018a60003960008181610af001526117ee015260008181610bac01528181610c3b01528181610e7401528181610f030152610fb301526138706000f3fe60806040526004361061014e5760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e01461047e578063b0d691fe146104a9578063b61d27f6146104d4578063c0c53b8b146104fd578063c399ec8814610526578063f23a6e611461055157610155565b80634d44560d1461038d5780634f1ef286146103b657806352d1902d146103d257806379cbc5fa146103fd5780637b103999146104285780638da5cb5b1461045357610155565b806320c13b0b1161010857806320c13b0b14610278578063245a7bfc146102b5578063249cb3fa146102e05780633659cfe61461031d5780633a871cdd146103465780634a58db191461038357610155565b806223de291461015a578063150b7a02146101835780631626ba7e146101c057806318dfb3c7146101fd5780631a5da6c8146102265780631b71bb6e1461024f57610155565b3661015557005b600080fd5b34801561016657600080fd5b50610181600480360381019061017c9190611f70565b61058e565b005b34801561018f57600080fd5b506101aa60048036038101906101a5919061203f565b6105d3565b6040516101b79190612102565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190612153565b6105e8565b6040516101f49190612102565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f919061225f565b6106cb565b005b34801561023257600080fd5b5061024d600480360381019061024891906122e0565b6107dd565b005b34801561025b57600080fd5b50610276600480360381019061027191906122e0565b6108f1565b005b34801561028457600080fd5b5061029f600480360381019061029a919061230d565b610a08565b6040516102ac9190612102565b60405180910390f35b3480156102c157600080fd5b506102ca610aee565b6040516102d7919061239d565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906123b8565b610b12565b6040516103149190612407565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906122e0565b610baa565b005b34801561035257600080fd5b5061036d60048036038101906103689190612447565b610d33565b60405161037a91906124c5565b60405180910390f35b61038b610d7d565b005b34801561039957600080fd5b506103b460048036038101906103af919061251e565b610df2565b005b6103d060048036038101906103cb919061269f565b610e72565b005b3480156103de57600080fd5b506103e7610faf565b6040516103f49190612407565b60405180910390f35b34801561040957600080fd5b50610412611068565b60405161041f919061239d565b60405180910390f35b34801561043457600080fd5b5061043d61108c565b60405161044a919061239d565b60405180910390f35b34801561045f57600080fd5b506104686110b5565b604051610475919061239d565b60405180910390f35b34801561048a57600080fd5b506104936110db565b6040516104a091906124c5565b60405180910390f35b3480156104b557600080fd5b506104be61110b565b6040516104cb919061275a565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612775565b611135565b005b34801561050957600080fd5b50610524600480360381019061051f9190612827565b611192565b005b34801561053257600080fd5b5061053b6112dc565b60405161054891906124c5565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061287a565b611364565b6040516105859190612102565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d156508787876040516105c193929190612914565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161064a9493929190612989565b602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190612a01565b61069c5763ffffffff60e01b6106c2565b6040516020016106ab90612a85565b604051602081830303815290604052805190602001205b90509392505050565b6106d361137a565b81819050848490501461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290612b1d565b60405180910390fd5b60005b848490508110156107d6576107c385858381811061073f5761073e612b3d565b5b905060200201602081019061075491906122e0565b600085858581811061076957610768612b3d565b5b905060200281019061077b9190612b7b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b80806107ce90612c0d565b91505061071e565b5050505050565b6107e56114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612cc8565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108a6929190612ce8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f96114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096090612d83565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516109bc929190612ce8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a6c959493929190612da3565b602060405180830381865afa158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190612a01565b610abe5763ffffffff60e01b610ae4565b604051602001610acd90612e38565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b2490612e99565b6040516020818303038152906040528051906020012084148015610b7357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ba057604051602001610b8790612efa565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c78611595565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613013565b60405180910390fd5b610cd7816115ec565b610d3081600067ffffffffffffffff811115610cf657610cf5612574565b5b6040519080825280601f01601f191660200182016040528015610d285781602001600182028036833780820191505090505b5060006115f7565b50565b6000610d3d611765565b610d4784846117dc565b90506000848060400190610d5b9190612b7b565b90501415610d6d57610d6c84611851565b5b610d76826118ff565b9392505050565b610d8561110b565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610dbe919061239d565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050505050565b610dfa6114cd565b610e0261110b565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610e3c929190613042565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f40611595565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613013565b60405180910390fd5b610f9f826115ec565b610fab828260016115f7565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906130dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61113d61137a565b61118c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b50505050565b60008060159054906101000a900460ff161590508080156111c557506001600060149054906101000a900460ff1660ff16105b806111f457506111d43061199b565b1580156111f357506001600060149054906101000a900460ff1660ff16145b5b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061316f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611271576001600060156101000a81548160ff0219169083151502179055505b61127d848460006119be565b80156112d65760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112cd91906131d7565b60405180910390a15b50505050565b60006112e661110b565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161131e919061239d565b602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613207565b905090565b600063f23a6e6160e01b90509695505050505050565b61138261110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140857506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906132a6565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114729190613340565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c657805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061155457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a906133a3565b60405180910390fd5b565b60006115c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46114cd565b50565b6116237f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b64565b60000160009054906101000a900460ff16156116475761164283611b6e565b611760565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116af57506040513d601f19601f820116820180604052508101906116ac91906133d8565b60015b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613477565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a90613509565b60405180910390fd5b5061175f838383611c27565b5b505050565b61176d61110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d19061359b565b60405180910390fd5b565b600061184960405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611c53565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611880906135d3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613654565b60405180910390fd5b50565b600081146119985760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161194f9061369a565b600060405180830381858888f193505050503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b778161199b565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613721565b60405180910390fd5b80611be37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3083611c9b565b600082511180611c3d5750805b15611c4e57611c4c8383611cea565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611ca481611b6e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d0f838360405180606001604052806027815260200161381460279139611d17565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d419190613340565b600060405180830381855af49150503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b5091509150611d9286838387611d9d565b925050509392505050565b60608315611e0057600083511415611df857611db88561199b565b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061378d565b60405180910390fd5b5b829050611e0b565b611e0a8383611e13565b5b949350505050565b600082511115611e265781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a91906137f1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ea282611e77565b9050919050565b611eb281611e97565b8114611ebd57600080fd5b50565b600081359050611ecf81611ea9565b92915050565b6000819050919050565b611ee881611ed5565b8114611ef357600080fd5b50565b600081359050611f0581611edf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f3057611f2f611f0b565b5b8235905067ffffffffffffffff811115611f4d57611f4c611f10565b5b602083019150836001820283011115611f6957611f68611f15565b5b9250929050565b60008060008060008060008060c0898b031215611f9057611f8f611e6d565b5b6000611f9e8b828c01611ec0565b9850506020611faf8b828c01611ec0565b9750506040611fc08b828c01611ec0565b9650506060611fd18b828c01611ef6565b955050608089013567ffffffffffffffff811115611ff257611ff1611e72565b5b611ffe8b828c01611f1a565b945094505060a089013567ffffffffffffffff81111561202157612020611e72565b5b61202d8b828c01611f1a565b92509250509295985092959890939650565b60008060008060006080868803121561205b5761205a611e6d565b5b600061206988828901611ec0565b955050602061207a88828901611ec0565b945050604061208b88828901611ef6565b935050606086013567ffffffffffffffff8111156120ac576120ab611e72565b5b6120b888828901611f1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120fc816120c7565b82525050565b600060208201905061211760008301846120f3565b92915050565b6000819050919050565b6121308161211d565b811461213b57600080fd5b50565b60008135905061214d81612127565b92915050565b60008060006040848603121561216c5761216b611e6d565b5b600061217a8682870161213e565b935050602084013567ffffffffffffffff81111561219b5761219a611e72565b5b6121a786828701611f1a565b92509250509250925092565b60008083601f8401126121c9576121c8611f0b565b5b8235905067ffffffffffffffff8111156121e6576121e5611f10565b5b60208301915083602082028301111561220257612201611f15565b5b9250929050565b60008083601f84011261221f5761221e611f0b565b5b8235905067ffffffffffffffff81111561223c5761223b611f10565b5b60208301915083602082028301111561225857612257611f15565b5b9250929050565b6000806000806040858703121561227957612278611e6d565b5b600085013567ffffffffffffffff81111561229757612296611e72565b5b6122a3878288016121b3565b9450945050602085013567ffffffffffffffff8111156122c6576122c5611e72565b5b6122d287828801612209565b925092505092959194509250565b6000602082840312156122f6576122f5611e6d565b5b600061230484828501611ec0565b91505092915050565b6000806000806040858703121561232757612326611e6d565b5b600085013567ffffffffffffffff81111561234557612344611e72565b5b61235187828801611f1a565b9450945050602085013567ffffffffffffffff81111561237457612373611e72565b5b61238087828801611f1a565b925092505092959194509250565b61239781611e97565b82525050565b60006020820190506123b2600083018461238e565b92915050565b600080604083850312156123cf576123ce611e6d565b5b60006123dd8582860161213e565b92505060206123ee85828601611ec0565b9150509250929050565b6124018161211d565b82525050565b600060208201905061241c60008301846123f8565b92915050565b600080fd5b6000610160828403121561243e5761243d612422565b5b81905092915050565b6000806000606084860312156124605761245f611e6d565b5b600084013567ffffffffffffffff81111561247e5761247d611e72565b5b61248a86828701612427565b935050602061249b8682870161213e565b92505060406124ac86828701611ef6565b9150509250925092565b6124bf81611ed5565b82525050565b60006020820190506124da60008301846124b6565b92915050565b60006124eb82611e77565b9050919050565b6124fb816124e0565b811461250657600080fd5b50565b600081359050612518816124f2565b92915050565b6000806040838503121561253557612534611e6d565b5b600061254385828601612509565b925050602061255485828601611ef6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125ac82612563565b810181811067ffffffffffffffff821117156125cb576125ca612574565b5b80604052505050565b60006125de611e63565b90506125ea82826125a3565b919050565b600067ffffffffffffffff82111561260a57612609612574565b5b61261382612563565b9050602081019050919050565b82818337600083830152505050565b600061264261263d846125ef565b6125d4565b90508281526020810184848401111561265e5761265d61255e565b5b612669848285612620565b509392505050565b600082601f83011261268657612685611f0b565b5b813561269684826020860161262f565b91505092915050565b600080604083850312156126b6576126b5611e6d565b5b60006126c485828601611ec0565b925050602083013567ffffffffffffffff8111156126e5576126e4611e72565b5b6126f185828601612671565b9150509250929050565b6000819050919050565b600061272061271b61271684611e77565b6126fb565b611e77565b9050919050565b600061273282612705565b9050919050565b600061274482612727565b9050919050565b61275481612739565b82525050565b600060208201905061276f600083018461274b565b92915050565b6000806000806060858703121561278f5761278e611e6d565b5b600061279d87828801611ec0565b94505060206127ae87828801611ef6565b935050604085013567ffffffffffffffff8111156127cf576127ce611e72565b5b6127db87828801611f1a565b925092505092959194509250565b60006127f482611e97565b9050919050565b612804816127e9565b811461280f57600080fd5b50565b600081359050612821816127fb565b92915050565b6000806000606084860312156128405761283f611e6d565b5b600061284e86828701612812565b935050602061285f86828701611ec0565b925050604061287086828701611ec0565b9150509250925092565b60008060008060008060a0878903121561289757612896611e6d565b5b60006128a589828a01611ec0565b96505060206128b689828a01611ec0565b95505060406128c789828a01611ef6565b94505060606128d889828a01611ef6565b935050608087013567ffffffffffffffff8111156128f9576128f8611e72565b5b61290589828a01611f1a565b92509250509295509295509295565b6000606082019050612929600083018661238e565b612936602083018561238e565b61294360408301846124b6565b949350505050565b600082825260208201905092915050565b6000612968838561294b565b9350612975838584612620565b61297e83612563565b840190509392505050565b600060608201905061299e600083018761238e565b6129ab60208301866123f8565b81810360408301526129be81848661295c565b905095945050505050565b60008115159050919050565b6129de816129c9565b81146129e957600080fd5b50565b6000815190506129fb816129d5565b92915050565b600060208284031215612a1757612a16611e6d565b5b6000612a25848285016129ec565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612a6f601f83612a2e565b9150612a7a82612a39565b601f82019050919050565b6000612a9082612a62565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612b07603383612a9a565b9150612b1282612aab565b604082019050919050565b60006020820190508181036000830152612b3681612afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b9857612b97612b6c565b5b80840192508235915067ffffffffffffffff821115612bba57612bb9612b71565b5b602083019250600182023603831315612bd657612bd5612b76565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1882611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4b57612c4a612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612cb2603183612a9a565b9150612cbd82612c56565b604082019050919050565b60006020820190508181036000830152612ce181612ca5565b9050919050565b6000604082019050612cfd600083018561238e565b612d0a602083018461238e565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612d6d603383612a9a565b9150612d7882612d11565b604082019050919050565b60006020820190508181036000830152612d9c81612d60565b9050919050565b6000606082019050612db8600083018861238e565b8181036020830152612dcb81868861295c565b90508181036040830152612de081848661295c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612e22601d83612a2e565b9150612e2d82612dec565b601d82019050919050565b6000612e4382612e15565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000612e83601583612a2e565b9150612e8e82612e4d565b601582019050919050565b6000612ea482612e76565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000612ee4601483612a2e565b9150612eef82612eae565b601482019050919050565b6000612f0582612ed7565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612f6b602c83612a9a565b9150612f7682612f0f565b604082019050919050565b60006020820190508181036000830152612f9a81612f5e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ffd602c83612a9a565b915061300882612fa1565b604082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b61303c816124e0565b82525050565b60006040820190506130576000830185613033565b61306460208301846124b6565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006130c7603883612a9a565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613159602e83612a9a565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b6000819050919050565b600060ff82169050919050565b60006131c16131bc6131b78461318f565b6126fb565b613199565b9050919050565b6131d1816131a6565b82525050565b60006020820190506131ec60008301846131c8565b92915050565b60008151905061320181611edf565b92915050565b60006020828403121561321d5761321c611e6d565b5b600061322b848285016131f2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613290602983612a9a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b83811115613309576000848401525b50505050565b600061331a826132c6565b61332481856132d1565b93506133348185602086016132dc565b80840191505092915050565b600061334c828461330f565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061338d601c83612a9a565b915061339882613357565b602082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b6000815190506133d281612127565b92915050565b6000602082840312156133ee576133ed611e6d565b5b60006133fc848285016133c3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613461602e83612a9a565b915061346c82613405565b604082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006134f3602983612a9a565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613585602483612a9a565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006135de826135bb565b91506bffffffffffffffffffffffff8214156135fd576135fc612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061363e601f83612a9a565b915061364982613608565b602082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b50565b60006136846000836132d1565b915061368f82613674565b600082019050919050565b60006136a582613677565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061370b602d83612a9a565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613777601d83612a9a565b915061378282613741565b602082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b600081519050919050565b60006137c3826137ad565b6137cd8185612a9a565b93506137dd8185602086016132dc565b6137e681612563565b840191505092915050565b6000602082019050818103600083015261380b81846137b8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dbbd5559e3326881dda71ce0f054137186932c3a13d23a194356cd589c120f5264736f6c634300080c0033"; + +type TestAggregatedAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestAggregatedAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestAggregatedAccount__factory extends ContractFactory { + constructor(...args: TestAggregatedAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anAggregator, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anAggregator: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anAggregator, overrides || {}); + } + override attach(address: string): TestAggregatedAccount { + return super.attach(address) as TestAggregatedAccount; + } + override connect(signer: Signer): TestAggregatedAccount__factory { + return super.connect(signer) as TestAggregatedAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestAggregatedAccountInterface { + return new utils.Interface(_abi) as TestAggregatedAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestAggregatedAccount { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestAggregatedAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts b/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts new file mode 100644 index 00000000..ea241c61 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts @@ -0,0 +1,166 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestCounter, + TestCounterInterface, +} from "../../../../src/aa-4337/test/TestCounter"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "CalledFrom", + type: "event", + }, + { + inputs: [], + name: "count", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "countFail", + outputs: [], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "counters", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "repeat", + type: "uint256", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + name: "gasWaster", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "justemit", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "offset", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "xxx", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061065e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a5e9585f1161005b578063a5e9585f146100b2578063be65ab8c146100e2578063caece69314610112578063d55565441461011c5761007d565b806306661abd14610082578063278ddd3c1461008c578063a1b4689014610096575b600080fd5b61008a61013a565b005b6100946101c9565b005b6100b060048036038101906100ab9190610371565b610202565b005b6100cc60048036038101906100c791906103d1565b61025b565b6040516100d9919061040d565b60405180910390f35b6100fc60048036038101906100f79190610486565b610273565b604051610109919061040d565b60405180910390f35b61011a61028b565b005b6101246102c6565b604051610131919061040d565b60405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461018591906104e2565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b7ffb3b4d6258432a9a3d78dd9bffbcb6cfb1bd94f58da35fd530d08da7d1d05832336040516101f89190610547565b60405180910390a1565b6000600190505b838111610255576002600081548092919061022390610562565b91905055508060016000600254815260200190815260200160002081905550808061024d90610562565b915050610209565b50505050565b60016020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bd90610608565b60405180910390fd5b60025481565b600080fd5b600080fd5b6000819050919050565b6102e9816102d6565b81146102f457600080fd5b50565b600081359050610306816102e0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103315761033061030c565b5b8235905067ffffffffffffffff81111561034e5761034d610311565b5b60208301915083600182028301111561036a57610369610316565b5b9250929050565b60008060006040848603121561038a576103896102cc565b5b6000610398868287016102f7565b935050602084013567ffffffffffffffff8111156103b9576103b86102d1565b5b6103c58682870161031b565b92509250509250925092565b6000602082840312156103e7576103e66102cc565b5b60006103f5848285016102f7565b91505092915050565b610407816102d6565b82525050565b600060208201905061042260008301846103fe565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061045382610428565b9050919050565b61046381610448565b811461046e57600080fd5b50565b6000813590506104808161045a565b92915050565b60006020828403121561049c5761049b6102cc565b5b60006104aa84828501610471565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006104ed826102d6565b91506104f8836102d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561052d5761052c6104b3565b5b828201905092915050565b61054181610448565b82525050565b600060208201905061055c6000830184610538565b92915050565b600061056d826102d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156105a05761059f6104b3565b5b600182019050919050565b600082825260208201905092915050565b7f636f756e74206661696c65640000000000000000000000000000000000000000600082015250565b60006105f2600c836105ab565b91506105fd826105bc565b602082019050919050565b60006020820190508181036000830152610621816105e5565b905091905056fea2646970667358221220335534e66bb89f3bce801158a87f55df9c2eb500d6611484e0f03925cdca409464736f6c634300080c0033"; + +type TestCounterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestCounterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestCounter__factory extends ContractFactory { + constructor(...args: TestCounterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestCounter { + return super.attach(address) as TestCounter; + } + override connect(signer: Signer): TestCounter__factory { + return super.connect(signer) as TestCounter__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestCounterInterface { + return new utils.Interface(_abi) as TestCounterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestCounter { + return new Contract(address, _abi, signerOrProvider) as TestCounter; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts b/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts new file mode 100644 index 00000000..98a15c4e --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts @@ -0,0 +1,329 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestExpirePaymaster, + TestExpirePaymasterInterface, +} from "../../../../src/aa-4337/test/TestExpirePaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b5060405162001561380380620015618339818101604052810190620000379190620001de565b80620000586200004c6200009460201b60201c565b6200009c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000210565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001928262000165565b9050919050565b6000620001a68262000185565b9050919050565b620001b88162000199565b8114620001c457600080fd5b50565b600081519050620001d881620001ad565b92915050565b600060208284031215620001f757620001f662000160565b5b60006200020784828501620001c7565b91505092915050565b6080516113046200025d6000396000818161026d01528181610304015281816103ec01528181610418015281816104a201528181610532015281816105d1015261084801526113046000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c191906109fb565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610abc565b6102fa565b005b3480156100fd57600080fd5b50610106610393565b005b34801561011457600080fd5b5061011d6103a7565b60405161012a9190610b1d565b60405180910390f35b34801561013f57600080fd5b5061015a60048036038101906101559190610bc2565b6103d0565b005b34801561016857600080fd5b506101716103ea565b60405161017e9190610c95565b60405180910390f35b34801561019357600080fd5b5061019c61040e565b005b3480156101aa57600080fd5b506101c560048036038101906101c09190610cb0565b610498565b005b3480156101d357600080fd5b506101dc61052e565b6040516101e99190610cec565b60405180910390f35b6101fa6105cf565b005b34801561020857600080fd5b50610223600480360381019061021e9190610d33565b61065d565b005b34801561023157600080fd5b5061024c60048036038101906102479190610dbb565b6106e1565b60405161025a929190610ec3565b60405180910390f35b61026b610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016102c59190610f02565b6000604051808303818588803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050505050565b610302610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161035d929190610f2c565b600060405180830381600087803b15801561037757600080fd5b505af115801561038b573d6000803e3d6000fd5b505050505050565b61039b610704565b6103a56000610782565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d8610846565b6103e4848484846108d6565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610416610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050565b6104a0610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016104f99190610f55565b600060405180830381600087803b15801561051357600080fd5b505af1158015610527573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105899190610b1d565b602060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190610f85565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016106299190610b1d565b6000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050565b610665610704565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90611035565b60405180910390fd5b6106de81610782565b50565b606060006106ed610846565b6106f8858585610911565b91509150935093915050565b61070c610974565b73ffffffffffffffffffffffffffffffffffffffff1661072a6103a7565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610777906110a1565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061110d565b60405180910390fd5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890611179565b60405180910390fd5b6060600080808680610120019061092891906111a8565b601490809261093993929190611215565b810190610946919061128e565b915091506109566000828461097c565b92506040518060200160405280600081525093505050935093915050565b600033905090565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b856109a45760006109a7565b60015b60ff16171790509392505050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6109d8816109bf565b81146109e357600080fd5b50565b6000813590506109f5816109cf565b92915050565b600060208284031215610a1157610a106109b5565b5b6000610a1f848285016109e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a5382610a28565b9050919050565b610a6381610a48565b8114610a6e57600080fd5b50565b600081359050610a8081610a5a565b92915050565b6000819050919050565b610a9981610a86565b8114610aa457600080fd5b50565b600081359050610ab681610a90565b92915050565b60008060408385031215610ad357610ad26109b5565b5b6000610ae185828601610a71565b9250506020610af285828601610aa7565b9150509250929050565b6000610b0782610a28565b9050919050565b610b1781610afc565b82525050565b6000602082019050610b326000830184610b0e565b92915050565b60038110610b4557600080fd5b50565b600081359050610b5781610b38565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610b8257610b81610b5d565b5b8235905067ffffffffffffffff811115610b9f57610b9e610b62565b5b602083019150836001820283011115610bbb57610bba610b67565b5b9250929050565b60008060008060608587031215610bdc57610bdb6109b5565b5b6000610bea87828801610b48565b945050602085013567ffffffffffffffff811115610c0b57610c0a6109ba565b5b610c1787828801610b6c565b93509350506040610c2a87828801610aa7565b91505092959194509250565b6000819050919050565b6000610c5b610c56610c5184610a28565b610c36565b610a28565b9050919050565b6000610c6d82610c40565b9050919050565b6000610c7f82610c62565b9050919050565b610c8f81610c74565b82525050565b6000602082019050610caa6000830184610c86565b92915050565b600060208284031215610cc657610cc56109b5565b5b6000610cd484828501610a71565b91505092915050565b610ce681610a86565b82525050565b6000602082019050610d016000830184610cdd565b92915050565b610d1081610afc565b8114610d1b57600080fd5b50565b600081359050610d2d81610d07565b92915050565b600060208284031215610d4957610d486109b5565b5b6000610d5784828501610d1e565b91505092915050565b600080fd5b60006101608284031215610d7c57610d7b610d60565b5b81905092915050565b6000819050919050565b610d9881610d85565b8114610da357600080fd5b50565b600081359050610db581610d8f565b92915050565b600080600060608486031215610dd457610dd36109b5565b5b600084013567ffffffffffffffff811115610df257610df16109ba565b5b610dfe86828701610d65565b9350506020610e0f86828701610da6565b9250506040610e2086828701610aa7565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e64578082015181840152602081019050610e49565b83811115610e73576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e9582610e2a565b610e9f8185610e35565b9350610eaf818560208601610e46565b610eb881610e79565b840191505092915050565b60006040820190508181036000830152610edd8185610e8a565b9050610eec6020830184610cdd565b9392505050565b610efc816109bf565b82525050565b6000602082019050610f176000830184610ef3565b92915050565b610f2681610a48565b82525050565b6000604082019050610f416000830185610f1d565b610f4e6020830184610cdd565b9392505050565b6000602082019050610f6a6000830184610f1d565b92915050565b600081519050610f7f81610a90565b92915050565b600060208284031215610f9b57610f9a6109b5565b5b6000610fa984828501610f70565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061101f602683610fb2565b915061102a82610fc3565b604082019050919050565b6000602082019050818103600083015261104e81611012565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061108b602083610fb2565b915061109682611055565b602082019050919050565b600060208201905081810360008301526110ba8161107e565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b60006110f7601583610fb2565b9150611102826110c1565b602082019050919050565b60006020820190508181036000830152611126816110ea565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611163600d83610fb2565b915061116e8261112d565b602082019050919050565b6000602082019050818103600083015261119281611156565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126111c5576111c4611199565b5b80840192508235915067ffffffffffffffff8211156111e7576111e661119e565b5b602083019250600182023603831315611203576112026111a3565b5b509250929050565b600080fd5b600080fd5b600080858511156112295761122861120b565b5b8386111561123a57611239611210565b5b6001850283019150848603905094509492505050565b600065ffffffffffff82169050919050565b61126b81611250565b811461127657600080fd5b50565b60008135905061128881611262565b92915050565b600080604083850312156112a5576112a46109b5565b5b60006112b385828601611279565b92505060206112c485828601611279565b915050925092905056fea2646970667358221220ef7137fdd6e05e34117c5f0ef14e83a5c065d1d9eca823e40a0ab991beb9e3e864736f6c634300080c0033"; + +type TestExpirePaymasterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestExpirePaymasterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestExpirePaymaster__factory extends ContractFactory { + constructor(...args: TestExpirePaymasterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): TestExpirePaymaster { + return super.attach(address) as TestExpirePaymaster; + } + override connect(signer: Signer): TestExpirePaymaster__factory { + return super.connect(signer) as TestExpirePaymaster__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestExpirePaymasterInterface { + return new utils.Interface(_abi) as TestExpirePaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestExpirePaymaster { + return new Contract(address, _abi, signerOrProvider) as TestExpirePaymaster; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts new file mode 100644 index 00000000..e295e925 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts @@ -0,0 +1,785 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestExpiryAccount, + TestExpiryAccountInterface, +} from "../../../../src/aa-4337/test/TestExpiryAccount"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint48", + name: "_after", + type: "uint48", + }, + { + internalType: "uint48", + name: "_until", + type: "uint48", + }, + ], + name: "addTemporaryOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "ownerAfter", + outputs: [ + { + internalType: "uint48", + name: "", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "ownerUntil", + outputs: [ + { + internalType: "uint48", + name: "", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b506080516141e061007b60003960008181610c3601528181610cc501528181610f4801528181610fd7015261108701526141e06000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b14610582578063c399ec88146105ab578063cf6dca55146105d6578063f23a6e61146105ff5761018b565b8063affed0e014610503578063b0d691fe1461052e578063b61d27f6146105595761018b565b80634d44560d146104125780634f1ef2861461043b57806352d1902d1461045757806379cbc5fa146104825780637b103999146104ad5780638da5cb5b146104d85761018b565b806320c13b0b1161013e5780633a871cdd116101185780633a871cdd146103515780633e4769511461038e5780633fb5a7a1146103cb5780634a58db19146104085761018b565b806320c13b0b146102ae578063249cb3fa146102eb5780633659cfe6146103285761018b565b806223de2914610190578063150b7a02146101b95780631626ba7e146101f657806318dfb3c7146102335780631a5da6c81461025c5780631b71bb6e146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b29190612539565b61063c565b005b3480156101c557600080fd5b506101e060048036038101906101db9190612608565b610681565b6040516101ed91906126cb565b60405180910390f35b34801561020257600080fd5b5061021d6004803603810190610218919061271c565b610696565b60405161022a91906126cb565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612828565b610779565b005b34801561026857600080fd5b50610283600480360381019061027e91906128a9565b61088b565b005b34801561029157600080fd5b506102ac60048036038101906102a791906128a9565b61099f565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906128d6565b610ab6565b6040516102e291906126cb565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612957565b610b9c565b60405161031f91906129a6565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906128a9565b610c34565b005b34801561035d57600080fd5b50610378600480360381019061037391906129e6565b610dbd565b6040516103859190612a64565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906128a9565b610e07565b6040516103c29190612aa0565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed91906128a9565b610e2c565b6040516103ff9190612aa0565b60405180910390f35b610410610e51565b005b34801561041e57600080fd5b5061043960048036038101906104349190612af9565b610ec6565b005b61045560048036038101906104509190612c7a565b610f46565b005b34801561046357600080fd5b5061046c611083565b60405161047991906129a6565b60405180910390f35b34801561048e57600080fd5b5061049761113c565b6040516104a49190612ce5565b60405180910390f35b3480156104b957600080fd5b506104c2611160565b6040516104cf9190612ce5565b60405180910390f35b3480156104e457600080fd5b506104ed611189565b6040516104fa9190612ce5565b60405180910390f35b34801561050f57600080fd5b506105186111af565b6040516105259190612a64565b60405180910390f35b34801561053a57600080fd5b506105436111df565b6040516105509190612d5f565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190612d7a565b611209565b005b34801561058e57600080fd5b506105a960048036038101906105a49190612e2c565b611266565b005b3480156105b757600080fd5b506105c06113c1565b6040516105cd9190612a64565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190612eab565b611449565b005b34801561060b57600080fd5b5061062660048036038101906106219190612efe565b61156c565b60405161063391906126cb565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161066f93929190612f98565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106f8949392919061300d565b602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190613085565b61074a5763ffffffff60e01b610770565b60405160200161075990613109565b604051602081830303815290604052805190602001205b90509392505050565b610781611582565b8181905084849050146107c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c0906131a1565b60405180910390fd5b60005b84849050811015610884576108718585838181106107ed576107ec6131c1565b5b905060200201602081019061080291906128a9565b6000858585818110610817576108166131c1565b5b905060200281019061082991906131ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611651565b808061087c90613291565b9150506107cc565b5050505050565b6108936116d5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa9061334c565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161095492919061336c565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109a76116d5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90613407565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a6a92919061336c565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610b1a959493929190613427565b602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b9190613085565b610b6c5763ffffffff60e01b610b92565b604051602001610b7b906134bc565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610bae9061351d565b6040516020818303038152906040528051906020012084148015610bfd57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c2a57604051602001610c119061357e565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90613605565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d0261179d565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613697565b60405180910390fd5b610d61816117f4565b610dba81600067ffffffffffffffff811115610d8057610d7f612b4f565b5b6040519080825280601f01601f191660200182016040528015610db25781602001600182028036833780820191505090505b5060006117ff565b50565b6000610dc761196d565b610dd184846119e4565b90506000848060400190610de591906131ff565b90501415610df757610df684611b2f565b5b610e0082611bdd565b9392505050565b60056020528060005260406000206000915054906101000a900465ffffffffffff1681565b60046020528060005260406000206000915054906101000a900465ffffffffffff1681565b610e596111df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e929190612ce5565b6000604051808303818588803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b5050505050565b610ece6116d5565b610ed66111df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610f109291906136c6565b600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613605565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661101461179d565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613697565b60405180910390fd5b611073826117f4565b61107f828260016117ff565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613761565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611211611582565b611260848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611651565b50505050565b60008060159054906101000a900460ff1615905080801561129957506001600060149054906101000a900460ff1660ff16105b806112c857506112a830611c79565b1580156112c757506001600060149054906101000a900460ff1660ff16145b5b611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe906137f3565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611345576001600060156101000a81548160ff0219169083151502179055505b611350848484611c9c565b61136282600065ffffffffffff611449565b80156113bb5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516113b2919061385b565b60405180910390a15b50505050565b60006113cb6111df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114039190612ce5565b602060405180830381865afa158015611420573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611444919061388b565b905090565b6114516116d5565b8165ffffffffffff168165ffffffffffff16116114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90613904565b60405180910390fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff16021790555080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b600063f23a6e6160e01b90509695505050505050565b61158a6111df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061161057506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690613996565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161167a9190613a30565b60006040518083038185875af1925050503d80600081146116b7576040519150601f19603f3d011682016040523d82523d6000602084013e6116bc565b606091505b5091509150816116ce57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061175c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613a93565b60405180910390fd5b565b60006117cb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611e38565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117fc6116d5565b50565b61182b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611e42565b60000160009054906101000a900460ff161561184f5761184a83611e4c565b611968565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118b757506040513d601f19601f820116820180604052508101906118b49190613ac8565b60015b6118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b67565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613bf9565b60405180910390fd5b50611967838383611f05565b5b505050565b6119756111df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990613c8b565b60405180910390fd5b565b6000806119f083611f31565b90506000611a5a85806101400190611a0891906131ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083611f6190919063ffffffff16565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506000808365ffffffffffff16149050611b22818484611f88565b9550505050505092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611b5e90613cc3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613d44565b60405180910390fd5b50565b60008114611c765760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611c2d90613d8a565b600060405180830381858888f193505050503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611e5581611c79565b611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613e11565b60405180910390fd5b80611ec17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611e38565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f0e83611fc1565b600082511180611f1b5750805b15611f2c57611f2a8383612010565b505b505050565b600081604051602001611f449190613e9e565b604051602081830303815290604052805190602001209050919050565b6000806000611f70858561203d565b91509150611f7d8161208f565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85611fb0576000611fb3565b60015b60ff16171790509392505050565b611fca81611e4c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120358383604051806060016040528060278152602001614184602791396121fd565b905092915050565b60008060418351141561207f5760008060006020860151925060408601519150606086015160001a905061207387828585612283565b94509450505050612088565b60006002915091505b9250929050565b600060048111156120a3576120a2613ec4565b5b8160048111156120b6576120b5613ec4565b5b14156120c1576121fa565b600160048111156120d5576120d4613ec4565b5b8160048111156120e8576120e7613ec4565b5b1415612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613f3f565b60405180910390fd5b6002600481111561213d5761213c613ec4565b5b8160048111156121505761214f613ec4565b5b1415612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613fab565b60405180910390fd5b600360048111156121a5576121a4613ec4565b5b8160048111156121b8576121b7613ec4565b5b14156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061403d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516122279190613a30565b600060405180830381855af49150503d8060008114612262576040519150601f19603f3d011682016040523d82523d6000602084013e612267565b606091505b509150915061227886838387612366565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156122be57600060039150915061235d565b6000600187878787604051600081526020016040526040516122e3949392919061406c565b6020604051602081039080840390855afa158015612305573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123545760006001925092505061235d565b80600092509250505b94509492505050565b606083156123c9576000835114156123c15761238185611c79565b6123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b7906140fd565b60405180910390fd5b5b8290506123d4565b6123d383836123dc565b5b949350505050565b6000825111156123ef5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124239190614161565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061246b82612440565b9050919050565b61247b81612460565b811461248657600080fd5b50565b60008135905061249881612472565b92915050565b6000819050919050565b6124b18161249e565b81146124bc57600080fd5b50565b6000813590506124ce816124a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126124f9576124f86124d4565b5b8235905067ffffffffffffffff811115612516576125156124d9565b5b602083019150836001820283011115612532576125316124de565b5b9250929050565b60008060008060008060008060c0898b03121561255957612558612436565b5b60006125678b828c01612489565b98505060206125788b828c01612489565b97505060406125898b828c01612489565b965050606061259a8b828c016124bf565b955050608089013567ffffffffffffffff8111156125bb576125ba61243b565b5b6125c78b828c016124e3565b945094505060a089013567ffffffffffffffff8111156125ea576125e961243b565b5b6125f68b828c016124e3565b92509250509295985092959890939650565b60008060008060006080868803121561262457612623612436565b5b600061263288828901612489565b955050602061264388828901612489565b9450506040612654888289016124bf565b935050606086013567ffffffffffffffff8111156126755761267461243b565b5b612681888289016124e3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126c581612690565b82525050565b60006020820190506126e060008301846126bc565b92915050565b6000819050919050565b6126f9816126e6565b811461270457600080fd5b50565b600081359050612716816126f0565b92915050565b60008060006040848603121561273557612734612436565b5b600061274386828701612707565b935050602084013567ffffffffffffffff8111156127645761276361243b565b5b612770868287016124e3565b92509250509250925092565b60008083601f840112612792576127916124d4565b5b8235905067ffffffffffffffff8111156127af576127ae6124d9565b5b6020830191508360208202830111156127cb576127ca6124de565b5b9250929050565b60008083601f8401126127e8576127e76124d4565b5b8235905067ffffffffffffffff811115612805576128046124d9565b5b602083019150836020820283011115612821576128206124de565b5b9250929050565b6000806000806040858703121561284257612841612436565b5b600085013567ffffffffffffffff8111156128605761285f61243b565b5b61286c8782880161277c565b9450945050602085013567ffffffffffffffff81111561288f5761288e61243b565b5b61289b878288016127d2565b925092505092959194509250565b6000602082840312156128bf576128be612436565b5b60006128cd84828501612489565b91505092915050565b600080600080604085870312156128f0576128ef612436565b5b600085013567ffffffffffffffff81111561290e5761290d61243b565b5b61291a878288016124e3565b9450945050602085013567ffffffffffffffff81111561293d5761293c61243b565b5b612949878288016124e3565b925092505092959194509250565b6000806040838503121561296e5761296d612436565b5b600061297c85828601612707565b925050602061298d85828601612489565b9150509250929050565b6129a0816126e6565b82525050565b60006020820190506129bb6000830184612997565b92915050565b600080fd5b600061016082840312156129dd576129dc6129c1565b5b81905092915050565b6000806000606084860312156129ff576129fe612436565b5b600084013567ffffffffffffffff811115612a1d57612a1c61243b565b5b612a29868287016129c6565b9350506020612a3a86828701612707565b9250506040612a4b868287016124bf565b9150509250925092565b612a5e8161249e565b82525050565b6000602082019050612a796000830184612a55565b92915050565b600065ffffffffffff82169050919050565b612a9a81612a7f565b82525050565b6000602082019050612ab56000830184612a91565b92915050565b6000612ac682612440565b9050919050565b612ad681612abb565b8114612ae157600080fd5b50565b600081359050612af381612acd565b92915050565b60008060408385031215612b1057612b0f612436565b5b6000612b1e85828601612ae4565b9250506020612b2f858286016124bf565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b8782612b3e565b810181811067ffffffffffffffff82111715612ba657612ba5612b4f565b5b80604052505050565b6000612bb961242c565b9050612bc58282612b7e565b919050565b600067ffffffffffffffff821115612be557612be4612b4f565b5b612bee82612b3e565b9050602081019050919050565b82818337600083830152505050565b6000612c1d612c1884612bca565b612baf565b905082815260208101848484011115612c3957612c38612b39565b5b612c44848285612bfb565b509392505050565b600082601f830112612c6157612c606124d4565b5b8135612c71848260208601612c0a565b91505092915050565b60008060408385031215612c9157612c90612436565b5b6000612c9f85828601612489565b925050602083013567ffffffffffffffff811115612cc057612cbf61243b565b5b612ccc85828601612c4c565b9150509250929050565b612cdf81612460565b82525050565b6000602082019050612cfa6000830184612cd6565b92915050565b6000819050919050565b6000612d25612d20612d1b84612440565b612d00565b612440565b9050919050565b6000612d3782612d0a565b9050919050565b6000612d4982612d2c565b9050919050565b612d5981612d3e565b82525050565b6000602082019050612d746000830184612d50565b92915050565b60008060008060608587031215612d9457612d93612436565b5b6000612da287828801612489565b9450506020612db3878288016124bf565b935050604085013567ffffffffffffffff811115612dd457612dd361243b565b5b612de0878288016124e3565b925092505092959194509250565b6000612df982612460565b9050919050565b612e0981612dee565b8114612e1457600080fd5b50565b600081359050612e2681612e00565b92915050565b600080600060608486031215612e4557612e44612436565b5b6000612e5386828701612e17565b9350506020612e6486828701612489565b9250506040612e7586828701612489565b9150509250925092565b612e8881612a7f565b8114612e9357600080fd5b50565b600081359050612ea581612e7f565b92915050565b600080600060608486031215612ec457612ec3612436565b5b6000612ed286828701612489565b9350506020612ee386828701612e96565b9250506040612ef486828701612e96565b9150509250925092565b60008060008060008060a08789031215612f1b57612f1a612436565b5b6000612f2989828a01612489565b9650506020612f3a89828a01612489565b9550506040612f4b89828a016124bf565b9450506060612f5c89828a016124bf565b935050608087013567ffffffffffffffff811115612f7d57612f7c61243b565b5b612f8989828a016124e3565b92509250509295509295509295565b6000606082019050612fad6000830186612cd6565b612fba6020830185612cd6565b612fc76040830184612a55565b949350505050565b600082825260208201905092915050565b6000612fec8385612fcf565b9350612ff9838584612bfb565b61300283612b3e565b840190509392505050565b60006060820190506130226000830187612cd6565b61302f6020830186612997565b8181036040830152613042818486612fe0565b905095945050505050565b60008115159050919050565b6130628161304d565b811461306d57600080fd5b50565b60008151905061307f81613059565b92915050565b60006020828403121561309b5761309a612436565b5b60006130a984828501613070565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b60006130f3601f836130b2565b91506130fe826130bd565b601f82019050919050565b6000613114826130e6565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061318b60338361311e565b91506131968261312f565b604082019050919050565b600060208201905081810360008301526131ba8161317e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261321c5761321b6131f0565b5b80840192508235915067ffffffffffffffff82111561323e5761323d6131f5565b5b60208301925060018202360383131561325a576132596131fa565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061329c8261249e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132cf576132ce613262565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061333660318361311e565b9150613341826132da565b604082019050919050565b6000602082019050818103600083015261336581613329565b9050919050565b60006040820190506133816000830185612cd6565b61338e6020830184612cd6565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006133f160338361311e565b91506133fc82613395565b604082019050919050565b60006020820190508181036000830152613420816133e4565b9050919050565b600060608201905061343c6000830188612cd6565b818103602083015261344f818688612fe0565b90508181036040830152613464818486612fe0565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006134a6601d836130b2565b91506134b182613470565b601d82019050919050565b60006134c782613499565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b60006135076015836130b2565b9150613512826134d1565b601582019050919050565b6000613528826134fa565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135686014836130b2565b915061357382613532565b601482019050919050565b60006135898261355b565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006135ef602c8361311e565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613681602c8361311e565b915061368c82613625565b604082019050919050565b600060208201905081810360008301526136b081613674565b9050919050565b6136c081612abb565b82525050565b60006040820190506136db60008301856136b7565b6136e86020830184612a55565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061374b60388361311e565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006137dd602e8361311e565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b6000819050919050565b600060ff82169050919050565b600061384561384061383b84613813565b612d00565b61381d565b9050919050565b6138558161382a565b82525050565b6000602082019050613870600083018461384c565b92915050565b600081519050613885816124a8565b92915050565b6000602082840312156138a1576138a0612436565b5b60006138af84828501613876565b91505092915050565b7f77726f6e6720756e74696c2f6166746572000000000000000000000000000000600082015250565b60006138ee60118361311e565b91506138f9826138b8565b602082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b600061398060298361311e565b915061398b82613924565b604082019050919050565b600060208201905081810360008301526139af81613973565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156139ea5780820151818401526020810190506139cf565b838111156139f9576000848401525b50505050565b6000613a0a826139b6565b613a1481856139c1565b9350613a248185602086016139cc565b80840191505092915050565b6000613a3c82846139ff565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a7d601c8361311e565b9150613a8882613a47565b602082019050919050565b60006020820190508181036000830152613aac81613a70565b9050919050565b600081519050613ac2816126f0565b92915050565b600060208284031215613ade57613add612436565b5b6000613aec84828501613ab3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b51602e8361311e565b9150613b5c82613af5565b604082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613be360298361311e565b9150613bee82613b87565b604082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c7560248361311e565b9150613c8082613c19565b604082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613cce82613cab565b91506bffffffffffffffffffffffff821415613ced57613cec613262565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613d2e601f8361311e565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b50565b6000613d746000836139c1565b9150613d7f82613d64565b600082019050919050565b6000613d9582613d67565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613dfb602d8361311e565b9150613e0682613d9f565b604082019050919050565b60006020820190508181036000830152613e2a81613dee565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613e67601c836130b2565b9150613e7282613e31565b601c82019050919050565b6000819050919050565b613e98613e93826126e6565b613e7d565b82525050565b6000613ea982613e5a565b9150613eb58284613e87565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613f2960188361311e565b9150613f3482613ef3565b602082019050919050565b60006020820190508181036000830152613f5881613f1c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613f95601f8361311e565b9150613fa082613f5f565b602082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061402760228361311e565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b6140668161381d565b82525050565b60006080820190506140816000830187612997565b61408e602083018661405d565b61409b6040830185612997565b6140a86060830184612997565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006140e7601d8361311e565b91506140f2826140b1565b602082019050919050565b60006020820190508181036000830152614116816140da565b9050919050565b600081519050919050565b60006141338261411d565b61413d818561311e565b935061414d8185602086016139cc565b61415681612b3e565b840191505092915050565b6000602082019050818103600083015261417b8184614128565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4c69268be61f48b85ec8565f505da1877248980f5c1e23e193988b94a216ff864736f6c634300080c0033"; + +type TestExpiryAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestExpiryAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestExpiryAccount__factory extends ContractFactory { + constructor(...args: TestExpiryAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestExpiryAccount { + return super.attach(address) as TestExpiryAccount; + } + override connect(signer: Signer): TestExpiryAccount__factory { + return super.connect(signer) as TestExpiryAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestExpiryAccountInterface { + return new utils.Interface(_abi) as TestExpiryAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestExpiryAccount { + return new Contract(address, _abi, signerOrProvider) as TestExpiryAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts b/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts new file mode 100644 index 00000000..1d0c98eb --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts @@ -0,0 +1,205 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestHelpers, + TestHelpersInterface, +} from "../../../../src/aa-4337/test/TestHelpers"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + { + internalType: "uint256", + name: "paymasterValidationData", + type: "uint256", + }, + ], + name: "intersectTimeRange", + outputs: [ + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + ], + internalType: "struct ValidationData", + name: "", + type: "tuple", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + ], + name: "packValidationData", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + ], + internalType: "struct ValidationData", + name: "data", + type: "tuple", + }, + ], + name: "packValidationDataStruct", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + name: "parseValidationData", + outputs: [ + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + ], + internalType: "struct ValidationData", + name: "", + type: "tuple", + }, + ], + stateMutability: "pure", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506107a2806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806324d3cde6146100515780634fe5f5cf14610081578063a4b2282e146100b1578063b059e2fa146100e1575b600080fd5b61006b6004803603810190610066919061056c565b610111565b60405161007891906105b2565b60405180910390f35b61009b600480360381019061009691906105f9565b610123565b6040516100a89190610699565b60405180910390f35b6100cb60048036038101906100c691906106b4565b61013d565b6040516100d89190610699565b60405180910390f35b6100fb60048036038101906100f69190610719565b610155565b60405161010891906105b2565b60405180910390f35b600061011c8261016b565b9050919050565b61012b610385565b61013583836101b3565b905092915050565b610145610385565b61014e826102c7565b9050919050565b600061016284848461034c565b90509392505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6101bb610385565b60006101c6846102c7565b905060006101d3846102c7565b9050600082600001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561021b57816000015190505b6000836020015190506000846040015190506000846020015190506000856040015190508165ffffffffffff168465ffffffffffff16101561025b578193505b8065ffffffffffff168365ffffffffffff161115610277578092505b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6102cf610385565b6000829050600060a084901c905060008165ffffffffffff1614156102f85765ffffffffffff90505b600060d085901c905060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610374576000610377565b60015b60ff16171790509392505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610429826103e0565b810181811067ffffffffffffffff82111715610448576104476103f1565b5b80604052505050565b600061045b6103cc565b90506104678282610420565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104978261046c565b9050919050565b6104a78161048c565b81146104b257600080fd5b50565b6000813590506104c48161049e565b92915050565b600065ffffffffffff82169050919050565b6104e5816104ca565b81146104f057600080fd5b50565b600081359050610502816104dc565b92915050565b60006060828403121561051e5761051d6103db565b5b6105286060610451565b90506000610538848285016104b5565b600083015250602061054c848285016104f3565b6020830152506040610560848285016104f3565b60408301525092915050565b600060608284031215610582576105816103d6565b5b600061059084828501610508565b91505092915050565b6000819050919050565b6105ac81610599565b82525050565b60006020820190506105c760008301846105a3565b92915050565b6105d681610599565b81146105e157600080fd5b50565b6000813590506105f3816105cd565b92915050565b600080604083850312156106105761060f6103d6565b5b600061061e858286016105e4565b925050602061062f858286016105e4565b9150509250929050565b6106428161048c565b82525050565b610651816104ca565b82525050565b60608201600082015161066d6000850182610639565b5060208201516106806020850182610648565b5060408201516106936040850182610648565b50505050565b60006060820190506106ae6000830184610657565b92915050565b6000602082840312156106ca576106c96103d6565b5b60006106d8848285016105e4565b91505092915050565b60008115159050919050565b6106f6816106e1565b811461070157600080fd5b50565b600081359050610713816106ed565b92915050565b600080600060608486031215610732576107316103d6565b5b600061074086828701610704565b9350506020610751868287016104f3565b9250506040610762868287016104f3565b915050925092509256fea264697066735822122033ee991e40819abe9debf08398c6d0b858ff4f753ab67255e7f397abd7072bfa64736f6c634300080c0033"; + +type TestHelpersConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestHelpersConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestHelpers__factory extends ContractFactory { + constructor(...args: TestHelpersConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestHelpers { + return super.attach(address) as TestHelpers; + } + override connect(signer: Signer): TestHelpers__factory { + return super.connect(signer) as TestHelpers__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestHelpersInterface { + return new utils.Interface(_abi) as TestHelpersInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestHelpers { + return new Contract(address, _abi, signerOrProvider) as TestHelpers; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts b/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts new file mode 100644 index 00000000..97b15ba4 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts @@ -0,0 +1,82 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestOracle, + TestOracleInterface, +} from "../../../../src/aa-4337/test/TestOracle"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "ethOutput", + type: "uint256", + }, + ], + name: "getTokenValueOfEth", + outputs: [ + { + internalType: "uint256", + name: "tokenInput", + type: "uint256", + }, + ], + stateMutability: "pure", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d1eca9cf14610030575b600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b60405180910390f35b600060028261006f9190610137565b9050919050565b600080fd5b6000819050919050565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b91505092915050565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b82820290509291505056fea2646970667358221220e586b7e28ee081659dcb8de8ca6dbe3638946addabdcc46acc7392477e81c4d364736f6c634300080c0033"; + +type TestOracleConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestOracleConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestOracle__factory extends ContractFactory { + constructor(...args: TestOracleConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestOracle { + return super.attach(address) as TestOracle; + } + override connect(signer: Signer): TestOracle__factory { + return super.connect(signer) as TestOracle__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestOracleInterface { + return new utils.Interface(_abi) as TestOracleInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestOracle { + return new Contract(address, _abi, signerOrProvider) as TestOracle; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts b/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts new file mode 100644 index 00000000..8228b56c --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts @@ -0,0 +1,333 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestPaymasterAcceptAll, + TestPaymasterAcceptAllInterface, +} from "../../../../src/aa-4337/test/TestPaymasterAcceptAll"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b506040516200141038038062001410833981810160405281019062000037919062000224565b80620000586200004c620000da60201b60201c565b620000e260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614620000d357620000d232620000e260201b60201c565b5b5062000256565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d882620001ab565b9050919050565b6000620001ec82620001cb565b9050919050565b620001fe81620001df565b81146200020a57600080fd5b50565b6000815190506200021e81620001f3565b92915050565b6000602082840312156200023d576200023c620001a6565b5b60006200024d848285016200020d565b91505092915050565b60805161116d620002a36000396000818161026d01528181610304015281816103ec01528181610418015281816104a201528181610532015281816105d10152610848015261116d6000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c19190610999565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610a5a565b6102fa565b005b3480156100fd57600080fd5b50610106610393565b005b34801561011457600080fd5b5061011d6103a7565b60405161012a9190610abb565b60405180910390f35b34801561013f57600080fd5b5061015a60048036038101906101559190610b60565b6103d0565b005b34801561016857600080fd5b506101716103ea565b60405161017e9190610c33565b60405180910390f35b34801561019357600080fd5b5061019c61040e565b005b3480156101aa57600080fd5b506101c560048036038101906101c09190610c4e565b610498565b005b3480156101d357600080fd5b506101dc61052e565b6040516101e99190610c8a565b60405180910390f35b6101fa6105cf565b005b34801561020857600080fd5b50610223600480360381019061021e9190610cd1565b61065d565b005b34801561023157600080fd5b5061024c60048036038101906102479190610d59565b6106e1565b60405161025a929190610e61565b60405180910390f35b61026b610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016102c59190610ea0565b6000604051808303818588803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050505050565b610302610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161035d929190610eca565b600060405180830381600087803b15801561037757600080fd5b505af115801561038b573d6000803e3d6000fd5b505050505050565b61039b610704565b6103a56000610782565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d8610846565b6103e4848484846108d6565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610416610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050565b6104a0610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016104f99190610ef3565b600060405180830381600087803b15801561051357600080fd5b505af1158015610527573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105899190610abb565b602060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190610f23565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016106299190610abb565b6000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050565b610665610704565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90610fd3565b60405180910390fd5b6106de81610782565b50565b606060006106ed610846565b6106f8858585610911565b91509150935093915050565b61070c61094b565b73ffffffffffffffffffffffffffffffffffffffff1661072a6103a7565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107779061103f565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906110ab565b60405180910390fd5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890611117565b60405180910390fd5b606060006130398314610925576000610928565b60015b60405180602001604052806000815250908060ff16905091509150935093915050565b600033905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b6109768161095d565b811461098157600080fd5b50565b6000813590506109938161096d565b92915050565b6000602082840312156109af576109ae610953565b5b60006109bd84828501610984565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109f1826109c6565b9050919050565b610a01816109e6565b8114610a0c57600080fd5b50565b600081359050610a1e816109f8565b92915050565b6000819050919050565b610a3781610a24565b8114610a4257600080fd5b50565b600081359050610a5481610a2e565b92915050565b60008060408385031215610a7157610a70610953565b5b6000610a7f85828601610a0f565b9250506020610a9085828601610a45565b9150509250929050565b6000610aa5826109c6565b9050919050565b610ab581610a9a565b82525050565b6000602082019050610ad06000830184610aac565b92915050565b60038110610ae357600080fd5b50565b600081359050610af581610ad6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610b2057610b1f610afb565b5b8235905067ffffffffffffffff811115610b3d57610b3c610b00565b5b602083019150836001820283011115610b5957610b58610b05565b5b9250929050565b60008060008060608587031215610b7a57610b79610953565b5b6000610b8887828801610ae6565b945050602085013567ffffffffffffffff811115610ba957610ba8610958565b5b610bb587828801610b0a565b93509350506040610bc887828801610a45565b91505092959194509250565b6000819050919050565b6000610bf9610bf4610bef846109c6565b610bd4565b6109c6565b9050919050565b6000610c0b82610bde565b9050919050565b6000610c1d82610c00565b9050919050565b610c2d81610c12565b82525050565b6000602082019050610c486000830184610c24565b92915050565b600060208284031215610c6457610c63610953565b5b6000610c7284828501610a0f565b91505092915050565b610c8481610a24565b82525050565b6000602082019050610c9f6000830184610c7b565b92915050565b610cae81610a9a565b8114610cb957600080fd5b50565b600081359050610ccb81610ca5565b92915050565b600060208284031215610ce757610ce6610953565b5b6000610cf584828501610cbc565b91505092915050565b600080fd5b60006101608284031215610d1a57610d19610cfe565b5b81905092915050565b6000819050919050565b610d3681610d23565b8114610d4157600080fd5b50565b600081359050610d5381610d2d565b92915050565b600080600060608486031215610d7257610d71610953565b5b600084013567ffffffffffffffff811115610d9057610d8f610958565b5b610d9c86828701610d03565b9350506020610dad86828701610d44565b9250506040610dbe86828701610a45565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e02578082015181840152602081019050610de7565b83811115610e11576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e3382610dc8565b610e3d8185610dd3565b9350610e4d818560208601610de4565b610e5681610e17565b840191505092915050565b60006040820190508181036000830152610e7b8185610e28565b9050610e8a6020830184610c7b565b9392505050565b610e9a8161095d565b82525050565b6000602082019050610eb56000830184610e91565b92915050565b610ec4816109e6565b82525050565b6000604082019050610edf6000830185610ebb565b610eec6020830184610c7b565b9392505050565b6000602082019050610f086000830184610ebb565b92915050565b600081519050610f1d81610a2e565b92915050565b600060208284031215610f3957610f38610953565b5b6000610f4784828501610f0e565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610fbd602683610f50565b9150610fc882610f61565b604082019050919050565b60006020820190508181036000830152610fec81610fb0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611029602083610f50565b915061103482610ff3565b602082019050919050565b600060208201905081810360008301526110588161101c565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000611095601583610f50565b91506110a08261105f565b602082019050919050565b600060208201905081810360008301526110c481611088565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611101600d83610f50565b915061110c826110cb565b602082019050919050565b60006020820190508181036000830152611130816110f4565b905091905056fea26469706673582212206eafc8801f94bbc1af740176963ae5093ccdcb813cd32f7eacc80e8dc845bd2264736f6c634300080c0033"; + +type TestPaymasterAcceptAllConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestPaymasterAcceptAllConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestPaymasterAcceptAll__factory extends ContractFactory { + constructor(...args: TestPaymasterAcceptAllConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): TestPaymasterAcceptAll { + return super.attach(address) as TestPaymasterAcceptAll; + } + override connect(signer: Signer): TestPaymasterAcceptAll__factory { + return super.connect(signer) as TestPaymasterAcceptAll__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestPaymasterAcceptAllInterface { + return new utils.Interface(_abi) as TestPaymasterAcceptAllInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestPaymasterAcceptAll { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestPaymasterAcceptAll; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts new file mode 100644 index 00000000..063cb50d --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts @@ -0,0 +1,181 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + PayableOverrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestRevertAccount, + TestRevertAccountInterface, +} from "../../../../src/aa-4337/test/TestRevertAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_ep", + type: "address", + }, + ], + stateMutability: "payable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + ], + name: "revertLong", + outputs: [], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "", + type: "tuple", + }, + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x6080604052604051610435380380610435833981810160405281019061002591906100e0565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009b82610070565b9050919050565b60006100ad82610090565b9050919050565b6100bd816100a2565b81146100c857600080fd5b50565b6000815190506100da816100b4565b92915050565b6000602082840312156100f6576100f561006b565b5b6000610104848285016100cb565b91505092915050565b6103198061011c6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633a871cdd1461003b578063be76c6ef1461006b575b600080fd5b610055600480360381019061005091906101c1565b610087565b604051610062919061023f565b60405180910390f35b6100856004803603810190610080919061025a565b610121565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b81526004016100e491906102c8565b6000604051808303818588803b1580156100fd57600080fd5b505af1158015610111573d6000803e3d6000fd5b5050505050600090509392505050565b806000fd5b600080fd5b600080fd5b600080fd5b6000610160828403121561014c5761014b610130565b5b81905092915050565b6000819050919050565b61016881610155565b811461017357600080fd5b50565b6000813590506101858161015f565b92915050565b6000819050919050565b61019e8161018b565b81146101a957600080fd5b50565b6000813590506101bb81610195565b92915050565b6000806000606084860312156101da576101d9610126565b5b600084013567ffffffffffffffff8111156101f8576101f761012b565b5b61020486828701610135565b935050602061021586828701610176565b9250506040610226868287016101ac565b9150509250925092565b6102398161018b565b82525050565b60006020820190506102546000830184610230565b92915050565b6000602082840312156102705761026f610126565b5b600061027e848285016101ac565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102b282610287565b9050919050565b6102c2816102a7565b82525050565b60006020820190506102dd60008301846102b9565b9291505056fea2646970667358221220a7812233e7712b8823d42af00ebc96b190dfb22476fb7c675dfb29743b82e9b664736f6c634300080c0033"; + +type TestRevertAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestRevertAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestRevertAccount__factory extends ContractFactory { + constructor(...args: TestRevertAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(_ep, overrides || {}) as Promise; + } + override getDeployTransaction( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_ep, overrides || {}); + } + override attach(address: string): TestRevertAccount { + return super.attach(address) as TestRevertAccount; + } + override connect(signer: Signer): TestRevertAccount__factory { + return super.connect(signer) as TestRevertAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestRevertAccountInterface { + return new utils.Interface(_abi) as TestRevertAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestRevertAccount { + return new Contract(address, _abi, signerOrProvider) as TestRevertAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts b/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts new file mode 100644 index 00000000..31f522c3 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts @@ -0,0 +1,312 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestSignatureAggregator, + TestSignatureAggregatorInterface, +} from "../../../../src/aa-4337/test/TestSignatureAggregator"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + internalType: "uint32", + name: "delay", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + ], + name: "aggregateSignatures", + outputs: [ + { + internalType: "bytes", + name: "aggregatedSignature", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "validateSignatures", + outputs: [], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "", + type: "tuple", + }, + ], + name: "validateUserOpSignature", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610a2d806100206000396000f3fe60806040526004361061003f5760003560e01c8063275e2d7914610044578063451711591461008157806364c530cd1461009d578063e3563a4f146100da575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610381565b610103565b6040516100789190610467565b60405180910390f35b61009b60048036038101906100969190610535565b610187565b005b3480156100a957600080fd5b506100c460048036038101906100bf919061059a565b6101f7565b6040516100d19190610467565b60405180910390f35b3480156100e657600080fd5b5061010160048036038101906100fc9190610639565b610210565b005b60606000805b8484905081101561015d57848482818110610127576101266106ba565b5b905060200281019061013991906106ee565b60200135826101489190610750565b91508080610155906107a6565b915050610109565b508060405160200161016f91906107fe565b60405160208183030381529060405291505092915050565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016101c19190610828565b6000604051808303818588803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505050565b6060604051806020016040528060008152509050919050565b6000805b8585905081101561026e576000868683818110610234576102336106ba565b5b905060200281019061024691906106ee565b60200135905080836102589190610750565b9250508080610266906107a6565b915050610214565b50602083839050146102b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ac906108c6565b60405180910390fd5b600083838101906102c69190610912565b905081811461030a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610301906109d7565b60405180910390fd5b505050505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126103415761034061031c565b5b8235905067ffffffffffffffff81111561035e5761035d610321565b5b60208301915083602082028301111561037a57610379610326565b5b9250929050565b6000806020838503121561039857610397610312565b5b600083013567ffffffffffffffff8111156103b6576103b5610317565b5b6103c28582860161032b565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104085780820151818401526020810190506103ed565b83811115610417576000848401525b50505050565b6000601f19601f8301169050919050565b6000610439826103ce565b61044381856103d9565b93506104538185602086016103ea565b61045c8161041d565b840191505092915050565b60006020820190508181036000830152610481818461042e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104b482610489565b9050919050565b60006104c6826104a9565b9050919050565b6104d6816104bb565b81146104e157600080fd5b50565b6000813590506104f3816104cd565b92915050565b600063ffffffff82169050919050565b610512816104f9565b811461051d57600080fd5b50565b60008135905061052f81610509565b92915050565b6000806040838503121561054c5761054b610312565b5b600061055a858286016104e4565b925050602061056b85828601610520565b9150509250929050565b600080fd5b6000610160828403121561059157610590610575565b5b81905092915050565b6000602082840312156105b0576105af610312565b5b600082013567ffffffffffffffff8111156105ce576105cd610317565b5b6105da8482850161057a565b91505092915050565b60008083601f8401126105f9576105f861031c565b5b8235905067ffffffffffffffff81111561061657610615610321565b5b60208301915083600182028301111561063257610631610326565b5b9250929050565b6000806000806040858703121561065357610652610312565b5b600085013567ffffffffffffffff81111561067157610670610317565b5b61067d8782880161032b565b9450945050602085013567ffffffffffffffff8111156106a05761069f610317565b5b6106ac878288016105e3565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000823560016101600383360303811261070b5761070a6106e9565b5b80830191505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061075b82610717565b915061076683610717565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561079b5761079a610721565b5b828201905092915050565b60006107b182610717565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107e4576107e3610721565b5b600182019050919050565b6107f881610717565b82525050565b600060208201905061081360008301846107ef565b92915050565b610822816104f9565b82525050565b600060208201905061083d6000830184610819565b92915050565b600082825260208201905092915050565b7f546573745369676e617475726556616c696461746f723a20736967206d75737460008201527f2062652075696e74000000000000000000000000000000000000000000000000602082015250565b60006108b0602883610843565b91506108bb82610854565b604082019050919050565b600060208201905081810360008301526108df816108a3565b9050919050565b6108ef81610717565b81146108fa57600080fd5b50565b60008135905061090c816108e6565b92915050565b60006020828403121561092857610927610312565b5b6000610936848285016108fd565b91505092915050565b7f546573745369676e617475726556616c696461746f723a20616767726567617460008201527f6564207369676e6174757265206d69736d6174636820286e6f6e63652073756d60208201527f2900000000000000000000000000000000000000000000000000000000000000604082015250565b60006109c1604183610843565b91506109cc8261093f565b606082019050919050565b600060208201905081810360008301526109f0816109b4565b905091905056fea2646970667358221220ec7de9f4fec667886c78d9527944816e8837cec15685f62f8e5682f70e1aa0af64736f6c634300080c0033"; + +type TestSignatureAggregatorConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestSignatureAggregatorConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestSignatureAggregator__factory extends ContractFactory { + constructor(...args: TestSignatureAggregatorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestSignatureAggregator { + return super.attach(address) as TestSignatureAggregator; + } + override connect(signer: Signer): TestSignatureAggregator__factory { + return super.connect(signer) as TestSignatureAggregator__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestSignatureAggregatorInterface { + return new utils.Interface(_abi) as TestSignatureAggregatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestSignatureAggregator { + return new Contract( + address, + _abi, + signerOrProvider + ) as TestSignatureAggregator; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts b/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts new file mode 100644 index 00000000..01089b41 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts @@ -0,0 +1,356 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestToken, + TestTokenInterface, +} from "../../../../src/aa-4337/test/TestToken"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + 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: "amount", + 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: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + 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: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60806040523480156200001157600080fd5b506040518060400160405280600381526020017f54535400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f54657374546f6b656e0000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620000b8565b508060049080519060200190620000af929190620000b8565b505050620001cd565b828054620000c69062000197565b90600052602060002090601f016020900481019282620000ea576000855562000136565b82601f106200010557805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013557825182559160200191906001019062000118565b5b50905062000145919062000149565b5090565b5b80821115620001645760008160009055506001016200014a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001b057607f821691505b60208210811415620001c757620001c662000168565b5b50919050565b61145780620001dd6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ca5565b60405180910390f35b6100f160048036038101906100ec9190610d60565b61032f565b6040516100fe9190610dbb565b60405180910390f35b61010f610352565b60405161011c9190610de5565b60405180910390f35b61013f600480360381019061013a9190610e00565b61035c565b60405161014c9190610dbb565b60405180910390f35b61015d61038b565b60405161016a9190610e6f565b60405180910390f35b61018d60048036038101906101889190610d60565b610394565b60405161019a9190610dbb565b60405180910390f35b6101bd60048036038101906101b89190610d60565b6103cb565b005b6101d960048036038101906101d49190610e8a565b6103d9565b6040516101e69190610de5565b60405180910390f35b6101f7610421565b6040516102049190610ca5565b60405180910390f35b61022760048036038101906102229190610d60565b6104b3565b6040516102349190610dbb565b60405180910390f35b61025760048036038101906102529190610d60565b61052a565b6040516102649190610dbb565b60405180910390f35b61028760048036038101906102829190610eb7565b61054d565b6040516102949190610de5565b60405180910390f35b6060600380546102ac90610f26565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f26565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f87565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f26565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f26565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061104f565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610643906110e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390611173565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610de5565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610816906111df565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90611271565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90611303565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90611395565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610de5565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290611401565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190610f87565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610de5565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c46578082015181840152602081019050610c2b565b83811115610c55576000848401525b50505050565b6000601f19601f8301169050919050565b6000610c7782610c0c565b610c818185610c17565b9350610c91818560208601610c28565b610c9a81610c5b565b840191505092915050565b60006020820190508181036000830152610cbf8184610c6c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610cf782610ccc565b9050919050565b610d0781610cec565b8114610d1257600080fd5b50565b600081359050610d2481610cfe565b92915050565b6000819050919050565b610d3d81610d2a565b8114610d4857600080fd5b50565b600081359050610d5a81610d34565b92915050565b60008060408385031215610d7757610d76610cc7565b5b6000610d8585828601610d15565b9250506020610d9685828601610d4b565b9150509250929050565b60008115159050919050565b610db581610da0565b82525050565b6000602082019050610dd06000830184610dac565b92915050565b610ddf81610d2a565b82525050565b6000602082019050610dfa6000830184610dd6565b92915050565b600080600060608486031215610e1957610e18610cc7565b5b6000610e2786828701610d15565b9350506020610e3886828701610d15565b9250506040610e4986828701610d4b565b9150509250925092565b600060ff82169050919050565b610e6981610e53565b82525050565b6000602082019050610e846000830184610e60565b92915050565b600060208284031215610ea057610e9f610cc7565b5b6000610eae84828501610d15565b91505092915050565b60008060408385031215610ece57610ecd610cc7565b5b6000610edc85828601610d15565b9250506020610eed85828601610d15565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3e57607f821691505b60208210811415610f5257610f51610ef7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f9282610d2a565b9150610f9d83610d2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610fd257610fd1610f58565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611039602583610c17565b915061104482610fdd565b604082019050919050565b600060208201905081810360008301526110688161102c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110cb602483610c17565b91506110d68261106f565b604082019050919050565b600060208201905081810360008301526110fa816110be565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061115d602283610c17565b915061116882611101565b604082019050919050565b6000602082019050818103600083015261118c81611150565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111c9601d83610c17565b91506111d482611193565b602082019050919050565b600060208201905081810360008301526111f8816111bc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061125b602583610c17565b9150611266826111ff565b604082019050919050565b6000602082019050818103600083015261128a8161124e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112ed602383610c17565b91506112f882611291565b604082019050919050565b6000602082019050818103600083015261131c816112e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061137f602683610c17565b915061138a82611323565b604082019050919050565b600060208201905081810360008301526113ae81611372565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113eb601f83610c17565b91506113f6826113b5565b602082019050919050565b6000602082019050818103600083015261141a816113de565b905091905056fea26469706673582212205e134dc3badf463984c641af8942d8acaa07ae26c77ad2ffede95b26e07eaa8a64736f6c634300080c0033"; + +type TestTokenConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestTokenConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestToken__factory extends ContractFactory { + constructor(...args: TestTokenConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestToken { + return super.attach(address) as TestToken; + } + override connect(signer: Signer): TestToken__factory { + return super.connect(signer) as TestToken__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestTokenInterface { + return new utils.Interface(_abi) as TestTokenInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestToken { + return new Contract(address, _abi, signerOrProvider) as TestToken; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts b/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts new file mode 100644 index 00000000..5f6b3824 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts @@ -0,0 +1,139 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestUtil, + TestUtilInterface, +} from "../../../../src/aa-4337/test/TestUtil"; + +const _abi = [ + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "op", + type: "tuple", + }, + ], + name: "packUserOp", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061028f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a24dea414610030575b600080fd5b61004a600480360381019061004591906100e3565b610060565b60405161005791906101c5565b60405180910390f35b606061006b82610072565b9050919050565b60603660008380610140019061008891906101f6565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b600080fd5b600080fd5b600080fd5b600061016082840312156100da576100d96100be565b5b81905092915050565b6000602082840312156100f9576100f86100b4565b5b600082013567ffffffffffffffff811115610117576101166100b9565b5b610123848285016100c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561016657808201518184015260208101905061014b565b83811115610175576000848401525b50505050565b6000601f19601f8301169050919050565b60006101978261012c565b6101a18185610137565b93506101b1818560208601610148565b6101ba8161017b565b840191505092915050565b600060208201905081810360008301526101df818461018c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112610213576102126101e7565b5b80840192508235915067ffffffffffffffff821115610235576102346101ec565b5b602083019250600182023603831315610251576102506101f1565b5b50925092905056fea26469706673582212208b24beb83d15a14f11c70d5738f6d3dc9fe457722187988aab255e5df02fc39164736f6c634300080c0033"; + +type TestUtilConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestUtilConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestUtil__factory extends ContractFactory { + constructor(...args: TestUtilConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestUtil { + return super.attach(address) as TestUtil; + } + override connect(signer: Signer): TestUtil__factory { + return super.connect(signer) as TestUtil__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestUtilInterface { + return new utils.Interface(_abi) as TestUtilInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestUtil { + return new Contract(address, _abi, signerOrProvider) as TestUtil; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts new file mode 100644 index 00000000..bfcdffea --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts @@ -0,0 +1,213 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + PayableOverrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TestWarmColdAccount, + TestWarmColdAccountInterface, +} from "../../../../src/aa-4337/test/TestWarmColdAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_ep", + type: "address", + }, + ], + stateMutability: "payable", + type: "constructor", + }, + { + inputs: [], + name: "state", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "paymaster", + type: "address", + }, + ], + name: "touchPaymaster", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "touchStorage", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x6080604052600180556040516107dd3803806107dd833981810160405281019061002991906100e4565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610111565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009f82610074565b9050919050565b60006100b182610094565b9050919050565b6100c1816100a6565b81146100cc57600080fd5b50565b6000815190506100de816100b8565b92915050565b6000602082840312156100fa576100f961006f565b5b6000610108848285016100cf565b91505092915050565b6106bd806101206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633a871cdd14610051578063c19d93fb14610081578063f115d40d1461009f578063fb0c2425146100cf575b600080fd5b61006b6004803603810190610066919061039d565b6100ed565b604051610078919061041b565b60405180910390f35b6100896102d1565b604051610096919061041b565b60405180910390f35b6100b960048036038101906100b49190610494565b6102d7565b6040516100c6919061041b565b60405180910390f35b6100d76102f8565b6040516100e4919061041b565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b815260040161014a91906104d0565b6000604051808303818588803b15801561016357600080fd5b505af1158015610177573d6000803e3d6000fd5b5050505050600184602001351415610202573073ffffffffffffffffffffffffffffffffffffffff1663fb0c24256103e86040518263ffffffff1660e01b81526004016020604051808303818786fa1580156101d7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101fc9190610500565b506102c6565b6002846020013514156102c557600084806101200190610222919061053c565b600090601492610234939291906105a9565b9061023f9190610628565b60601c90503073ffffffffffffffffffffffffffffffffffffffff1663f115d40d6103e8836040518363ffffffff1660e01b815260040161028091906104d0565b6020604051808303818786fa15801561029d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906102c29190610500565b50505b5b600090509392505050565b60015481565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050919050565b6000600154905090565b600080fd5b600080fd5b600080fd5b600061016082840312156103285761032761030c565b5b81905092915050565b6000819050919050565b61034481610331565b811461034f57600080fd5b50565b6000813590506103618161033b565b92915050565b6000819050919050565b61037a81610367565b811461038557600080fd5b50565b60008135905061039781610371565b92915050565b6000806000606084860312156103b6576103b5610302565b5b600084013567ffffffffffffffff8111156103d4576103d3610307565b5b6103e086828701610311565b93505060206103f186828701610352565b925050604061040286828701610388565b9150509250925092565b61041581610367565b82525050565b6000602082019050610430600083018461040c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046182610436565b9050919050565b61047181610456565b811461047c57600080fd5b50565b60008135905061048e81610468565b92915050565b6000602082840312156104aa576104a9610302565b5b60006104b88482850161047f565b91505092915050565b6104ca81610456565b82525050565b60006020820190506104e560008301846104c1565b92915050565b6000815190506104fa81610371565b92915050565b60006020828403121561051657610515610302565b5b6000610524848285016104eb565b91505092915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126105595761055861052d565b5b80840192508235915067ffffffffffffffff82111561057b5761057a610532565b5b60208301925060018202360383131561059757610596610537565b5b509250929050565b600080fd5b600080fd5b600080858511156105bd576105bc61059f565b5b838611156105ce576105cd6105a4565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061063483836105e4565b8261063f81356105ef565b9250601482101561067f5761067a7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360140360080261061b565b831692505b50509291505056fea2646970667358221220bc7d07bd269580351529e0674f1a7f6311a0e5dfeaab02f50e2b5004d3ee754164736f6c634300080c0033"; + +type TestWarmColdAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestWarmColdAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestWarmColdAccount__factory extends ContractFactory { + constructor(...args: TestWarmColdAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(_ep, overrides || {}) as Promise; + } + override getDeployTransaction( + _ep: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_ep, overrides || {}); + } + override attach(address: string): TestWarmColdAccount { + return super.attach(address) as TestWarmColdAccount; + } + override connect(signer: Signer): TestWarmColdAccount__factory { + return super.connect(signer) as TestWarmColdAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestWarmColdAccountInterface { + return new utils.Interface(_abi) as TestWarmColdAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestWarmColdAccount { + return new Contract(address, _abi, signerOrProvider) as TestWarmColdAccount; + } +} diff --git a/src/contracts/factories/src/aa-4337/test/index.ts b/src/contracts/factories/src/aa-4337/test/index.ts new file mode 100644 index 00000000..7dfbf504 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/test/index.ts @@ -0,0 +1,18 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as brokenBlsAccountSol from "./BrokenBlsAccount.sol"; +export { MaliciousAccount__factory } from "./MaliciousAccount__factory"; +export { TestAggregatedAccount__factory } from "./TestAggregatedAccount__factory"; +export { TestAggregatedAccountFactory__factory } from "./TestAggregatedAccountFactory__factory"; +export { TestCounter__factory } from "./TestCounter__factory"; +export { TestExpirePaymaster__factory } from "./TestExpirePaymaster__factory"; +export { TestExpiryAccount__factory } from "./TestExpiryAccount__factory"; +export { TestHelpers__factory } from "./TestHelpers__factory"; +export { TestOracle__factory } from "./TestOracle__factory"; +export { TestPaymasterAcceptAll__factory } from "./TestPaymasterAcceptAll__factory"; +export { TestRevertAccount__factory } from "./TestRevertAccount__factory"; +export { TestSignatureAggregator__factory } from "./TestSignatureAggregator__factory"; +export { TestToken__factory } from "./TestToken__factory"; +export { TestUtil__factory } from "./TestUtil__factory"; +export { TestWarmColdAccount__factory } from "./TestWarmColdAccount__factory"; diff --git a/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts new file mode 100644 index 00000000..5b3cb78b --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts @@ -0,0 +1,195 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + AccountController, + AccountControllerInterface, +} from "../../../src/backward_compatibility_helpers/AccountController"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountDeployed", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "accountRegistry", + type: "address", + }, + ], + name: "AccountRegistryUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "bytes", + name: "response", + type: "bytes", + }, + ], + name: "AccountTransactionExecuted", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountUpgraded", + type: "event", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "accountRegistry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806311464fbe1461003b578063d089e11a14610059575b600080fd5b610043610077565b6040516100509190610102565b60405180910390f35b61006161009d565b60405161006e9190610102565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ec826100c1565b9050919050565b6100fc816100e1565b82525050565b600060208201905061011760008301846100f3565b9291505056fea2646970667358221220082f23179c11d0572a28a3dde905421b1f50f8677b330066c3210e56c0f74efe64736f6c634300080c0033"; + +type AccountControllerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: AccountControllerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class AccountController__factory extends ContractFactory { + constructor(...args: AccountControllerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): AccountController { + return super.attach(address) as AccountController; + } + override connect(signer: Signer): AccountController__factory { + return super.connect(signer) as AccountController__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): AccountControllerInterface { + return new utils.Interface(_abi) as AccountControllerInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): AccountController { + return new Contract(address, _abi, signerOrProvider) as AccountController; + } +} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts new file mode 100644 index 00000000..1cbf2b7c --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts @@ -0,0 +1,139 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + AccountRegistryMock, + AccountRegistryMockInterface, +} from "../../../src/backward_compatibility_helpers/AccountRegistryMock"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address[]", + name: "owners", + type: "address[]", + }, + ], + name: "mockAccountOwners", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610e75806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063124e9eb314610046578063cbc438bf14610076578063e1e382ce14610092575b600080fd5b610060600480360381019061005b919061072f565b6100c2565b60405161006d91906107df565b60405180910390f35b610090600480360381019061008b9190610949565b6101ff565b005b6100ac60048036038101906100a791906109db565b6102d7565b6040516100b991906107df565b60405180910390f35b60008061016884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061015a88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506103c7565b61042190919063ffffffff16565b90506000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505095945050505050565b60008151905060005b818110156102d15760016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085848151811061026557610264610a4f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806102c990610ab7565b915050610208565b50505050565b60008061033184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508661042190919063ffffffff16565b90506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050949350505050565b60006103d382516104e5565b826040516020016103e49190610b7a565b604051602081830303815290604052604051602001610404929190610c24565b604051602081830303815290604052805190602001209050919050565b600080600090506041835114156104db5760008060006020860151925060408601519150606086015160001a9050601b8160ff16101561046b57601b816104689190610c60565b90505b601b8160ff1614806104805750601c8160ff16145b156104d757600187828585604051600081526020016040526040516104a89493929190610cb5565b6020604051602081039080840390855afa1580156104ca573d6000803e3d6000fd5b5050506020604051035193505b5050505b8091505092915050565b6060600082141561052d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610653565b600082905060005b6000821461055f57808061054890610ab7565b915050600a826105589190610d29565b9150610535565b60008167ffffffffffffffff81111561057b5761057a61080b565b5b6040519080825280601f01601f1916602001820160405280156105ad5781602001600182028036833780820191505090505b50905060006001836105bf9190610d5a565b90508593505b6000841461064b57600a846105da9190610d8e565b60306105e69190610dbf565b60f81b8282806105f590610e15565b93508151811061060857610607610a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a846106449190610d29565b93506105c5565b819450505050505b919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106978261066c565b9050919050565b6106a78161068c565b81146106b257600080fd5b50565b6000813590506106c48161069e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060006060868803121561074b5761074a610662565b5b6000610759888289016106b5565b955050602086013567ffffffffffffffff81111561077a57610779610667565b5b610786888289016106d9565b9450945050604086013567ffffffffffffffff8111156107a9576107a8610667565b5b6107b5888289016106d9565b92509250509295509295909350565b60008115159050919050565b6107d9816107c4565b82525050565b60006020820190506107f460008301846107d0565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610843826107fa565b810181811067ffffffffffffffff821117156108625761086161080b565b5b80604052505050565b6000610875610658565b9050610881828261083a565b919050565b600067ffffffffffffffff8211156108a1576108a061080b565b5b602082029050602081019050919050565b60006108c56108c084610886565b61086b565b905080838252602082019050602084028301858111156108e8576108e76106d4565b5b835b8181101561091157806108fd88826106b5565b8452602084019350506020810190506108ea565b5050509392505050565b600082601f8301126109305761092f6106ca565b5b81356109408482602086016108b2565b91505092915050565b600080604083850312156109605761095f610662565b5b600061096e858286016106b5565b925050602083013567ffffffffffffffff81111561098f5761098e610667565b5b61099b8582860161091b565b9150509250929050565b6000819050919050565b6109b8816109a5565b81146109c357600080fd5b50565b6000813590506109d5816109af565b92915050565b600080600080606085870312156109f5576109f4610662565b5b6000610a03878288016106b5565b9450506020610a14878288016109c6565b935050604085013567ffffffffffffffff811115610a3557610a34610667565b5b610a41878288016106d9565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610ac282610aad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610af557610af4610a7e565b5b600182019050919050565b600081519050919050565b600081905092915050565b60005b83811015610b34578082015181840152602081019050610b19565b83811115610b43576000848401525b50505050565b6000610b5482610b00565b610b5e8185610b0b565b9350610b6e818560208601610b16565b80840191505092915050565b6000610b868284610b49565b915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b6000610bd2601a83610b91565b9150610bdd82610b9c565b601a82019050919050565b600081519050919050565b6000610bfe82610be8565b610c088185610b91565b9350610c18818560208601610b16565b80840191505092915050565b6000610c2f82610bc5565b9150610c3b8285610bf3565b9150610c478284610b49565b91508190509392505050565b600060ff82169050919050565b6000610c6b82610c53565b9150610c7683610c53565b92508260ff03821115610c8c57610c8b610a7e565b5b828201905092915050565b610ca0816109a5565b82525050565b610caf81610c53565b82525050565b6000608082019050610cca6000830187610c97565b610cd76020830186610ca6565b610ce46040830185610c97565b610cf16060830184610c97565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610d3482610aad565b9150610d3f83610aad565b925082610d4f57610d4e610cfa565b5b828204905092915050565b6000610d6582610aad565b9150610d7083610aad565b925082821015610d8357610d82610a7e565b5b828203905092915050565b6000610d9982610aad565b9150610da483610aad565b925082610db457610db3610cfa565b5b828206905092915050565b6000610dca82610aad565b9150610dd583610aad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610e0a57610e09610a7e565b5b828201905092915050565b6000610e2082610aad565b91506000821415610e3457610e33610a7e565b5b60018203905091905056fea26469706673582212203ec6753d97a3dd90bd2080c115a00df338c8e229c6bb8064afd2b949333f2d3f64736f6c634300080c0033"; + +type AccountRegistryMockConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: AccountRegistryMockConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class AccountRegistryMock__factory extends ContractFactory { + constructor(...args: AccountRegistryMockConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): AccountRegistryMock { + return super.attach(address) as AccountRegistryMock; + } + override connect(signer: Signer): AccountRegistryMock__factory { + return super.connect(signer) as AccountRegistryMock__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): AccountRegistryMockInterface { + return new utils.Interface(_abi) as AccountRegistryMockInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): AccountRegistryMock { + return new Contract(address, _abi, signerOrProvider) as AccountRegistryMock; + } +} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts new file mode 100644 index 00000000..64676f1c --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts @@ -0,0 +1,167 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + Account, + AccountInterface, +} from "../../../src/backward_compatibility_helpers/Account"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "registry_", + type: "address", + }, + { + internalType: "address", + name: "implementation_", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + stateMutability: "nonpayable", + type: "fallback", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "executeTransaction", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "implementation_", + type: "address", + }, + ], + name: "setImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506040516107c03803806107c08339818101604052810190610032919061011d565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ea826100bf565b9050919050565b6100fa816100df565b811461010557600080fd5b50565b600081519050610117816100f1565b92915050565b60008060408385031215610134576101336100ba565b5b600061014285828601610108565b925050602061015385828601610108565b9150509250929050565b6106548061016c6000396000f3fe6080604052600436106100435760003560e01c80633f579f42146100b25780635c60da1b146100ef5780637b1039991461011a578063d784d426146101455761004a565b3661004a57005b34801561005657600080fd5b50600080369050146100b05760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050368060008037600080826000855af43d806000803e81600081146100ab57816000f35b816000fd5b005b3480156100be57600080fd5b506100d960048036038101906100d491906103c3565b61016e565b6040516100e691906104d0565b60405180910390f35b3480156100fb57600080fd5b50610104610233565b6040516101119190610501565b60405180910390f35b34801561012657600080fd5b5061012f610257565b60405161013c9190610501565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061051c565b61027d565b005b60608060008673ffffffffffffffffffffffffffffffffffffffff1686868660405161019b929190610588565b60006040518083038185875af1925050503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b50809350819250505080610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021d906105fe565b60405180910390fd5b8192505050949350505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102f5826102ca565b9050919050565b610305816102ea565b811461031057600080fd5b50565b600081359050610322816102fc565b92915050565b6000819050919050565b61033b81610328565b811461034657600080fd5b50565b60008135905061035881610332565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103835761038261035e565b5b8235905067ffffffffffffffff8111156103a05761039f610363565b5b6020830191508360018202830111156103bc576103bb610368565b5b9250929050565b600080600080606085870312156103dd576103dc6102c0565b5b60006103eb87828801610313565b94505060206103fc87828801610349565b935050604085013567ffffffffffffffff81111561041d5761041c6102c5565b5b6104298782880161036d565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015610471578082015181840152602081019050610456565b83811115610480576000848401525b50505050565b6000601f19601f8301169050919050565b60006104a282610437565b6104ac8185610442565b93506104bc818560208601610453565b6104c581610486565b840191505092915050565b600060208201905081810360008301526104ea8184610497565b905092915050565b6104fb816102ea565b82525050565b600060208201905061051660008301846104f2565b92915050565b600060208284031215610532576105316102c0565b5b600061054084828501610313565b91505092915050565b600081905092915050565b82818337600083830152505050565b600061056f8385610549565b935061057c838584610554565b82840190509392505050565b6000610595828486610563565b91508190509392505050565b600082825260208201905092915050565b7f4163636f756e743a207472616e73616374696f6e207265766572746564000000600082015250565b60006105e8601d836105a1565b91506105f3826105b2565b602082019050919050565b60006020820190508181036000830152610617816105db565b905091905056fea26469706673582212206b9b9ebc1fe271ad52229dcc3cf6ce7ac54f7f1e3122a2d683a44b4e1c5be84764736f6c634300080c0033"; + +type AccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: AccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Account__factory extends ContractFactory { + constructor(...args: AccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + registry_: PromiseOrValue, + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + registry_, + implementation_, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + registry_: PromiseOrValue, + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + registry_, + implementation_, + overrides || {} + ); + } + override attach(address: string): Account { + return super.attach(address) as Account; + } + override connect(signer: Signer): Account__factory { + return super.connect(signer) as Account__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): AccountInterface { + return new utils.Interface(_abi) as AccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Account { + return new Contract(address, _abi, signerOrProvider) as Account; + } +} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts new file mode 100644 index 00000000..88e082a2 --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts @@ -0,0 +1,81 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + GatewayRecipient, + GatewayRecipientInterface, +} from "../../../src/backward_compatibility_helpers/GatewayRecipient"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "gateway", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063116191b614602d575b600080fd5b60336047565b604051603e919060a8565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000609482606b565b9050919050565b60a281608b565b82525050565b600060208201905060bb6000830184609b565b9291505056fea264697066735822122059311830636dc2e6c7bed48ec5f4f44d9e1ec0a6a7d3cc54d8aa07f5f7feec7f64736f6c634300080c0033"; + +type GatewayRecipientConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GatewayRecipientConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class GatewayRecipient__factory extends ContractFactory { + constructor(...args: GatewayRecipientConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): GatewayRecipient { + return super.attach(address) as GatewayRecipient; + } + override connect(signer: Signer): GatewayRecipient__factory { + return super.connect(signer) as GatewayRecipient__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GatewayRecipientInterface { + return new utils.Interface(_abi) as GatewayRecipientInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): GatewayRecipient { + return new Contract(address, _abi, signerOrProvider) as GatewayRecipient; + } +} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts new file mode 100644 index 00000000..423c80b4 --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts @@ -0,0 +1,587 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + PersonalAccountRegistry, + PersonalAccountRegistryInterface, +} from "../../../src/backward_compatibility_helpers/PersonalAccountRegistry"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "beneficiary", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "token", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "AccountCallRefunded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountDeployed", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "AccountOwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "AccountOwnerRemoved", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "accountRegistry", + type: "address", + }, + ], + name: "AccountRegistryUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "bytes", + name: "response", + type: "bytes", + }, + ], + name: "AccountTransactionExecuted", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "accountImplementation", + type: "address", + }, + ], + name: "AccountUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "accountRegistry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "addAccountOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "saltOwner", + type: "address", + }, + ], + name: "computeAccountAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "deployAccount", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "executeAccountTransaction", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "gateway", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "accountImplementation_", + type: "address", + }, + { + internalType: "address", + name: "gateway_", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "isAccountDeployed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "refundAccountCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "removeAccountOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "accountImplementation_", + type: "address", + }, + ], + name: "upgrade", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "upgradeAccount", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "verifyAccountOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "blockNumber", + type: "uint256", + }, + ], + name: "verifyAccountOwnerAtBlock", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506144bf806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001245760003560e01c8063485cc95511620000b1578063da9fc1ae116200007b578063da9fc1ae146200031d578063db63f582146200033d578063e1e382ce146200035d578063e5c7278f1462000393578063f4876c7414620003b35762000124565b8063485cc955146200026f578063bb890d3f146200028f578063cade6a5d14620002c5578063d089e11a14620002fb5762000124565b80631a84140311620000f35780631a84140314620001c35780633164b5e114620001e357806334d323a4146200021957806343013c24146200024f5762000124565b80630900f010146200012957806311464fbe1462000149578063116191b6146200016b578063124e9eb3146200018d575b600080fd5b62000147600480360381019062000141919062002539565b620003d3565b005b62000153620003e3565b6040516200016291906200257c565b60405180910390f35b6200017562000409565b6040516200018491906200257c565b60405180910390f35b620001ab6004803603810190620001a5919062002607565b6200042f565b604051620001ba9190620026c8565b60405180910390f35b620001e16004803603810190620001db919062002720565b620004ee565b005b620002016004803603810190620001fb919062002539565b620006db565b604051620002109190620026c8565b60405180910390f35b62000237600480360381019062000231919062002720565b62000734565b604051620002469190620026c8565b60405180910390f35b6200026d600480360381019062000267919062002539565b62000828565b005b6200028d60048036038101906200028791906200277c565b62000844565b005b620002ad6004803603810190620002a791906200277c565b620009a2565b604051620002bc9190620026c8565b60405180910390f35b620002e36004803603810190620002dd919062002539565b620009b8565b604051620002f291906200257c565b60405180910390f35b62000305620009cc565b6040516200031491906200257c565b60405180910390f35b6200033b600480360381019062000335919062002539565b620009f0565b005b6200035b60048036038101906200035591906200277c565b62000a0a565b005b6200037b6004803603810190620003759190620027fe565b62000c4d565b6040516200038a9190620026c8565b60405180910390f35b620003b16004803603810190620003ab91906200287e565b62000cbd565b005b620003d16004803603810190620003cb91906200277c565b62000d30565b005b620003e08160016200100d565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000620004e386620004dd85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050620004ce89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505062001128565b6200118890919063ffffffff16565b62001255565b905095945050505050565b620004f98362001411565b506200050583620017de565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005a3576200059c833283600067ffffffffffffffff81111562000560576200055f62002914565b5b6040519080825280601f01601f191660200182016040528015620005935781602001600182028036833780820191505090505b506000620018e2565b5062000697565b60006200062f8484600063a9059cbb60e01b3287604051602401620005ca92919062002954565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506000620018e2565b9050600081511115620006955780806020019051810190620006529190620029b2565b62000694576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068b9062002a6b565b60405180910390fd5b5b505b7feb5511fbef89123439f12682f0e9d0fc9696913b26eee55434c77d62c30aa7ca83328484604051620006ce949392919062002a8d565b60405180910390a1505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000905062000747858562001255565b156200075757600190506200081d565b6200081a83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001b1f90919063ffffffff16565b90505b809150509392505050565b620008338162001411565b506200084181600162001b73565b50565b6000600160159054906101000a900460ff1615905080801562000878575060018060149054906101000a900460ff1660ff16105b80620008aa57506200088a3062001d72565b158015620008a9575060018060149054906101000a900460ff1660ff16145b5b620008ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e39062002b50565b60405180910390fd5b60018060146101000a81548160ff021916908360ff1602179055508015620009295760018060156101000a81548160ff0219169083151502179055505b62000935308462001d95565b620009408262001db3565b80156200099d576000600160156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405162000994919062002bcc565b60405180910390a15b505050565b6000620009b0838362001255565b905092915050565b6000620009c58262001df7565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620009fb8162001411565b5062000a0781620017de565b50565b600062000a178362001411565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a829062002c5f565b60405180910390fd5b62000b44600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001e38565b62000b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7d9062002cf7565b60405180910390fd5b43600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f1ce3cbbc43ee231e5b950332f2b0b9dd7d349291a3ee411ce5c5c7ed745661bb838360405162000c4092919062002d19565b60405180910390a1505050565b600062000cb38562000cad85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050876200118890919063ffffffff16565b62001255565b9050949350505050565b62000cc88562001411565b5062000cd485620017de565b62000d2885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001620018e2565b505050505050565b62000d3b8262001411565b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da69062002dbc565b60405180910390fd5b62000e68600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001e38565b1562000eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ea29062002e54565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f27e282f7712c5b4617277759c834b86d163dfc1aad25c8c3c5926a1c9e56446882826040516200100192919062002d19565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010779062002eec565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550801562001124577f70d9f5a076620216a6050e493f3ce69749de0b68fa4b839ba2518660ba8b9cf0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200111b91906200257c565b60405180910390a15b5050565b600062001136825162001e4d565b8260405160200162001149919062002f91565b6040516020818303038152906040526040516020016200116b92919062003047565b604051602081830303815290604052805190602001209050919050565b600080600090506041835114156200124b5760008060006020860151925060408601519150606086015160001a9050601b8160ff161015620011d657601b81620011d39190620030ab565b90505b601b8160ff161480620011ec5750601c8160ff16145b156200124757600187828585604051600081526020016040526040516200121794939291906200310b565b6020604051602081039080840390855afa1580156200123a573d6000803e3d6000fd5b5050506020604051035193505b5050505b8091505092915050565b600080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156200137c576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414905062001407565b6000801b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414156200140657620013d58362001df7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505b5b8091505092915050565b6000806200141e62001fdb565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161562001584576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154146200157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200157590620031ce565b60405180910390fd5b620017d5565b6000801b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154146200160e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200160590620031ce565b60405180910390fd5b60008160405160200162001623919062003240565b604051602081830303815290604052805190602001209050620016468162001fee565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614620016b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016ad90620031ce565b60405180910390fd5b80600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055507f27e282f7712c5b4617277759c834b86d163dfc1aad25c8c3c5926a1c9e5644688483604051620017cb92919062002d19565b60405180910390a1505b80915050919050565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16620018df5762001882600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001620020d7565b506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b50565b6060600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562001957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200194e90620032d3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620019c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620019c0906200336b565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562001a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a329062003403565b60405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff16633f579f428787876040518463ffffffff1660e01b815260040162001a7c9392919062003488565b6000604051808303816000875af115801562001a9c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062001ac79190620035da565b9050821562001b12577f99eeae1fb8801e2e878e060ec5e5b3557b3c4f8106e35d88cb573f293dae4e24878787878560405162001b099594939291906200362b565b60405180910390a15b8091505095945050505050565b6000806000905083600001511562001b695760008460200151141562001b49576001905062001b68565b600083141562001b5d576001905062001b67565b8284602001511190505b5b5b8091505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bf8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c1e9190620036ad565b73ffffffffffffffffffffffffffffffffffffffff16141562001c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c6f9062003755565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663d784d426600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001cd591906200257c565b600060405180830381600087803b15801562001cf057600080fd5b505af115801562001d05573d6000803e3d6000fd5b50505050801562001d6e577feec27cdb8bd6f55c2c537deb52ab094a2437e85ef5197e6f064f90bff3ff563f82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162001d6592919062002d19565b60405180910390a15b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b62001da2826000620021cd565b62001daf8160006200100d565b5050565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808260405160200162001e0d919062003240565b60405160208183030381529060405280519060200120905062001e308162001fee565b915050919050565b600062001e46824362001b1f565b9050919050565b6060600082141562001e97576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905062001fd6565b600082905060005b6000821462001ecf57808062001eb59062003777565b915050600a8262001ec79190620037f4565b915062001e9f565b60008167ffffffffffffffff81111562001eee5762001eed62002914565b5b6040519080825280601f01601f19166020018201604052801562001f215781602001600182028036833780820191505090505b509050600060018362001f3591906200382c565b90508593505b6000841462001fce57600a8462001f53919062003867565b603062001f6191906200389f565b60f81b82828062001f7290620038fc565b93508151811062001f885762001f876200392b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8462001fc69190620037f4565b935062001f3b565b819450505050505b919050565b600062001fe96014620022e5565b905090565b600080604051806020016200200390620024b2565b6020820181038252601f19601f82011660405250600060a01b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060a01b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516020016200207b959493929190620039ab565b6040516020818303038152906040529050600060ff60f81b30858480519060200120604051602001620020b2949392919062003a86565b6040516020818303038152906040528051906020012090508060001c92505050919050565b6000808360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200212d90620024b2565b6200213a92919062002d19565b8190604051809103906000f59050801580156200215b573d6000803e3d6000fd5b5090508215620021c3577f2682a218602b9036c9869f006c5405ee4a1a65267653eb7e286123e5e1afde4c81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620021ba92919062002d19565b60405180910390a15b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562002240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022379062003b52565b60405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620022e1577f02e3c47057b8dc27a0929d3c394c314c73aa002d46939c31c9f71d1e77e86c1060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620022d891906200257c565b60405180910390a15b5050565b60008060009050620022f662002398565b156200238b5760008360003690506200231091906200382c565b90506200238260003683906014856200232a91906200389f565b92620023399392919062003b7e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505062002449565b9150506200238f565b3390505b80915050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200244257602c600036905010156200243d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024349062003c35565b60405180910390fd5b600190505b8091505090565b600080601483511462002493576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200248a9062003ca7565b60405180910390fd5b6c01000000000000000000000000602084015104905080915050919050565b6107c08062003cca83390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200250182620024d4565b9050919050565b6200251381620024f4565b81146200251f57600080fd5b50565b600081359050620025338162002508565b92915050565b600060208284031215620025525762002551620024ca565b5b6000620025628482850162002522565b91505092915050565b6200257681620024f4565b82525050565b60006020820190506200259360008301846200256b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112620025c157620025c062002599565b5b8235905067ffffffffffffffff811115620025e157620025e06200259e565b5b6020830191508360018202830111156200260057620025ff620025a3565b5b9250929050565b600080600080600060608688031215620026265762002625620024ca565b5b6000620026368882890162002522565b955050602086013567ffffffffffffffff8111156200265a5762002659620024cf565b5b6200266888828901620025a8565b9450945050604086013567ffffffffffffffff8111156200268e576200268d620024cf565b5b6200269c88828901620025a8565b92509250509295509295909350565b60008115159050919050565b620026c281620026ab565b82525050565b6000602082019050620026df6000830184620026b7565b92915050565b6000819050919050565b620026fa81620026e5565b81146200270657600080fd5b50565b6000813590506200271a81620026ef565b92915050565b6000806000606084860312156200273c576200273b620024ca565b5b60006200274c8682870162002522565b93505060206200275f8682870162002522565b9250506040620027728682870162002709565b9150509250925092565b60008060408385031215620027965762002795620024ca565b5b6000620027a68582860162002522565b9250506020620027b98582860162002522565b9150509250929050565b6000819050919050565b620027d881620027c3565b8114620027e457600080fd5b50565b600081359050620027f881620027cd565b92915050565b600080600080606085870312156200281b576200281a620024ca565b5b60006200282b8782880162002522565b94505060206200283e87828801620027e7565b935050604085013567ffffffffffffffff811115620028625762002861620024cf565b5b6200287087828801620025a8565b925092505092959194509250565b6000806000806000608086880312156200289d576200289c620024ca565b5b6000620028ad8882890162002522565b9550506020620028c08882890162002522565b9450506040620028d38882890162002709565b935050606086013567ffffffffffffffff811115620028f757620028f6620024cf565b5b6200290588828901620025a8565b92509250509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200294e81620026e5565b82525050565b60006040820190506200296b60008301856200256b565b6200297a602083018462002943565b9392505050565b6200298c81620026ab565b81146200299857600080fd5b50565b600081519050620029ac8162002981565b92915050565b600060208284031215620029cb57620029ca620024ca565b5b6000620029db848285016200299b565b91505092915050565b600082825260208201905092915050565b7f506572736f6e616c4163636f756e7452656769737472793a204552433230546f60008201527f6b656e207472616e736665722072657665727465640000000000000000000000602082015250565b600062002a53603583620029e4565b915062002a6082620029f5565b604082019050919050565b6000602082019050818103600083015262002a868162002a44565b9050919050565b600060808201905062002aa460008301876200256b565b62002ab360208301866200256b565b62002ac260408301856200256b565b62002ad1606083018462002943565b95945050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600062002b38602e83620029e4565b915062002b458262002ada565b604082019050919050565b6000602082019050818103600083015262002b6b8162002b29565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b600062002bb462002bae62002ba88462002b72565b62002b89565b62002b7c565b9050919050565b62002bc68162002b93565b82525050565b600060208201905062002be3600083018462002bbb565b92915050565b7f506572736f6e616c4163636f756e7452656769737472793a2063616e6e6f742060008201527f72656d6f76652073656c66000000000000000000000000000000000000000000602082015250565b600062002c47602b83620029e4565b915062002c548262002be9565b604082019050919050565b6000602082019050818103600083015262002c7a8162002c38565b9050919050565b7f506572736f6e616c4163636f756e7452656769737472793a206f776e6572206460008201527f6f65736e27742065786973740000000000000000000000000000000000000000602082015250565b600062002cdf602c83620029e4565b915062002cec8262002c81565b604082019050919050565b6000602082019050818103600083015262002d128162002cd0565b9050919050565b600060408201905062002d3060008301856200256b565b62002d3f60208301846200256b565b9392505050565b7f506572736f6e616c4163636f756e7452656769737472793a2063616e6e6f742060008201527f61646420307830206f776e657200000000000000000000000000000000000000602082015250565b600062002da4602d83620029e4565b915062002db18262002d46565b604082019050919050565b6000602082019050818103600083015262002dd78162002d95565b9050919050565b7f506572736f6e616c4163636f756e7452656769737472793a206f776e6572206160008201527f6c72656164792065786973747300000000000000000000000000000000000000602082015250565b600062002e3c602d83620029e4565b915062002e498262002dde565b604082019050919050565b6000602082019050818103600083015262002e6f8162002e2d565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073657420616360008201527f636f756e7420496d706c656d656e746174696f6e20746f203078300000000000602082015250565b600062002ed4603b83620029e4565b915062002ee18262002e76565b604082019050919050565b6000602082019050818103600083015262002f078162002ec5565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101562002f4457808201518184015260208101905062002f27565b8381111562002f54576000848401525b50505050565b600062002f678262002f0e565b62002f73818562002f19565b935062002f8581856020860162002f24565b80840191505092915050565b600062002f9f828462002f5a565b915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b600062002fed601a8362002faa565b915062002ffa8262002fb5565b601a82019050919050565b600081519050919050565b60006200301d8262003005565b62003029818562002faa565b93506200303b81856020860162002f24565b80840191505092915050565b6000620030548262002fde565b915062003062828562003010565b915062003070828462002f5a565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620030b88262002b7c565b9150620030c58362002b7c565b92508260ff03821115620030de57620030dd6200307c565b5b828201905092915050565b620030f481620027c3565b82525050565b620031058162002b7c565b82525050565b6000608082019050620031226000830187620030e9565b620031316020830186620030fa565b620031406040830185620030e9565b6200314f6060830184620030e9565b95945050505050565b7f506572736f6e616c4163636f756e7452656769737472793a2073656e6465722060008201527f6973206e6f7420746865206163636f756e74206f776e65720000000000000000602082015250565b6000620031b6603883620029e4565b9150620031c38262003158565b604082019050919050565b60006020820190508181036000830152620031e981620031a7565b9050919050565b60008160601b9050919050565b60006200320a82620031f0565b9050919050565b60006200321e82620031fd565b9050919050565b6200323a6200323482620024f4565b62003211565b82525050565b60006200324e828462003225565b60148201915081905092915050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f20307830000000000000000000000000000000000000000000000000000000602082015250565b6000620032bb602583620029e4565b9150620032c8826200325d565b604082019050919050565b60006020820190508181036000830152620032ee81620032ac565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f20636f6e74726f6c6c65720000000000000000000000000000000000000000602082015250565b600062003353602c83620029e4565b91506200336082620032f5565b604082019050919050565b60006020820190508181036000830152620033868162003344565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f2073656c660000000000000000000000000000000000000000000000000000602082015250565b6000620033eb602683620029e4565b9150620033f8826200338d565b604082019050919050565b600060208201905081810360008301526200341e81620033dc565b9050919050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b6000620034548262002f0e565b62003460818562003425565b93506200347281856020860162002f24565b6200347d8162003436565b840191505092915050565b60006060820190506200349f60008301866200256b565b620034ae602083018562002943565b8181036040830152620034c2818462003447565b9050949350505050565b600080fd5b620034dc8262003436565b810181811067ffffffffffffffff82111715620034fe57620034fd62002914565b5b80604052505050565b600062003513620024c0565b9050620035218282620034d1565b919050565b600067ffffffffffffffff82111562003544576200354362002914565b5b6200354f8262003436565b9050602081019050919050565b6000620035736200356d8462003526565b62003507565b905082815260208101848484011115620035925762003591620034cc565b5b6200359f84828562002f24565b509392505050565b600082601f830112620035bf57620035be62002599565b5b8151620035d18482602086016200355c565b91505092915050565b600060208284031215620035f357620035f2620024ca565b5b600082015167ffffffffffffffff811115620036145762003613620024cf565b5b6200362284828501620035a7565b91505092915050565b600060a0820190506200364260008301886200256b565b6200365160208301876200256b565b62003660604083018662002943565b818103606083015262003674818562003447565b905081810360808301526200368a818462003447565b90509695505050505050565b600081519050620036a78162002508565b92915050565b600060208284031215620036c657620036c5620024ca565b5b6000620036d68482850162003696565b91505092915050565b7f4163636f756e74436f6e74726f6c6c65723a206163636f756e7420616c72656160008201527f6479207570677261646564000000000000000000000000000000000000000000602082015250565b60006200373d602b83620029e4565b91506200374a82620036df565b604082019050919050565b6000602082019050818103600083015262003770816200372e565b9050919050565b60006200378482620026e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620037ba57620037b96200307c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200380182620026e5565b91506200380e83620026e5565b925082620038215762003820620037c5565b5b828204905092915050565b60006200383982620026e5565b91506200384683620026e5565b9250828210156200385c576200385b6200307c565b5b828203905092915050565b60006200387482620026e5565b91506200388183620026e5565b925082620038945762003893620037c5565b5b828206905092915050565b6000620038ac82620026e5565b9150620038b983620026e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620038f157620038f06200307c565b5b828201905092915050565b60006200390982620026e5565b9150600082141562003920576200391f6200307c565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffff000000000000000000000000000000000000000082169050919050565b6000819050919050565b620039a56200399f826200395a565b62003986565b82525050565b6000620039b9828862002f5a565b9150620039c7828762003990565b600c82019150620039d9828662003225565b601482019150620039eb828562003990565b600c82019150620039fd828462003225565b6014820191508190509695505050505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b62003a5b62003a558262003a10565b62003a3c565b82525050565b6000819050919050565b62003a8062003a7a82620027c3565b62003a61565b82525050565b600062003a94828762003a46565b60018201915062003aa6828662003225565b60148201915062003ab8828562003a6b565b60208201915062003aca828462003a6b565b60208201915081905095945050505050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073657420616360008201527f636f756e7420726567697374727920746f203078300000000000000000000000602082015250565b600062003b3a603583620029e4565b915062003b478262003adc565b604082019050919050565b6000602082019050818103600083015262003b6d8162003b2b565b9050919050565b600080fd5b600080fd5b6000808585111562003b955762003b9462003b74565b5b8386111562003ba95762003ba862003b79565b5b6001850283019150848603905094509492505050565b7f47617465776179526563697069656e743a20696e76616c6964206d73672e646160008201527f7461000000000000000000000000000000000000000000000000000000000000602082015250565b600062003c1d602283620029e4565b915062003c2a8262003bbf565b604082019050919050565b6000602082019050818103600083015262003c508162003c0e565b9050919050565b7f42797465734c69623a20696e76616c69642064617461206c656e677468000000600082015250565b600062003c8f601d83620029e4565b915062003c9c8262003c57565b602082019050919050565b6000602082019050818103600083015262003cc28162003c80565b905091905056fe608060405234801561001057600080fd5b506040516107c03803806107c08339818101604052810190610032919061011d565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ea826100bf565b9050919050565b6100fa816100df565b811461010557600080fd5b50565b600081519050610117816100f1565b92915050565b60008060408385031215610134576101336100ba565b5b600061014285828601610108565b925050602061015385828601610108565b9150509250929050565b6106548061016c6000396000f3fe6080604052600436106100435760003560e01c80633f579f42146100b25780635c60da1b146100ef5780637b1039991461011a578063d784d426146101455761004a565b3661004a57005b34801561005657600080fd5b50600080369050146100b05760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050368060008037600080826000855af43d806000803e81600081146100ab57816000f35b816000fd5b005b3480156100be57600080fd5b506100d960048036038101906100d491906103c3565b61016e565b6040516100e691906104d0565b60405180910390f35b3480156100fb57600080fd5b50610104610233565b6040516101119190610501565b60405180910390f35b34801561012657600080fd5b5061012f610257565b60405161013c9190610501565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061051c565b61027d565b005b60608060008673ffffffffffffffffffffffffffffffffffffffff1686868660405161019b929190610588565b60006040518083038185875af1925050503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b50809350819250505080610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021d906105fe565b60405180910390fd5b8192505050949350505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102f5826102ca565b9050919050565b610305816102ea565b811461031057600080fd5b50565b600081359050610322816102fc565b92915050565b6000819050919050565b61033b81610328565b811461034657600080fd5b50565b60008135905061035881610332565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103835761038261035e565b5b8235905067ffffffffffffffff8111156103a05761039f610363565b5b6020830191508360018202830111156103bc576103bb610368565b5b9250929050565b600080600080606085870312156103dd576103dc6102c0565b5b60006103eb87828801610313565b94505060206103fc87828801610349565b935050604085013567ffffffffffffffff81111561041d5761041c6102c5565b5b6104298782880161036d565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015610471578082015181840152602081019050610456565b83811115610480576000848401525b50505050565b6000601f19601f8301169050919050565b60006104a282610437565b6104ac8185610442565b93506104bc818560208601610453565b6104c581610486565b840191505092915050565b600060208201905081810360008301526104ea8184610497565b905092915050565b6104fb816102ea565b82525050565b600060208201905061051660008301846104f2565b92915050565b600060208284031215610532576105316102c0565b5b600061054084828501610313565b91505092915050565b600081905092915050565b82818337600083830152505050565b600061056f8385610549565b935061057c838584610554565b82840190509392505050565b6000610595828486610563565b91508190509392505050565b600082825260208201905092915050565b7f4163636f756e743a207472616e73616374696f6e207265766572746564000000600082015250565b60006105e8601d836105a1565b91506105f3826105b2565b602082019050919050565b60006020820190508181036000830152610617816105db565b905091905056fea26469706673582212206b9b9ebc1fe271ad52229dcc3cf6ce7ac54f7f1e3122a2d683a44b4e1c5be84764736f6c634300080c0033a264697066735822122092cece821589feec4fd8d2e42c2502fb8a1299c6a062fa555d0fcc8e45634fb764736f6c634300080c0033"; + +type PersonalAccountRegistryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: PersonalAccountRegistryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class PersonalAccountRegistry__factory extends ContractFactory { + constructor(...args: PersonalAccountRegistryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): PersonalAccountRegistry { + return super.attach(address) as PersonalAccountRegistry; + } + override connect(signer: Signer): PersonalAccountRegistry__factory { + return super.connect(signer) as PersonalAccountRegistry__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): PersonalAccountRegistryInterface { + return new utils.Interface(_abi) as PersonalAccountRegistryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): PersonalAccountRegistry { + return new Contract( + address, + _abi, + signerOrProvider + ) as PersonalAccountRegistry; + } +} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/index.ts b/src/contracts/factories/src/backward_compatibility_helpers/index.ts new file mode 100644 index 00000000..bfb1c22d --- /dev/null +++ b/src/contracts/factories/src/backward_compatibility_helpers/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { Account__factory } from "./Account__factory"; +export { AccountController__factory } from "./AccountController__factory"; +export { AccountRegistryMock__factory } from "./AccountRegistryMock__factory"; +export { GatewayRecipient__factory } from "./GatewayRecipient__factory"; +export { PersonalAccountRegistry__factory } from "./PersonalAccountRegistry__factory"; diff --git a/src/contracts/factories/src/index.ts b/src/contracts/factories/src/index.ts new file mode 100644 index 00000000..eb602088 --- /dev/null +++ b/src/contracts/factories/src/index.ts @@ -0,0 +1,10 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as aa4337 from "./aa-4337"; +export * as backwardCompatibilityHelpers from "./backward_compatibility_helpers"; +export * as interfaces from "./interfaces"; +export * as libs from "./libs"; +export * as paymaster from "./paymaster"; +export * as test from "./test"; +export * as wallet from "./wallet"; diff --git a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts b/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts new file mode 100644 index 00000000..30c9a1b4 --- /dev/null +++ b/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts @@ -0,0 +1,242 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IPaymaster, + IPaymasterInterface, +} from "../../../../src/interfaces/IEtherspotPaymaster.sol/IPaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_sponsor", + type: "address", + }, + ], + name: "checkSponsorFunds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "depositFunds", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IPaymaster__factory { + static readonly abi = _abi; + static createInterface(): IPaymasterInterface { + return new utils.Interface(_abi) as IPaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IPaymaster { + return new Contract(address, _abi, signerOrProvider) as IPaymaster; + } +} diff --git a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts b/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts new file mode 100644 index 00000000..7b03cddb --- /dev/null +++ b/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IPaymaster__factory } from "./IPaymaster__factory"; diff --git a/src/contracts/factories/src/interfaces/IWhitelist__factory.ts b/src/contracts/factories/src/interfaces/IWhitelist__factory.ts new file mode 100644 index 00000000..d5b0a88c --- /dev/null +++ b/src/contracts/factories/src/interfaces/IWhitelist__factory.ts @@ -0,0 +1,102 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IWhitelist, + IWhitelistInterface, +} from "../../../src/interfaces/IWhitelist"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "add", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "addBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_sponsor", + type: "address", + }, + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "check", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "remove", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "removeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IWhitelist__factory { + static readonly abi = _abi; + static createInterface(): IWhitelistInterface { + return new utils.Interface(_abi) as IWhitelistInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IWhitelist { + return new Contract(address, _abi, signerOrProvider) as IWhitelist; + } +} diff --git a/src/contracts/factories/src/interfaces/index.ts b/src/contracts/factories/src/interfaces/index.ts new file mode 100644 index 00000000..2be29a4a --- /dev/null +++ b/src/contracts/factories/src/interfaces/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as iEtherspotPaymasterSol from "./IEtherspotPaymaster.sol"; +export { IWhitelist__factory } from "./IWhitelist__factory"; diff --git a/src/contracts/factories/src/libs/ValidationConstants__factory.ts b/src/contracts/factories/src/libs/ValidationConstants__factory.ts new file mode 100644 index 00000000..7a29ed6e --- /dev/null +++ b/src/contracts/factories/src/libs/ValidationConstants__factory.ts @@ -0,0 +1,128 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + ValidationConstants, + ValidationConstantsInterface, +} from "../../../src/libs/ValidationConstants"; + +const _abi = [ + { + inputs: [], + name: "ERC1271_INVALID_SIGNATURE", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ERC1271_VALID_MESSAGE_SIGNATURE", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ERC1820_ACCEPT_MAGIC", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x6103f6610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100615760003560e01c80634bdfa29d1461006657806369821c8c146100845780637bdd887c146100a2578063901f87c6146100c0578063ec38fa42146100de575b600080fd5b61006e6100fc565b60405161007b91906101e2565b60405180910390f35b61008c610107565b6040516100999190610216565b60405180910390f35b6100aa61012f565b6040516100b791906101e2565b60405180910390f35b6100c8610157565b6040516100d591906101e2565b60405180910390f35b6100e661017f565b6040516100f39190610216565b60405180910390f35b63ffffffff60e01b81565b60405160200161011690610288565b6040516020818303038152906040528051906020012081565b60405160200161013e906102e9565b6040516020818303038152906040528051906020012081565b6040516020016101669061034a565b6040516020818303038152906040528051906020012081565b60405160200161018e906103ab565b6040516020818303038152906040528051906020012081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6101dc816101a7565b82525050565b60006020820190506101f760008301846101d3565b92915050565b6000819050919050565b610210816101fd565b82525050565b600060208201905061022b6000830184610207565b92915050565b600081905092915050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000610272601583610231565b915061027d8261023c565b601582019050919050565b600061029382610265565b9150819050919050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b60006102d3601f83610231565b91506102de8261029d565b601f82019050919050565b60006102f4826102c6565b9150819050919050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000610334601d83610231565b915061033f826102fe565b601d82019050919050565b600061035582610327565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000610395601483610231565b91506103a08261035f565b601482019050919050565b60006103b682610388565b915081905091905056fea2646970667358221220d15890426055a306a3fcadff8bfa54c02417ef34b9d13496e6878aa77d588b9f64736f6c634300080c0033"; + +type ValidationConstantsConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ValidationConstantsConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ValidationConstants__factory extends ContractFactory { + constructor(...args: ValidationConstantsConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): ValidationConstants { + return super.attach(address) as ValidationConstants; + } + override connect(signer: Signer): ValidationConstants__factory { + return super.connect(signer) as ValidationConstants__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ValidationConstantsInterface { + return new utils.Interface(_abi) as ValidationConstantsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ValidationConstants { + return new Contract(address, _abi, signerOrProvider) as ValidationConstants; + } +} diff --git a/src/contracts/factories/src/libs/index.ts b/src/contracts/factories/src/libs/index.ts new file mode 100644 index 00000000..ff4f2824 --- /dev/null +++ b/src/contracts/factories/src/libs/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { ValidationConstants__factory } from "./ValidationConstants__factory"; diff --git a/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts b/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts new file mode 100644 index 00000000..051d8f5d --- /dev/null +++ b/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts @@ -0,0 +1,753 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + EtherspotPaymaster, + EtherspotPaymasterInterface, +} from "../../../src/paymaster/EtherspotPaymaster"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address[]", + name: "accounts", + type: "address[]", + }, + ], + name: "AddedBatchToWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "AddedToWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address[]", + name: "accounts", + type: "address[]", + }, + ], + name: "RemovedBatchFromWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "RemovedFromWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "userOpHash", + type: "bytes", + }, + ], + name: "SponsorSuccessful", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "userOpHash", + type: "bytes", + }, + ], + name: "SponsorUnsuccessful", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: false, + internalType: "string", + name: "version", + type: "string", + }, + ], + name: "WhitelistInitialized", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "add", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "addBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_sponsor", + type: "address", + }, + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "check", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_sponsor", + type: "address", + }, + ], + name: "checkSponsorFunds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "depositFunds", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + ], + name: "getHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "parsePaymasterAndData", + outputs: [ + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "enum IPaymaster.PostOpMode", + name: "mode", + type: "uint8", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + name: "postOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "remove", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "removeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "senderNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "sponsorFunds", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "maxCost", + type: "uint256", + }, + ], + name: "validatePaymasterUserOp", + outputs: [ + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "whitelist", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b50604051620035d0380380620035d08339818101604052810190620000379190620001de565b80620000586200004c6200009460201b60201c565b6200009c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000210565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001928262000165565b9050919050565b6000620001a68262000185565b9050919050565b620001b88162000199565b8114620001c457600080fd5b50565b600081519050620001d881620001ad565b92915050565b600060208284031215620001f757620001f662000160565b5b60006200020784828501620001c7565b91505092915050565b60805161336c620002646000396000818161056d015281816106100152818161090f0152818161094f015281816109d901528181610a6901528181610b0801528181610c390152611356015261336c6000f3fe60806040526004361061014b5760003560e01c8063a9a23409116100b6578063c399ec881161006f578063c399ec8814610480578063d0e30db0146104ab578063d672bd84146104b5578063e2c41dbc146104f2578063f2fde38b146104fc578063f465c77e146105255761014b565b8063a9a2340914610372578063b092145e1461039b578063b0d691fe146103d8578063b3154db014610403578063bb9fe6bf14610440578063c23a5cea146104575761014b565b80636b845bfe116101085780636b845bfe1461024d578063715018a6146102765780638da5cb5b1461028d57806394d4ad60146102b857806394e1fc19146102f85780639c90b443146103355761014b565b80630396cb60146101505780630a3b0a4f1461016c578063205c28781461019557806324efa264146101be57806329092d0e146101e75780633f514c2514610210575b600080fd5b61016a60048036038101906101659190611b7d565b610563565b005b34801561017857600080fd5b50610193600480360381019061018e9190611c08565b6105fa565b005b3480156101a157600080fd5b506101bc60048036038101906101b79190611ca9565b610606565b005b3480156101ca57600080fd5b506101e560048036038101906101e09190611d4e565b61069f565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611c08565b610708565b005b34801561021c57600080fd5b5061023760048036038101906102329190611c08565b610714565b6040516102449190611daa565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d4e565b61072c565b005b34801561028257600080fd5b5061028b610795565b005b34801561029957600080fd5b506102a26107a9565b6040516102af9190611dd4565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190611e45565b6107d2565b6040516102ef9493929190611f11565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190611fa2565b610821565b60405161032c919061202a565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190611c08565b6108ac565b6040516103699190611daa565b60405180910390f35b34801561037e57600080fd5b506103996004803603810190610394919061206a565b6108c4565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906120de565b6108de565b6040516103cf9190612139565b60405180910390f35b3480156103e457600080fd5b506103ed61090d565b6040516103fa91906121b3565b60405180910390f35b34801561040f57600080fd5b5061042a600480360381019061042591906120de565b610931565b6040516104379190612139565b60405180910390f35b34801561044c57600080fd5b50610455610945565b005b34801561046357600080fd5b5061047e600480360381019061047991906121ce565b6109cf565b005b34801561048c57600080fd5b50610495610a65565b6040516104a29190611daa565b60405180910390f35b6104b3610b06565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190611c08565b610b94565b6040516104e99190611daa565b60405180910390f35b6104fa610bdd565b005b34801561050857600080fd5b50610523600480360381019061051e9190611c08565b610d1b565b005b34801561053157600080fd5b5061054c60048036038101906105479190612227565b610d9f565b60405161055a92919061230d565b60405180910390f35b61056b610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016105c5919061234c565b6000604051808303818588803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505050505050565b61060381610e40565b50565b61060e610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610669929190612376565b600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b505050505050565b6106a98282610feb565b81816040516106b992919061245c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b6107118161103f565b50565b60026020528060005260406000206000915090505481565b61073682826111ea565b818160405161074692919061245c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b61079d610dc2565b6107a7600061123e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008036600085856014906054926107ec9392919061247f565b8101906107f991906124ba565b8094508195505050858560549080926108149392919061247f565b9150915092959194509250565b600061082c84611302565b46306003600061083b89611344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054868660405160200161088d969594939291906124fa565b6040516020818303038152906040528051906020012090509392505050565b60036020528060005260406000206000915090505481565b6108cc611354565b6108d8848484846113e4565b50505050565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061093d83836114e9565b905092915050565b61094d610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b50505050565b6109d7610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610a309190612562565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac09190611dd4565b602060405180830381865afa158015610add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b019190612592565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610b609190611dd4565b6000604051808303818588803b158015610b7957600080fd5b505af1158015610b8d573d6000803e3d6000fd5b5050505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b343373ffffffffffffffffffffffffffffffffffffffff16311015610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90612642565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610c919190611dd4565b6000604051808303818588803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050505034600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d129190612691565b92505081905550565b610d23610dc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90612759565b60405180910390fd5b610d9c8161123e565b50565b60606000610dab611354565b610db685858561157d565b91509150935093915050565b610dca611798565b73ffffffffffffffffffffffffffffffffffffffff16610de86107a9565b73ffffffffffffffffffffffffffffffffffffffff1614610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906127c5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790612831565b60405180910390fd5b610eba33826114e9565b15610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906128c3565b60405180910390fd5b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b60005b8282905081101561103a5761102983838381811061100f5761100e6128e3565b5b90506020020160208101906110249190611c08565b610e40565b8061103390612912565b9050610fee565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690612831565b60405180910390fd5b6110b933826114e9565b6110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906129cd565b60405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b60005b828290508110156112395761122883838381811061120e5761120d6128e3565b5b90506020020160208101906112239190611c08565b61103f565b8061123290612912565b90506111ed565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60603660008380610120019061131891906129fc565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b6000808235905080915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612aab565b60405180910390fd5b565b600080600085858101906113f89190612bec565b9250925092506000600281111561141257611411612c5b565b5b87600281111561142557611424612c5b565b5b14806114555750600160028111156114405761143f612c5b565b5b87600281111561145357611452612c5b565b5b145b156114a45761146483856117a0565b7f6037aec16210adc5ac3bd79d71a8b5e065e39248b6c2b7bf56205c017520a13583838360405161149793929190612c8a565b60405180910390a16114e0565b7fc62b7ae5a6b2e4bcc39074f040d2a98076ba08224858f7b5e476ead9bf3130d58383836040516114d793929190612c8a565b60405180910390a15b50505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000808036600061159f8980610120019061159a91906129fc565b6107d2565b935093509350935060408282905014806115bc5750604182829050145b6115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290612d60565b60405180910390fd5b600061161061160b8b8787610821565b6117fa565b90506003600061161f8c611344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061166a90612912565b9190505550600061167a8b611344565b905060006116cc8386868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061182a565b90506116d881836114e9565b611709576116e860018888611851565b60405180602001604052806000815250909850985050505050505050611790565b8961171382610b94565b1015611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90612df2565b60405180910390fd5b80828d6040516020016117699392919061305b565b60405160208183030381529060405261178460008989611851565b98509850505050505050505b935093915050565b600033905090565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ef9190613099565b925050819055505050565b60008160405160200161180d9190613145565b604051602081830303815290604052805190602001209050919050565b6000806000611839858561188a565b91509150611846816118dc565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561187957600061187c565b60015b60ff16171790509392505050565b6000806041835114156118cc5760008060006020860151925060408601519150606086015160001a90506118c087828585611a4a565b945094505050506118d5565b60006002915091505b9250929050565b600060048111156118f0576118ef612c5b565b5b81600481111561190357611902612c5b565b5b141561190e57611a47565b6001600481111561192257611921612c5b565b5b81600481111561193557611934612c5b565b5b1415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906131b7565b60405180910390fd5b6002600481111561198a57611989612c5b565b5b81600481111561199d5761199c612c5b565b5b14156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613223565b60405180910390fd5b600360048111156119f2576119f1612c5b565b5b816004811115611a0557611a04612c5b565b5b1415611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d906132b5565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611a85576000600391509150611b24565b600060018787878760405160008152602001604052604051611aaa94939291906132f1565b6020604051602081039080840390855afa158015611acc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b1b57600060019250925050611b24565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b611b5a81611b41565b8114611b6557600080fd5b50565b600081359050611b7781611b51565b92915050565b600060208284031215611b9357611b92611b37565b5b6000611ba184828501611b68565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd582611baa565b9050919050565b611be581611bca565b8114611bf057600080fd5b50565b600081359050611c0281611bdc565b92915050565b600060208284031215611c1e57611c1d611b37565b5b6000611c2c84828501611bf3565b91505092915050565b6000611c4082611baa565b9050919050565b611c5081611c35565b8114611c5b57600080fd5b50565b600081359050611c6d81611c47565b92915050565b6000819050919050565b611c8681611c73565b8114611c9157600080fd5b50565b600081359050611ca381611c7d565b92915050565b60008060408385031215611cc057611cbf611b37565b5b6000611cce85828601611c5e565b9250506020611cdf85828601611c94565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d0e57611d0d611ce9565b5b8235905067ffffffffffffffff811115611d2b57611d2a611cee565b5b602083019150836020820283011115611d4757611d46611cf3565b5b9250929050565b60008060208385031215611d6557611d64611b37565b5b600083013567ffffffffffffffff811115611d8357611d82611b3c565b5b611d8f85828601611cf8565b92509250509250929050565b611da481611c73565b82525050565b6000602082019050611dbf6000830184611d9b565b92915050565b611dce81611bca565b82525050565b6000602082019050611de96000830184611dc5565b92915050565b60008083601f840112611e0557611e04611ce9565b5b8235905067ffffffffffffffff811115611e2257611e21611cee565b5b602083019150836001820283011115611e3e57611e3d611cf3565b5b9250929050565b60008060208385031215611e5c57611e5b611b37565b5b600083013567ffffffffffffffff811115611e7a57611e79611b3c565b5b611e8685828601611def565b92509250509250929050565b600065ffffffffffff82169050919050565b611ead81611e92565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611ef08385611eb3565b9350611efd838584611ec4565b611f0683611ed3565b840190509392505050565b6000606082019050611f266000830187611ea4565b611f336020830186611ea4565b8181036040830152611f46818486611ee4565b905095945050505050565b600080fd5b60006101608284031215611f6d57611f6c611f51565b5b81905092915050565b611f7f81611e92565b8114611f8a57600080fd5b50565b600081359050611f9c81611f76565b92915050565b600080600060608486031215611fbb57611fba611b37565b5b600084013567ffffffffffffffff811115611fd957611fd8611b3c565b5b611fe586828701611f56565b9350506020611ff686828701611f8d565b925050604061200786828701611f8d565b9150509250925092565b6000819050919050565b61202481612011565b82525050565b600060208201905061203f600083018461201b565b92915050565b6003811061205257600080fd5b50565b60008135905061206481612045565b92915050565b6000806000806060858703121561208457612083611b37565b5b600061209287828801612055565b945050602085013567ffffffffffffffff8111156120b3576120b2611b3c565b5b6120bf87828801611def565b935093505060406120d287828801611c94565b91505092959194509250565b600080604083850312156120f5576120f4611b37565b5b600061210385828601611bf3565b925050602061211485828601611bf3565b9150509250929050565b60008115159050919050565b6121338161211e565b82525050565b600060208201905061214e600083018461212a565b92915050565b6000819050919050565b600061217961217461216f84611baa565b612154565b611baa565b9050919050565b600061218b8261215e565b9050919050565b600061219d82612180565b9050919050565b6121ad81612192565b82525050565b60006020820190506121c860008301846121a4565b92915050565b6000602082840312156121e4576121e3611b37565b5b60006121f284828501611c5e565b91505092915050565b61220481612011565b811461220f57600080fd5b50565b600081359050612221816121fb565b92915050565b6000806000606084860312156122405761223f611b37565b5b600084013567ffffffffffffffff81111561225e5761225d611b3c565b5b61226a86828701611f56565b935050602061227b86828701612212565b925050604061228c86828701611c94565b9150509250925092565b600081519050919050565b60005b838110156122bf5780820151818401526020810190506122a4565b838111156122ce576000848401525b50505050565b60006122df82612296565b6122e98185611eb3565b93506122f98185602086016122a1565b61230281611ed3565b840191505092915050565b6000604082019050818103600083015261232781856122d4565b90506123366020830184611d9b565b9392505050565b61234681611b41565b82525050565b6000602082019050612361600083018461233d565b92915050565b61237081611c35565b82525050565b600060408201905061238b6000830185612367565b6123986020830184611d9b565b9392505050565b600081905092915050565b6000819050919050565b6123bd81611bca565b82525050565b60006123cf83836123b4565b60208301905092915050565b60006123ea6020840184611bf3565b905092915050565b6000602082019050919050565b600061240b838561239f565b9350612416826123aa565b8060005b8581101561244f5761242c82846123db565b61243688826123c3565b9750612441836123f2565b92505060018101905061241a565b5085925050509392505050565b60006124698284866123ff565b91508190509392505050565b600080fd5b600080fd5b6000808585111561249357612492612475565b5b838611156124a4576124a361247a565b5b6001850283019150848603905094509492505050565b600080604083850312156124d1576124d0611b37565b5b60006124df85828601611f8d565b92505060206124f085828601611f8d565b9150509250929050565b600060c082019050818103600083015261251481896122d4565b90506125236020830188611d9b565b6125306040830187611dc5565b61253d6060830186611d9b565b61254a6080830185611ea4565b61255760a0830184611ea4565b979650505050505050565b60006020820190506125776000830184612367565b92915050565b60008151905061258c81611c7d565b92915050565b6000602082840312156125a8576125a7611b37565b5b60006125b68482850161257d565b91505092915050565b600082825260208201905092915050565b7f457468657273706f745061796d61737465723a3a204e6f7420656e6f7567682060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b600061262c6027836125bf565b9150612637826125d0565b604082019050919050565b6000602082019050818103600083015261265b8161261f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061269c82611c73565b91506126a783611c73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126dc576126db612662565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127436026836125bf565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127af6020836125bf565b91506127ba82612779565b602082019050919050565b600060208201905081810360008301526127de816127a2565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b600061281b6018836125bf565b9150612826826127e5565b602082019050919050565b6000602082019050818103600083015261284a8161280e565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b60006128ad602a836125bf565b91506128b882612851565b604082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061291d82611c73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129505761294f612662565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b60006129b76026836125bf565b91506129c28261295b565b604082019050919050565b600060208201905081810360008301526129e6816129aa565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612a1957612a186129ed565b5b80840192508235915067ffffffffffffffff821115612a3b57612a3a6129f2565b5b602083019250600182023603831315612a5757612a566129f7565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000612a956015836125bf565b9150612aa082612a5f565b602082019050919050565b60006020820190508181036000830152612ac481612a88565b9050919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b0882611ed3565b810181811067ffffffffffffffff82111715612b2757612b26612ad0565b5b80604052505050565b6000612b3a611b2d565b9050612b468282612aff565b919050565b600067ffffffffffffffff821115612b6657612b65612ad0565b5b612b6f82611ed3565b9050602081019050919050565b6000612b8f612b8a84612b4b565b612b30565b905082815260208101848484011115612bab57612baa612acb565b5b612bb6848285611ec4565b509392505050565b600082601f830112612bd357612bd2611ce9565b5b8135612be3848260208601612b7c565b91505092915050565b600080600060608486031215612c0557612c04611b37565b5b6000612c1386828701611c5e565b9350506020612c2486828701611c5e565b925050604084013567ffffffffffffffff811115612c4557612c44611b3c565b5b612c5186828701612bbe565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000606082019050612c9f6000830186611dc5565b612cac6020830185611dc5565b8181036040830152612cbe81846122d4565b9050949350505050565b7f457468657273706f745061796d61737465723a3a20696e76616c69642073696760008201527f6e6174757265206c656e67746820696e207061796d6173746572416e6444617460208201527f6100000000000000000000000000000000000000000000000000000000000000604082015250565b6000612d4a6041836125bf565b9150612d5582612cc8565b606082019050919050565b60006020820190508181036000830152612d7981612d3d565b9050919050565b7f457468657273706f745061796d61737465723a3a2053706f6e736f722070617960008201527f6d61737465722066756e647320746f6f206c6f77000000000000000000000000602082015250565b6000612ddc6034836125bf565b9150612de782612d80565b604082019050919050565b60006020820190508181036000830152612e0b81612dcf565b9050919050565b612e1b81611bca565b82525050565b6000612e306020840184611c94565b905092915050565b612e4181611c73565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e7357612e72612e51565b5b83810192508235915060208301925067ffffffffffffffff821115612e9b57612e9a612e47565b5b600182023603841315612eb157612eb0612e4c565b5b509250929050565b600082825260208201905092915050565b6000612ed68385612eb9565b9350612ee3838584611ec4565b612eec83611ed3565b840190509392505050565b60006101608301612f0b60008401846123db565b612f186000860182612e12565b50612f266020840184612e21565b612f336020860182612e38565b50612f416040840184612e56565b8583036040870152612f54838284612eca565b92505050612f656060840184612e56565b8583036060870152612f78838284612eca565b92505050612f896080840184612e21565b612f966080860182612e38565b50612fa460a0840184612e21565b612fb160a0860182612e38565b50612fbf60c0840184612e21565b612fcc60c0860182612e38565b50612fda60e0840184612e21565b612fe760e0860182612e38565b50612ff6610100840184612e21565b613004610100860182612e38565b50613013610120840184612e56565b858303610120870152613027838284612eca565b92505050613039610140840184612e56565b85830361014087015261304d838284612eca565b925050508091505092915050565b60006060820190506130706000830186611dc5565b61307d6020830185611dc5565b818103604083015261308f8184612ef7565b9050949350505050565b60006130a482611c73565b91506130af83611c73565b9250828210156130c2576130c1612662565b5b828203905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061310e601c836130cd565b9150613119826130d8565b601c82019050919050565b6000819050919050565b61313f61313a82612011565b613124565b82525050565b600061315082613101565b915061315c828461312e565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006131a16018836125bf565b91506131ac8261316b565b602082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061320d601f836125bf565b9150613218826131d7565b602082019050919050565b6000602082019050818103600083015261323c81613200565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061329f6022836125bf565b91506132aa82613243565b604082019050919050565b600060208201905081810360008301526132ce81613292565b9050919050565b600060ff82169050919050565b6132eb816132d5565b82525050565b6000608082019050613306600083018761201b565b61331360208301866132e2565b613320604083018561201b565b61332d606083018461201b565b9594505050505056fea264697066735822122082d8a299cdc816681d27f4d36004bdd8abb14cdceaf6392217b89db60ed145ac64736f6c634300080c0033"; + +type EtherspotPaymasterConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EtherspotPaymasterConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EtherspotPaymaster__factory extends ContractFactory { + constructor(...args: EtherspotPaymasterConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): EtherspotPaymaster { + return super.attach(address) as EtherspotPaymaster; + } + override connect(signer: Signer): EtherspotPaymaster__factory { + return super.connect(signer) as EtherspotPaymaster__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EtherspotPaymasterInterface { + return new utils.Interface(_abi) as EtherspotPaymasterInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EtherspotPaymaster { + return new Contract(address, _abi, signerOrProvider) as EtherspotPaymaster; + } +} diff --git a/src/contracts/factories/src/paymaster/Whitelist__factory.ts b/src/contracts/factories/src/paymaster/Whitelist__factory.ts new file mode 100644 index 00000000..cda3c6f1 --- /dev/null +++ b/src/contracts/factories/src/paymaster/Whitelist__factory.ts @@ -0,0 +1,310 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + Whitelist, + WhitelistInterface, +} from "../../../src/paymaster/Whitelist"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address[]", + name: "accounts", + type: "address[]", + }, + ], + name: "AddedBatchToWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "AddedToWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address[]", + name: "accounts", + type: "address[]", + }, + ], + name: "RemovedBatchFromWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "RemovedFromWhitelist", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: false, + internalType: "string", + name: "version", + type: "string", + }, + ], + name: "WhitelistInitialized", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "add", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "addBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_sponsor", + type: "address", + }, + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "check", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + name: "remove", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "_accounts", + type: "address[]", + }, + ], + name: "removeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "whitelist", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610fb98061010d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a6146101085780638da5cb5b14610112578063b092145e14610130578063b3154db014610160578063f2fde38b1461019057610093565b80630a3b0a4f1461009857806324efa264146100b457806329092d0e146100d05780636b845bfe146100ec575b600080fd5b6100b260048036038101906100ad91906109de565b6101ac565b005b6100ce60048036038101906100c99190610a70565b6101b8565b005b6100ea60048036038101906100e591906109de565b610221565b005b61010660048036038101906101019190610a70565b61022d565b005b610110610296565b005b61011a6102aa565b6040516101279190610acc565b60405180910390f35b61014a60048036038101906101459190610ae7565b6102d3565b6040516101579190610b42565b60405180910390f35b61017a60048036038101906101759190610ae7565b610302565b6040516101879190610b42565b60405180910390f35b6101aa60048036038101906101a591906109de565b610316565b005b6101b58161039a565b50565b6101c28282610545565b81816040516101d2929190610c1a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b61022a81610599565b50565b6102378282610744565b8181604051610247929190610c1a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b61029e610798565b6102a86000610816565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600061030e83836108da565b905092915050565b61031e610798565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561038e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038590610cb6565b60405180910390fd5b61039781610816565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561040a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040190610d22565b60405180910390fd5b61041433826108da565b15610454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044b90610db4565b60405180910390fd5b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b60005b828290508110156105945761058383838381811061056957610568610dd4565b5b905060200201602081019061057e91906109de565b61039a565b8061058d90610e3c565b9050610548565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090610d22565b60405180910390fd5b61061333826108da565b610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064990610ef7565b60405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b60005b828290508110156107935761078283838381811061076857610767610dd4565b5b905060200201602081019061077d91906109de565b610599565b8061078c90610e3c565b9050610747565b505050565b6107a061096e565b73ffffffffffffffffffffffffffffffffffffffff166107be6102aa565b73ffffffffffffffffffffffffffffffffffffffff1614610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b90610f63565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109ab82610980565b9050919050565b6109bb816109a0565b81146109c657600080fd5b50565b6000813590506109d8816109b2565b92915050565b6000602082840312156109f4576109f3610976565b5b6000610a02848285016109c9565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610a3057610a2f610a0b565b5b8235905067ffffffffffffffff811115610a4d57610a4c610a10565b5b602083019150836020820283011115610a6957610a68610a15565b5b9250929050565b60008060208385031215610a8757610a86610976565b5b600083013567ffffffffffffffff811115610aa557610aa461097b565b5b610ab185828601610a1a565b92509250509250929050565b610ac6816109a0565b82525050565b6000602082019050610ae16000830184610abd565b92915050565b60008060408385031215610afe57610afd610976565b5b6000610b0c858286016109c9565b9250506020610b1d858286016109c9565b9150509250929050565b60008115159050919050565b610b3c81610b27565b82525050565b6000602082019050610b576000830184610b33565b92915050565b600081905092915050565b6000819050919050565b610b7b816109a0565b82525050565b6000610b8d8383610b72565b60208301905092915050565b6000610ba860208401846109c9565b905092915050565b6000602082019050919050565b6000610bc98385610b5d565b9350610bd482610b68565b8060005b85811015610c0d57610bea8284610b99565b610bf48882610b81565b9750610bff83610bb0565b925050600181019050610bd8565b5085925050509392505050565b6000610c27828486610bbd565b91508190509392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610ca0602683610c33565b9150610cab82610c44565b604082019050919050565b60006020820190508181036000830152610ccf81610c93565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b6000610d0c601883610c33565b9150610d1782610cd6565b602082019050919050565b60006020820190508181036000830152610d3b81610cff565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b6000610d9e602a83610c33565b9150610da982610d42565b604082019050919050565b60006020820190508181036000830152610dcd81610d91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610e4782610e32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610e7a57610e79610e03565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b6000610ee1602683610c33565b9150610eec82610e85565b604082019050919050565b60006020820190508181036000830152610f1081610ed4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610f4d602083610c33565b9150610f5882610f17565b602082019050919050565b60006020820190508181036000830152610f7c81610f40565b905091905056fea264697066735822122052a5630e8f7125b7b50671b5cd9fbfe51cd3fb706eeb6ca6673ed3cbd618a91864736f6c634300080c0033"; + +type WhitelistConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: WhitelistConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Whitelist__factory extends ContractFactory { + constructor(...args: WhitelistConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): Whitelist { + return super.attach(address) as Whitelist; + } + override connect(signer: Signer): Whitelist__factory { + return super.connect(signer) as Whitelist__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): WhitelistInterface { + return new utils.Interface(_abi) as WhitelistInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Whitelist { + return new Contract(address, _abi, signerOrProvider) as Whitelist; + } +} diff --git a/src/contracts/factories/src/paymaster/index.ts b/src/contracts/factories/src/paymaster/index.ts new file mode 100644 index 00000000..55169608 --- /dev/null +++ b/src/contracts/factories/src/paymaster/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { EtherspotPaymaster__factory } from "./EtherspotPaymaster__factory"; +export { Whitelist__factory } from "./Whitelist__factory"; diff --git a/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts b/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts new file mode 100644 index 00000000..c9329a46 --- /dev/null +++ b/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts @@ -0,0 +1,719 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + TestEtherspotWallet, + TestEtherspotWalletInterface, +} from "../../../src/test/TestEtherspotWallet"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613c7061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613c706000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612146565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a9190612215565b61059d565b6040516101ac91906122d8565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612329565b6105b2565b6040516101e991906122d8565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612435565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906124b6565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906124b6565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906124e3565b6109d2565b6040516102a191906122d8565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612564565b610ab8565b6040516102de91906125b3565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906124b6565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906125f3565b610cd9565b6040516103449190612671565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906126ca565b610d98565b005b61039a6004803603810190610395919061284b565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be91906125b3565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906128b6565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906128b6565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906128b6565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a9190612671565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612930565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061294b565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906129fd565b611138565b005b3480156104fc57600080fd5b50610505611197565b6040516105129190612671565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612a50565b61121f565b60405161054f91906122d8565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612aea565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612b5f565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612bd7565b6106665763ffffffff60e01b61068c565b60405160200161067590612c5b565b604051602081830303815290604052805190602001205b90509392505050565b61069d611235565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612cf3565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612d13565b5b905060200201602081019061071e91906124b6565b600085858581811061073357610732612d13565b5b90506020028101906107459190612d51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611304565b808061079890612de3565b9150506106e8565b5050505050565b6107af611388565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612e9e565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612ebe565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611388565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612f59565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612ebe565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190612f79565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612bd7565b610a885763ffffffff60e01b610aae565b604051602001610a979061300e565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca9061306f565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906130d0565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613157565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e611450565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906131e9565b60405180910390fd5b610c7d816114a7565b610cd681600067ffffffffffffffff811115610c9c57610c9b612720565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b5060006114b2565b50565b6000610ce3611620565b610ced8484611697565b90506000848060400190610d019190612d51565b90501415610d1357610d1284611775565b5b610d1c82611823565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906128b6565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611388565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613218565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613157565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee6611450565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906131e9565b60405180910390fd5b610f45826114a7565b610f51828260016114b2565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906132b3565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e3611235565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611304565b50505050565b600060159054906101000a900460ff16611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90613345565b60405180910390fd5b6111928383836118bf565b505050565b60006111a16110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111d991906128b6565b602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a919061337a565b905090565b600063f23a6e6160e01b90509695505050505050565b61123d6110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c357506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990613419565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161132d91906134b3565b60006040518083038185875af1925050503d806000811461136a576040519150601f19603f3d011682016040523d82523d6000602084013e61136f565b606091505b50915091508161138157805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613516565b60405180910390fd5b565b600061147e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611a5b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114af611388565b50565b6114de7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611a65565b60000160009054906101000a900460ff1615611502576114fd83611a6f565b61161b565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561156a57506040513d601f19601f82011682018060405250810190611567919061354b565b60015b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906135ea565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461160e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116059061367c565b60405180910390fd5b5061161a838383611b28565b5b505050565b6116286110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c9061370e565b60405180910390fd5b565b6000806116a383611b54565b905061170b848061014001906116b99190612d51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611b8490919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176957600191505061176f565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906117a490613746565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906137c7565b60405180910390fd5b50565b600081146118bc5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118739061380d565b600060405180830381858888f193505050503d80600081146118b1576040519150601f19603f3d011682016040523d82523d6000602084013e6118b6565b606091505b50509050505b50565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611a7881611bab565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613894565b60405180910390fd5b80611ae47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611a5b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b3183611bce565b600082511180611b3e5750805b15611b4f57611b4d8383611c1d565b505b505050565b600081604051602001611b679190613921565b604051602081830303815290604052805190602001209050919050565b6000806000611b938585611c4a565b91509150611ba081611c9c565b819250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611bd781611a6f565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611c428383604051806060016040528060278152602001613c1460279139611e0a565b905092915050565b600080604183511415611c8c5760008060006020860151925060408601519150606086015160001a9050611c8087828585611e90565b94509450505050611c95565b60006002915091505b9250929050565b60006004811115611cb057611caf613947565b5b816004811115611cc357611cc2613947565b5b1415611cce57611e07565b60016004811115611ce257611ce1613947565b5b816004811115611cf557611cf4613947565b5b1415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906139c2565b60405180910390fd5b60026004811115611d4a57611d49613947565b5b816004811115611d5d57611d5c613947565b5b1415611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613a2e565b60405180910390fd5b60036004811115611db257611db1613947565b5b816004811115611dc557611dc4613947565b5b1415611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90613ac0565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611e3491906134b3565b600060405180830381855af49150503d8060008114611e6f576040519150601f19603f3d011682016040523d82523d6000602084013e611e74565b606091505b5091509150611e8586838387611f73565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611ecb576000600391509150611f6a565b600060018787878760405160008152602001604052604051611ef09493929190613afc565b6020604051602081039080840390855afa158015611f12573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f6157600060019250925050611f6a565b80600092509250505b94509492505050565b60608315611fd657600083511415611fce57611f8e85611bab565b611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490613b8d565b60405180910390fd5b5b829050611fe1565b611fe08383611fe9565b5b949350505050565b600082511115611ffc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120309190613bf1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120788261204d565b9050919050565b6120888161206d565b811461209357600080fd5b50565b6000813590506120a58161207f565b92915050565b6000819050919050565b6120be816120ab565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612106576121056120e1565b5b8235905067ffffffffffffffff811115612123576121226120e6565b5b60208301915083600182028301111561213f5761213e6120eb565b5b9250929050565b60008060008060008060008060c0898b03121561216657612165612043565b5b60006121748b828c01612096565b98505060206121858b828c01612096565b97505060406121968b828c01612096565b96505060606121a78b828c016120cc565b955050608089013567ffffffffffffffff8111156121c8576121c7612048565b5b6121d48b828c016120f0565b945094505060a089013567ffffffffffffffff8111156121f7576121f6612048565b5b6122038b828c016120f0565b92509250509295985092959890939650565b60008060008060006080868803121561223157612230612043565b5b600061223f88828901612096565b955050602061225088828901612096565b9450506040612261888289016120cc565b935050606086013567ffffffffffffffff81111561228257612281612048565b5b61228e888289016120f0565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122d28161229d565b82525050565b60006020820190506122ed60008301846122c9565b92915050565b6000819050919050565b612306816122f3565b811461231157600080fd5b50565b600081359050612323816122fd565b92915050565b60008060006040848603121561234257612341612043565b5b600061235086828701612314565b935050602084013567ffffffffffffffff81111561237157612370612048565b5b61237d868287016120f0565b92509250509250925092565b60008083601f84011261239f5761239e6120e1565b5b8235905067ffffffffffffffff8111156123bc576123bb6120e6565b5b6020830191508360208202830111156123d8576123d76120eb565b5b9250929050565b60008083601f8401126123f5576123f46120e1565b5b8235905067ffffffffffffffff811115612412576124116120e6565b5b60208301915083602082028301111561242e5761242d6120eb565b5b9250929050565b6000806000806040858703121561244f5761244e612043565b5b600085013567ffffffffffffffff81111561246d5761246c612048565b5b61247987828801612389565b9450945050602085013567ffffffffffffffff81111561249c5761249b612048565b5b6124a8878288016123df565b925092505092959194509250565b6000602082840312156124cc576124cb612043565b5b60006124da84828501612096565b91505092915050565b600080600080604085870312156124fd576124fc612043565b5b600085013567ffffffffffffffff81111561251b5761251a612048565b5b612527878288016120f0565b9450945050602085013567ffffffffffffffff81111561254a57612549612048565b5b612556878288016120f0565b925092505092959194509250565b6000806040838503121561257b5761257a612043565b5b600061258985828601612314565b925050602061259a85828601612096565b9150509250929050565b6125ad816122f3565b82525050565b60006020820190506125c860008301846125a4565b92915050565b600080fd5b600061016082840312156125ea576125e96125ce565b5b81905092915050565b60008060006060848603121561260c5761260b612043565b5b600084013567ffffffffffffffff81111561262a57612629612048565b5b612636868287016125d3565b935050602061264786828701612314565b9250506040612658868287016120cc565b9150509250925092565b61266b816120ab565b82525050565b60006020820190506126866000830184612662565b92915050565b60006126978261204d565b9050919050565b6126a78161268c565b81146126b257600080fd5b50565b6000813590506126c48161269e565b92915050565b600080604083850312156126e1576126e0612043565b5b60006126ef858286016126b5565b9250506020612700858286016120cc565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127588261270f565b810181811067ffffffffffffffff8211171561277757612776612720565b5b80604052505050565b600061278a612039565b9050612796828261274f565b919050565b600067ffffffffffffffff8211156127b6576127b5612720565b5b6127bf8261270f565b9050602081019050919050565b82818337600083830152505050565b60006127ee6127e98461279b565b612780565b90508281526020810184848401111561280a5761280961270a565b5b6128158482856127cc565b509392505050565b600082601f830112612832576128316120e1565b5b81356128428482602086016127db565b91505092915050565b6000806040838503121561286257612861612043565b5b600061287085828601612096565b925050602083013567ffffffffffffffff81111561289157612890612048565b5b61289d8582860161281d565b9150509250929050565b6128b08161206d565b82525050565b60006020820190506128cb60008301846128a7565b92915050565b6000819050919050565b60006128f66128f16128ec8461204d565b6128d1565b61204d565b9050919050565b6000612908826128db565b9050919050565b600061291a826128fd565b9050919050565b61292a8161290f565b82525050565b60006020820190506129456000830184612921565b92915050565b6000806000806060858703121561296557612964612043565b5b600061297387828801612096565b9450506020612984878288016120cc565b935050604085013567ffffffffffffffff8111156129a5576129a4612048565b5b6129b1878288016120f0565b925092505092959194509250565b60006129ca8261206d565b9050919050565b6129da816129bf565b81146129e557600080fd5b50565b6000813590506129f7816129d1565b92915050565b600080600060608486031215612a1657612a15612043565b5b6000612a24868287016129e8565b9350506020612a3586828701612096565b9250506040612a4686828701612096565b9150509250925092565b60008060008060008060a08789031215612a6d57612a6c612043565b5b6000612a7b89828a01612096565b9650506020612a8c89828a01612096565b9550506040612a9d89828a016120cc565b9450506060612aae89828a016120cc565b935050608087013567ffffffffffffffff811115612acf57612ace612048565b5b612adb89828a016120f0565b92509250509295509295509295565b6000606082019050612aff60008301866128a7565b612b0c60208301856128a7565b612b196040830184612662565b949350505050565b600082825260208201905092915050565b6000612b3e8385612b21565b9350612b4b8385846127cc565b612b548361270f565b840190509392505050565b6000606082019050612b7460008301876128a7565b612b8160208301866125a4565b8181036040830152612b94818486612b32565b905095945050505050565b60008115159050919050565b612bb481612b9f565b8114612bbf57600080fd5b50565b600081519050612bd181612bab565b92915050565b600060208284031215612bed57612bec612043565b5b6000612bfb84828501612bc2565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612c45601f83612c04565b9150612c5082612c0f565b601f82019050919050565b6000612c6682612c38565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612cdd603383612c70565b9150612ce882612c81565b604082019050919050565b60006020820190508181036000830152612d0c81612cd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612d6e57612d6d612d42565b5b80840192508235915067ffffffffffffffff821115612d9057612d8f612d47565b5b602083019250600182023603831315612dac57612dab612d4c565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dee826120ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e2157612e20612db4565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612e88603183612c70565b9150612e9382612e2c565b604082019050919050565b60006020820190508181036000830152612eb781612e7b565b9050919050565b6000604082019050612ed360008301856128a7565b612ee060208301846128a7565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612f43603383612c70565b9150612f4e82612ee7565b604082019050919050565b60006020820190508181036000830152612f7281612f36565b9050919050565b6000606082019050612f8e60008301886128a7565b8181036020830152612fa1818688612b32565b90508181036040830152612fb6818486612b32565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612ff8601d83612c04565b915061300382612fc2565b601d82019050919050565b600061301982612feb565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613059601583612c04565b915061306482613023565b601582019050919050565b600061307a8261304c565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006130ba601483612c04565b91506130c582613084565b601482019050919050565b60006130db826130ad565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613141602c83612c70565b915061314c826130e5565b604082019050919050565b6000602082019050818103600083015261317081613134565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006131d3602c83612c70565b91506131de82613177565b604082019050919050565b60006020820190508181036000830152613202816131c6565b9050919050565b6132128161268c565b82525050565b600060408201905061322d6000830185613209565b61323a6020830184612662565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061329d603883612c70565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b600061332f602b83612c70565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600081519050613374816120b5565b92915050565b6000602082840312156133905761338f612043565b5b600061339e84828501613365565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613403602983612c70565b915061340e826133a7565b604082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561346d578082015181840152602081019050613452565b8381111561347c576000848401525b50505050565b600061348d82613439565b6134978185613444565b93506134a781856020860161344f565b80840191505092915050565b60006134bf8284613482565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613500601c83612c70565b915061350b826134ca565b602082019050919050565b6000602082019050818103600083015261352f816134f3565b9050919050565b600081519050613545816122fd565b92915050565b60006020828403121561356157613560612043565b5b600061356f84828501613536565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006135d4602e83612c70565b91506135df82613578565b604082019050919050565b60006020820190508181036000830152613603816135c7565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613666602983612c70565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006136f8602483612c70565b91506137038261369c565b604082019050919050565b60006020820190508181036000830152613727816136eb565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006137518261372e565b91506bffffffffffffffffffffffff8214156137705761376f612db4565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006137b1601f83612c70565b91506137bc8261377b565b602082019050919050565b600060208201905081810360008301526137e0816137a4565b9050919050565b50565b60006137f7600083613444565b9150613802826137e7565b600082019050919050565b6000613818826137ea565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061387e602d83612c70565b915061388982613822565b604082019050919050565b600060208201905081810360008301526138ad81613871565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006138ea601c83612c04565b91506138f5826138b4565b601c82019050919050565b6000819050919050565b61391b613916826122f3565b613900565b82525050565b600061392c826138dd565b9150613938828461390a565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006139ac601883612c70565b91506139b782613976565b602082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613a18601f83612c70565b9150613a23826139e2565b602082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aaa602283612c70565b9150613ab582613a4e565b604082019050919050565b60006020820190508181036000830152613ad981613a9d565b9050919050565b600060ff82169050919050565b613af681613ae0565b82525050565b6000608082019050613b1160008301876125a4565b613b1e6020830186613aed565b613b2b60408301856125a4565b613b3860608301846125a4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b77601d83612c70565b9150613b8282613b41565b602082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b600081519050919050565b6000613bc382613bad565b613bcd8185612c70565b9350613bdd81856020860161344f565b613be68161270f565b840191505092915050565b60006020820190508181036000830152613c0b8184613bb8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220469336cf59c24e8ab82b3fb1667829bc13e63792b9461080646dcd6160d792b464736f6c634300080c0033"; + +type TestEtherspotWalletConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestEtherspotWalletConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestEtherspotWallet__factory extends ContractFactory { + constructor(...args: TestEtherspotWalletConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TestEtherspotWallet { + return super.attach(address) as TestEtherspotWallet; + } + override connect(signer: Signer): TestEtherspotWallet__factory { + return super.connect(signer) as TestEtherspotWallet__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestEtherspotWalletInterface { + return new utils.Interface(_abi) as TestEtherspotWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestEtherspotWallet { + return new Contract(address, _abi, signerOrProvider) as TestEtherspotWallet; + } +} diff --git a/src/contracts/factories/src/test/index.ts b/src/contracts/factories/src/test/index.ts new file mode 100644 index 00000000..3e95616c --- /dev/null +++ b/src/contracts/factories/src/test/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { TestEtherspotWallet__factory } from "./TestEtherspotWallet__factory"; diff --git a/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts b/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts new file mode 100644 index 00000000..04f86d0c --- /dev/null +++ b/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts @@ -0,0 +1,153 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + EtherspotWalletFactory, + EtherspotWalletFactoryInterface, +} from "../../../src/wallet/EtherspotWalletFactory"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract EtherspotWallet", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + { + internalType: "address", + name: "_registry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract EtherspotWallet", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + { + internalType: "address", + name: "_registry", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b5060405161001d90610072565b604051809103906000f080158015610039573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505061007f565b613e2b8061147183390190565b6080516113ca6100a76000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202f917c1c52a3384037df5caca942a270e7da463181c73e9b6c215b0dec0ab73c64736f6c634300080c003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613db061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613db06000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612230565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a91906122ff565b61059d565b6040516101ac91906123c2565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612413565b6105b2565b6040516101e991906123c2565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061251f565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906125a0565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906125a0565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906125cd565b6109d2565b6040516102a191906123c2565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc919061264e565b610ab8565b6040516102de919061269d565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906125a0565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906126dd565b610cd9565b604051610344919061275b565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906127b4565b610d98565b005b61039a60048036038101906103959190612935565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be919061269d565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906129a0565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906129a0565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906129a0565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a919061275b565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612a1a565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612a35565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190612ae7565b611138565b005b3480156104fc57600080fd5b50610505611281565b604051610512919061275b565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612b3a565b611309565b60405161054f91906123c2565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612bd4565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612c49565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612cc1565b6106665763ffffffff60e01b61068c565b60405160200161067590612d45565b604051602081830303815290604052805190602001205b90509392505050565b61069d61131f565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612ddd565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612dfd565b5b905060200201602081019061071e91906125a0565b600085858581811061073357610732612dfd565b5b90506020028101906107459190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b808061079890612ecd565b9150506106e8565b5050505050565b6107af611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612f88565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612fa8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90613043565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612fa8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190613063565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612cc1565b610a885763ffffffff60e01b610aae565b604051602001610a97906130f8565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca90613159565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906131ba565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906132d3565b60405180910390fd5b610c7d81611591565b610cd681600067ffffffffffffffff811115610c9c57610c9b61280a565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b50600061159c565b50565b6000610ce361170a565b610ced8484611781565b90506000848060400190610d019190612e3b565b90501415610d1357610d128461185f565b5b610d1c8261190d565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906129a0565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611472565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613302565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee661153a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906132d3565b60405180910390fd5b610f4582611591565b610f518282600161159c565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061339d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361131f565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b50505050565b60008060159054906101000a900460ff1615905080801561116b57506001600060149054906101000a900460ff1660ff16105b8061119a575061117a306119a9565b15801561119957506001600060149054906101000a900460ff1660ff16145b5b6111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d09061342f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611217576001600060156101000a81548160ff0219169083151502179055505b6112228484846119cc565b801561127b5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112729190613497565b60405180910390a15b50505050565b600061128b6110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112c391906129a0565b602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130491906134c7565b905090565b600063f23a6e6160e01b90509695505050505050565b6113276110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ad57506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613566565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114179190613600565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508161146b57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114f957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613663565b60405180910390fd5b565b60006115687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611599611472565b50565b6115c87f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b72565b60000160009054906101000a900460ff16156115ec576115e783611b7c565b611705565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561165457506040513d601f19601f820116820180604052508101906116519190613698565b60015b611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613737565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906137c9565b60405180910390fd5b50611704838383611c35565b5b505050565b6117126110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061385b565b60405180910390fd5b565b60008061178d83611c61565b90506117f5848061014001906117a39190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611c9190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576001915050611859565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff168092919061188e90613893565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613914565b60405180910390fd5b50565b600081146119a65760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161195d9061395a565b600060405180830381858888f193505050503d806000811461199b576040519150601f19603f3d011682016040523d82523d6000602084013e6119a0565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b85816119a9565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb906139e1565b60405180910390fd5b80611bf17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3e83611cb8565b600082511180611c4b5750805b15611c5c57611c5a8383611d07565b505b505050565b600081604051602001611c749190613a6e565b604051602081830303815290604052805190602001209050919050565b6000806000611ca08585611d34565b91509150611cad81611d86565b819250505092915050565b611cc181611b7c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d2c8383604051806060016040528060278152602001613d5460279139611ef4565b905092915050565b600080604183511415611d765760008060006020860151925060408601519150606086015160001a9050611d6a87828585611f7a565b94509450505050611d7f565b60006002915091505b9250929050565b60006004811115611d9a57611d99613a94565b5b816004811115611dad57611dac613a94565b5b1415611db857611ef1565b60016004811115611dcc57611dcb613a94565b5b816004811115611ddf57611dde613a94565b5b1415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613b0f565b60405180910390fd5b60026004811115611e3457611e33613a94565b5b816004811115611e4757611e46613a94565b5b1415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613b7b565b60405180910390fd5b60036004811115611e9c57611e9b613a94565b5b816004811115611eaf57611eae613a94565b5b1415611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613c0d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f1e9190613600565b600060405180830381855af49150503d8060008114611f59576040519150601f19603f3d011682016040523d82523d6000602084013e611f5e565b606091505b5091509150611f6f8683838761205d565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611fb5576000600391509150612054565b600060018787878760405160008152602001604052604051611fda9493929190613c3c565b6020604051602081039080840390855afa158015611ffc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204b57600060019250925050612054565b80600092509250505b94509492505050565b606083156120c0576000835114156120b857612078856119a9565b6120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613ccd565b60405180910390fd5b5b8290506120cb565b6120ca83836120d3565b5b949350505050565b6000825111156120e65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190613d31565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216282612137565b9050919050565b61217281612157565b811461217d57600080fd5b50565b60008135905061218f81612169565b92915050565b6000819050919050565b6121a881612195565b81146121b357600080fd5b50565b6000813590506121c58161219f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f0576121ef6121cb565b5b8235905067ffffffffffffffff81111561220d5761220c6121d0565b5b602083019150836001820283011115612229576122286121d5565b5b9250929050565b60008060008060008060008060c0898b0312156122505761224f61212d565b5b600061225e8b828c01612180565b985050602061226f8b828c01612180565b97505060406122808b828c01612180565b96505060606122918b828c016121b6565b955050608089013567ffffffffffffffff8111156122b2576122b1612132565b5b6122be8b828c016121da565b945094505060a089013567ffffffffffffffff8111156122e1576122e0612132565b5b6122ed8b828c016121da565b92509250509295985092959890939650565b60008060008060006080868803121561231b5761231a61212d565b5b600061232988828901612180565b955050602061233a88828901612180565b945050604061234b888289016121b6565b935050606086013567ffffffffffffffff81111561236c5761236b612132565b5b612378888289016121da565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123bc81612387565b82525050565b60006020820190506123d760008301846123b3565b92915050565b6000819050919050565b6123f0816123dd565b81146123fb57600080fd5b50565b60008135905061240d816123e7565b92915050565b60008060006040848603121561242c5761242b61212d565b5b600061243a868287016123fe565b935050602084013567ffffffffffffffff81111561245b5761245a612132565b5b612467868287016121da565b92509250509250925092565b60008083601f840112612489576124886121cb565b5b8235905067ffffffffffffffff8111156124a6576124a56121d0565b5b6020830191508360208202830111156124c2576124c16121d5565b5b9250929050565b60008083601f8401126124df576124de6121cb565b5b8235905067ffffffffffffffff8111156124fc576124fb6121d0565b5b602083019150836020820283011115612518576125176121d5565b5b9250929050565b600080600080604085870312156125395761253861212d565b5b600085013567ffffffffffffffff81111561255757612556612132565b5b61256387828801612473565b9450945050602085013567ffffffffffffffff81111561258657612585612132565b5b612592878288016124c9565b925092505092959194509250565b6000602082840312156125b6576125b561212d565b5b60006125c484828501612180565b91505092915050565b600080600080604085870312156125e7576125e661212d565b5b600085013567ffffffffffffffff81111561260557612604612132565b5b612611878288016121da565b9450945050602085013567ffffffffffffffff81111561263457612633612132565b5b612640878288016121da565b925092505092959194509250565b600080604083850312156126655761266461212d565b5b6000612673858286016123fe565b925050602061268485828601612180565b9150509250929050565b612697816123dd565b82525050565b60006020820190506126b2600083018461268e565b92915050565b600080fd5b600061016082840312156126d4576126d36126b8565b5b81905092915050565b6000806000606084860312156126f6576126f561212d565b5b600084013567ffffffffffffffff81111561271457612713612132565b5b612720868287016126bd565b9350506020612731868287016123fe565b9250506040612742868287016121b6565b9150509250925092565b61275581612195565b82525050565b6000602082019050612770600083018461274c565b92915050565b600061278182612137565b9050919050565b61279181612776565b811461279c57600080fd5b50565b6000813590506127ae81612788565b92915050565b600080604083850312156127cb576127ca61212d565b5b60006127d98582860161279f565b92505060206127ea858286016121b6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612842826127f9565b810181811067ffffffffffffffff821117156128615761286061280a565b5b80604052505050565b6000612874612123565b90506128808282612839565b919050565b600067ffffffffffffffff8211156128a05761289f61280a565b5b6128a9826127f9565b9050602081019050919050565b82818337600083830152505050565b60006128d86128d384612885565b61286a565b9050828152602081018484840111156128f4576128f36127f4565b5b6128ff8482856128b6565b509392505050565b600082601f83011261291c5761291b6121cb565b5b813561292c8482602086016128c5565b91505092915050565b6000806040838503121561294c5761294b61212d565b5b600061295a85828601612180565b925050602083013567ffffffffffffffff81111561297b5761297a612132565b5b61298785828601612907565b9150509250929050565b61299a81612157565b82525050565b60006020820190506129b56000830184612991565b92915050565b6000819050919050565b60006129e06129db6129d684612137565b6129bb565b612137565b9050919050565b60006129f2826129c5565b9050919050565b6000612a04826129e7565b9050919050565b612a14816129f9565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b60008060008060608587031215612a4f57612a4e61212d565b5b6000612a5d87828801612180565b9450506020612a6e878288016121b6565b935050604085013567ffffffffffffffff811115612a8f57612a8e612132565b5b612a9b878288016121da565b925092505092959194509250565b6000612ab482612157565b9050919050565b612ac481612aa9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b600080600060608486031215612b0057612aff61212d565b5b6000612b0e86828701612ad2565b9350506020612b1f86828701612180565b9250506040612b3086828701612180565b9150509250925092565b60008060008060008060a08789031215612b5757612b5661212d565b5b6000612b6589828a01612180565b9650506020612b7689828a01612180565b9550506040612b8789828a016121b6565b9450506060612b9889828a016121b6565b935050608087013567ffffffffffffffff811115612bb957612bb8612132565b5b612bc589828a016121da565b92509250509295509295509295565b6000606082019050612be96000830186612991565b612bf66020830185612991565b612c03604083018461274c565b949350505050565b600082825260208201905092915050565b6000612c288385612c0b565b9350612c358385846128b6565b612c3e836127f9565b840190509392505050565b6000606082019050612c5e6000830187612991565b612c6b602083018661268e565b8181036040830152612c7e818486612c1c565b905095945050505050565b60008115159050919050565b612c9e81612c89565b8114612ca957600080fd5b50565b600081519050612cbb81612c95565b92915050565b600060208284031215612cd757612cd661212d565b5b6000612ce584828501612cac565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612d2f601f83612cee565b9150612d3a82612cf9565b601f82019050919050565b6000612d5082612d22565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612dc7603383612d5a565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e5857612e57612e2c565b5b80840192508235915067ffffffffffffffff821115612e7a57612e79612e31565b5b602083019250600182023603831315612e9657612e95612e36565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ed882612195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f0b57612f0a612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612f72603183612d5a565b9150612f7d82612f16565b604082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000604082019050612fbd6000830185612991565b612fca6020830184612991565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061302d603383612d5a565b915061303882612fd1565b604082019050919050565b6000602082019050818103600083015261305c81613020565b9050919050565b60006060820190506130786000830188612991565b818103602083015261308b818688612c1c565b905081810360408301526130a0818486612c1c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006130e2601d83612cee565b91506130ed826130ac565b601d82019050919050565b6000613103826130d5565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613143601583612cee565b915061314e8261310d565b601582019050919050565b600061316482613136565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006131a4601483612cee565b91506131af8261316e565b601482019050919050565b60006131c582613197565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061322b602c83612d5a565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006132bd602c83612d5a565b91506132c882613261565b604082019050919050565b600060208201905081810360008301526132ec816132b0565b9050919050565b6132fc81612776565b82525050565b600060408201905061331760008301856132f3565b613324602083018461274c565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613387603883612d5a565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613419602e83612d5a565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b6000819050919050565b600060ff82169050919050565b600061348161347c6134778461344f565b6129bb565b613459565b9050919050565b61349181613466565b82525050565b60006020820190506134ac6000830184613488565b92915050565b6000815190506134c18161219f565b92915050565b6000602082840312156134dd576134dc61212d565b5b60006134eb848285016134b2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613550602983612d5a565b915061355b826134f4565b604082019050919050565b6000602082019050818103600083015261357f81613543565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b838111156135c9576000848401525b50505050565b60006135da82613586565b6135e48185613591565b93506135f481856020860161359c565b80840191505092915050565b600061360c82846135cf565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061364d601c83612d5a565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b600081519050613692816123e7565b92915050565b6000602082840312156136ae576136ad61212d565b5b60006136bc84828501613683565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613721602e83612d5a565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006137b3602983612d5a565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613845602483612d5a565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061389e8261387b565b91506bffffffffffffffffffffffff8214156138bd576138bc612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006138fe601f83612d5a565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b50565b6000613944600083613591565b915061394f82613934565b600082019050919050565b600061396582613937565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006139cb602d83612d5a565b91506139d68261396f565b604082019050919050565b600060208201905081810360008301526139fa816139be565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613a37601c83612cee565b9150613a4282613a01565b601c82019050919050565b6000819050919050565b613a68613a63826123dd565b613a4d565b82525050565b6000613a7982613a2a565b9150613a858284613a57565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613af9601883612d5a565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613b65601f83612d5a565b9150613b7082613b2f565b602082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf7602283612d5a565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b613c3681613459565b82525050565b6000608082019050613c51600083018761268e565b613c5e6020830186613c2d565b613c6b604083018561268e565b613c78606083018461268e565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613cb7601d83612d5a565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b9050919050565b600081519050919050565b6000613d0382613ced565b613d0d8185612d5a565b9350613d1d81856020860161359c565b613d26816127f9565b840191505092915050565b60006020820190508181036000830152613d4b8184613cf8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e7b3cca3e2571b62a7891f31e01656f6dc5f558347db439841ba2e83c7a052a64736f6c634300080c0033"; + +type EtherspotWalletFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EtherspotWalletFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EtherspotWalletFactory__factory extends ContractFactory { + constructor(...args: EtherspotWalletFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): EtherspotWalletFactory { + return super.attach(address) as EtherspotWalletFactory; + } + override connect(signer: Signer): EtherspotWalletFactory__factory { + return super.connect(signer) as EtherspotWalletFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EtherspotWalletFactoryInterface { + return new utils.Interface(_abi) as EtherspotWalletFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EtherspotWalletFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as EtherspotWalletFactory; + } +} diff --git a/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts b/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts new file mode 100644 index 00000000..fc830432 --- /dev/null +++ b/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts @@ -0,0 +1,719 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + EtherspotWallet, + EtherspotWalletInterface, +} from "../../../src/wallet/EtherspotWallet"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "ERC777Received", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "registry", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldRegistry", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newRegistry", + type: "address", + }, + ], + name: "RegistryChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "_registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "interfaceHash", + type: "bytes32", + }, + { + internalType: "address", + name: "addr", + type: "address", + }, + ], + name: "canImplementInterfaceForAddress", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anRegistry", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "_from", + type: "address", + }, + { + internalType: "address", + name: "_to", + type: "address", + }, + { + internalType: "uint256", + name: "_amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newRegistry", + type: "address", + }, + ], + name: "updateRegistry", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613db061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613db06000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612230565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a91906122ff565b61059d565b6040516101ac91906123c2565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612413565b6105b2565b6040516101e991906123c2565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061251f565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906125a0565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906125a0565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906125cd565b6109d2565b6040516102a191906123c2565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc919061264e565b610ab8565b6040516102de919061269d565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906125a0565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906126dd565b610cd9565b604051610344919061275b565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906127b4565b610d98565b005b61039a60048036038101906103959190612935565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be919061269d565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906129a0565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906129a0565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906129a0565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a919061275b565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612a1a565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612a35565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190612ae7565b611138565b005b3480156104fc57600080fd5b50610505611281565b604051610512919061275b565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612b3a565b611309565b60405161054f91906123c2565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612bd4565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612c49565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612cc1565b6106665763ffffffff60e01b61068c565b60405160200161067590612d45565b604051602081830303815290604052805190602001205b90509392505050565b61069d61131f565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612ddd565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612dfd565b5b905060200201602081019061071e91906125a0565b600085858581811061073357610732612dfd565b5b90506020028101906107459190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b808061079890612ecd565b9150506106e8565b5050505050565b6107af611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612f88565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612fa8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90613043565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612fa8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190613063565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612cc1565b610a885763ffffffff60e01b610aae565b604051602001610a97906130f8565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca90613159565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906131ba565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906132d3565b60405180910390fd5b610c7d81611591565b610cd681600067ffffffffffffffff811115610c9c57610c9b61280a565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b50600061159c565b50565b6000610ce361170a565b610ced8484611781565b90506000848060400190610d019190612e3b565b90501415610d1357610d128461185f565b5b610d1c8261190d565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906129a0565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611472565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613302565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee661153a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906132d3565b60405180910390fd5b610f4582611591565b610f518282600161159c565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061339d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361131f565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b50505050565b60008060159054906101000a900460ff1615905080801561116b57506001600060149054906101000a900460ff1660ff16105b8061119a575061117a306119a9565b15801561119957506001600060149054906101000a900460ff1660ff16145b5b6111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d09061342f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611217576001600060156101000a81548160ff0219169083151502179055505b6112228484846119cc565b801561127b5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112729190613497565b60405180910390a15b50505050565b600061128b6110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112c391906129a0565b602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130491906134c7565b905090565b600063f23a6e6160e01b90509695505050505050565b6113276110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ad57506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613566565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114179190613600565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508161146b57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114f957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613663565b60405180910390fd5b565b60006115687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611599611472565b50565b6115c87f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b72565b60000160009054906101000a900460ff16156115ec576115e783611b7c565b611705565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561165457506040513d601f19601f820116820180604052508101906116519190613698565b60015b611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613737565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906137c9565b60405180910390fd5b50611704838383611c35565b5b505050565b6117126110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061385b565b60405180910390fd5b565b60008061178d83611c61565b90506117f5848061014001906117a39190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611c9190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576001915050611859565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff168092919061188e90613893565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613914565b60405180910390fd5b50565b600081146119a65760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161195d9061395a565b600060405180830381858888f193505050503d806000811461199b576040519150601f19603f3d011682016040523d82523d6000602084013e6119a0565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b85816119a9565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb906139e1565b60405180910390fd5b80611bf17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3e83611cb8565b600082511180611c4b5750805b15611c5c57611c5a8383611d07565b505b505050565b600081604051602001611c749190613a6e565b604051602081830303815290604052805190602001209050919050565b6000806000611ca08585611d34565b91509150611cad81611d86565b819250505092915050565b611cc181611b7c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d2c8383604051806060016040528060278152602001613d5460279139611ef4565b905092915050565b600080604183511415611d765760008060006020860151925060408601519150606086015160001a9050611d6a87828585611f7a565b94509450505050611d7f565b60006002915091505b9250929050565b60006004811115611d9a57611d99613a94565b5b816004811115611dad57611dac613a94565b5b1415611db857611ef1565b60016004811115611dcc57611dcb613a94565b5b816004811115611ddf57611dde613a94565b5b1415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613b0f565b60405180910390fd5b60026004811115611e3457611e33613a94565b5b816004811115611e4757611e46613a94565b5b1415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613b7b565b60405180910390fd5b60036004811115611e9c57611e9b613a94565b5b816004811115611eaf57611eae613a94565b5b1415611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613c0d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f1e9190613600565b600060405180830381855af49150503d8060008114611f59576040519150601f19603f3d011682016040523d82523d6000602084013e611f5e565b606091505b5091509150611f6f8683838761205d565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611fb5576000600391509150612054565b600060018787878760405160008152602001604052604051611fda9493929190613c3c565b6020604051602081039080840390855afa158015611ffc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204b57600060019250925050612054565b80600092509250505b94509492505050565b606083156120c0576000835114156120b857612078856119a9565b6120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613ccd565b60405180910390fd5b5b8290506120cb565b6120ca83836120d3565b5b949350505050565b6000825111156120e65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190613d31565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216282612137565b9050919050565b61217281612157565b811461217d57600080fd5b50565b60008135905061218f81612169565b92915050565b6000819050919050565b6121a881612195565b81146121b357600080fd5b50565b6000813590506121c58161219f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f0576121ef6121cb565b5b8235905067ffffffffffffffff81111561220d5761220c6121d0565b5b602083019150836001820283011115612229576122286121d5565b5b9250929050565b60008060008060008060008060c0898b0312156122505761224f61212d565b5b600061225e8b828c01612180565b985050602061226f8b828c01612180565b97505060406122808b828c01612180565b96505060606122918b828c016121b6565b955050608089013567ffffffffffffffff8111156122b2576122b1612132565b5b6122be8b828c016121da565b945094505060a089013567ffffffffffffffff8111156122e1576122e0612132565b5b6122ed8b828c016121da565b92509250509295985092959890939650565b60008060008060006080868803121561231b5761231a61212d565b5b600061232988828901612180565b955050602061233a88828901612180565b945050604061234b888289016121b6565b935050606086013567ffffffffffffffff81111561236c5761236b612132565b5b612378888289016121da565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123bc81612387565b82525050565b60006020820190506123d760008301846123b3565b92915050565b6000819050919050565b6123f0816123dd565b81146123fb57600080fd5b50565b60008135905061240d816123e7565b92915050565b60008060006040848603121561242c5761242b61212d565b5b600061243a868287016123fe565b935050602084013567ffffffffffffffff81111561245b5761245a612132565b5b612467868287016121da565b92509250509250925092565b60008083601f840112612489576124886121cb565b5b8235905067ffffffffffffffff8111156124a6576124a56121d0565b5b6020830191508360208202830111156124c2576124c16121d5565b5b9250929050565b60008083601f8401126124df576124de6121cb565b5b8235905067ffffffffffffffff8111156124fc576124fb6121d0565b5b602083019150836020820283011115612518576125176121d5565b5b9250929050565b600080600080604085870312156125395761253861212d565b5b600085013567ffffffffffffffff81111561255757612556612132565b5b61256387828801612473565b9450945050602085013567ffffffffffffffff81111561258657612585612132565b5b612592878288016124c9565b925092505092959194509250565b6000602082840312156125b6576125b561212d565b5b60006125c484828501612180565b91505092915050565b600080600080604085870312156125e7576125e661212d565b5b600085013567ffffffffffffffff81111561260557612604612132565b5b612611878288016121da565b9450945050602085013567ffffffffffffffff81111561263457612633612132565b5b612640878288016121da565b925092505092959194509250565b600080604083850312156126655761266461212d565b5b6000612673858286016123fe565b925050602061268485828601612180565b9150509250929050565b612697816123dd565b82525050565b60006020820190506126b2600083018461268e565b92915050565b600080fd5b600061016082840312156126d4576126d36126b8565b5b81905092915050565b6000806000606084860312156126f6576126f561212d565b5b600084013567ffffffffffffffff81111561271457612713612132565b5b612720868287016126bd565b9350506020612731868287016123fe565b9250506040612742868287016121b6565b9150509250925092565b61275581612195565b82525050565b6000602082019050612770600083018461274c565b92915050565b600061278182612137565b9050919050565b61279181612776565b811461279c57600080fd5b50565b6000813590506127ae81612788565b92915050565b600080604083850312156127cb576127ca61212d565b5b60006127d98582860161279f565b92505060206127ea858286016121b6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612842826127f9565b810181811067ffffffffffffffff821117156128615761286061280a565b5b80604052505050565b6000612874612123565b90506128808282612839565b919050565b600067ffffffffffffffff8211156128a05761289f61280a565b5b6128a9826127f9565b9050602081019050919050565b82818337600083830152505050565b60006128d86128d384612885565b61286a565b9050828152602081018484840111156128f4576128f36127f4565b5b6128ff8482856128b6565b509392505050565b600082601f83011261291c5761291b6121cb565b5b813561292c8482602086016128c5565b91505092915050565b6000806040838503121561294c5761294b61212d565b5b600061295a85828601612180565b925050602083013567ffffffffffffffff81111561297b5761297a612132565b5b61298785828601612907565b9150509250929050565b61299a81612157565b82525050565b60006020820190506129b56000830184612991565b92915050565b6000819050919050565b60006129e06129db6129d684612137565b6129bb565b612137565b9050919050565b60006129f2826129c5565b9050919050565b6000612a04826129e7565b9050919050565b612a14816129f9565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b60008060008060608587031215612a4f57612a4e61212d565b5b6000612a5d87828801612180565b9450506020612a6e878288016121b6565b935050604085013567ffffffffffffffff811115612a8f57612a8e612132565b5b612a9b878288016121da565b925092505092959194509250565b6000612ab482612157565b9050919050565b612ac481612aa9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b600080600060608486031215612b0057612aff61212d565b5b6000612b0e86828701612ad2565b9350506020612b1f86828701612180565b9250506040612b3086828701612180565b9150509250925092565b60008060008060008060a08789031215612b5757612b5661212d565b5b6000612b6589828a01612180565b9650506020612b7689828a01612180565b9550506040612b8789828a016121b6565b9450506060612b9889828a016121b6565b935050608087013567ffffffffffffffff811115612bb957612bb8612132565b5b612bc589828a016121da565b92509250509295509295509295565b6000606082019050612be96000830186612991565b612bf66020830185612991565b612c03604083018461274c565b949350505050565b600082825260208201905092915050565b6000612c288385612c0b565b9350612c358385846128b6565b612c3e836127f9565b840190509392505050565b6000606082019050612c5e6000830187612991565b612c6b602083018661268e565b8181036040830152612c7e818486612c1c565b905095945050505050565b60008115159050919050565b612c9e81612c89565b8114612ca957600080fd5b50565b600081519050612cbb81612c95565b92915050565b600060208284031215612cd757612cd661212d565b5b6000612ce584828501612cac565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612d2f601f83612cee565b9150612d3a82612cf9565b601f82019050919050565b6000612d5082612d22565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612dc7603383612d5a565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e5857612e57612e2c565b5b80840192508235915067ffffffffffffffff821115612e7a57612e79612e31565b5b602083019250600182023603831315612e9657612e95612e36565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ed882612195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f0b57612f0a612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612f72603183612d5a565b9150612f7d82612f16565b604082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000604082019050612fbd6000830185612991565b612fca6020830184612991565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061302d603383612d5a565b915061303882612fd1565b604082019050919050565b6000602082019050818103600083015261305c81613020565b9050919050565b60006060820190506130786000830188612991565b818103602083015261308b818688612c1c565b905081810360408301526130a0818486612c1c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006130e2601d83612cee565b91506130ed826130ac565b601d82019050919050565b6000613103826130d5565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613143601583612cee565b915061314e8261310d565b601582019050919050565b600061316482613136565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006131a4601483612cee565b91506131af8261316e565b601482019050919050565b60006131c582613197565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061322b602c83612d5a565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006132bd602c83612d5a565b91506132c882613261565b604082019050919050565b600060208201905081810360008301526132ec816132b0565b9050919050565b6132fc81612776565b82525050565b600060408201905061331760008301856132f3565b613324602083018461274c565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613387603883612d5a565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613419602e83612d5a565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b6000819050919050565b600060ff82169050919050565b600061348161347c6134778461344f565b6129bb565b613459565b9050919050565b61349181613466565b82525050565b60006020820190506134ac6000830184613488565b92915050565b6000815190506134c18161219f565b92915050565b6000602082840312156134dd576134dc61212d565b5b60006134eb848285016134b2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613550602983612d5a565b915061355b826134f4565b604082019050919050565b6000602082019050818103600083015261357f81613543565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b838111156135c9576000848401525b50505050565b60006135da82613586565b6135e48185613591565b93506135f481856020860161359c565b80840191505092915050565b600061360c82846135cf565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061364d601c83612d5a565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b600081519050613692816123e7565b92915050565b6000602082840312156136ae576136ad61212d565b5b60006136bc84828501613683565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613721602e83612d5a565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006137b3602983612d5a565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613845602483612d5a565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061389e8261387b565b91506bffffffffffffffffffffffff8214156138bd576138bc612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006138fe601f83612d5a565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b50565b6000613944600083613591565b915061394f82613934565b600082019050919050565b600061396582613937565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006139cb602d83612d5a565b91506139d68261396f565b604082019050919050565b600060208201905081810360008301526139fa816139be565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613a37601c83612cee565b9150613a4282613a01565b601c82019050919050565b6000819050919050565b613a68613a63826123dd565b613a4d565b82525050565b6000613a7982613a2a565b9150613a858284613a57565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613af9601883612d5a565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613b65601f83612d5a565b9150613b7082613b2f565b602082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf7602283612d5a565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b613c3681613459565b82525050565b6000608082019050613c51600083018761268e565b613c5e6020830186613c2d565b613c6b604083018561268e565b613c78606083018461268e565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613cb7601d83612d5a565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b9050919050565b600081519050919050565b6000613d0382613ced565b613d0d8185612d5a565b9350613d1d81856020860161359c565b613d26816127f9565b840191505092915050565b60006020820190508181036000830152613d4b8184613cf8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e7b3cca3e2571b62a7891f31e01656f6dc5f558347db439841ba2e83c7a052a64736f6c634300080c0033"; + +type EtherspotWalletConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EtherspotWalletConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EtherspotWallet__factory extends ContractFactory { + constructor(...args: EtherspotWalletConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): EtherspotWallet { + return super.attach(address) as EtherspotWallet; + } + override connect(signer: Signer): EtherspotWallet__factory { + return super.connect(signer) as EtherspotWallet__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EtherspotWalletInterface { + return new utils.Interface(_abi) as EtherspotWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EtherspotWallet { + return new Contract(address, _abi, signerOrProvider) as EtherspotWallet; + } +} diff --git a/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts b/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts new file mode 100644 index 00000000..db587b25 --- /dev/null +++ b/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts @@ -0,0 +1,84 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + AccountRegistry, + AccountRegistryInterface, +} from "../../../../src/wallet/helpers/AccountRegistry"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + { + internalType: "bytes32", + name: "messageHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidAccountSignature", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class AccountRegistry__factory { + static readonly abi = _abi; + static createInterface(): AccountRegistryInterface { + return new utils.Interface(_abi) as AccountRegistryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): AccountRegistry { + return new Contract(address, _abi, signerOrProvider) as AccountRegistry; + } +} diff --git a/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts b/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts new file mode 100644 index 00000000..a48db031 --- /dev/null +++ b/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts @@ -0,0 +1,287 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from 'ethers'; +import type { Provider, TransactionRequest } from '@ethersproject/providers'; +import type { PromiseOrValue } from '../../../../common'; +import type { + WalletCompatability, + WalletCompatabilityInterface, +} from '../../../../src/wallet/helpers/WalletCompatability'; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'from', + type: 'address', + }, + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + ], + name: 'ERC777Received', + type: 'event', + }, + { + inputs: [], + name: '_registry', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'interfaceHash', + type: 'bytes32', + }, + { + internalType: 'address', + name: 'addr', + type: 'address', + }, + ], + name: 'canImplementInterfaceForAddress', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'messageHash', + type: 'bytes32', + }, + { + internalType: 'bytes', + name: 'signature', + type: 'bytes', + }, + ], + name: 'isValidSignature', + outputs: [ + { + internalType: 'bytes4', + name: '', + type: 'bytes4', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'message', + type: 'bytes', + }, + { + internalType: 'bytes', + name: 'signature', + type: 'bytes', + }, + ], + name: 'isValidSignature', + outputs: [ + { + internalType: 'bytes4', + name: '', + type: 'bytes4', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + name: 'onERC1155Received', + outputs: [ + { + internalType: 'bytes4', + name: '', + type: 'bytes4', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + name: 'onERC721Received', + outputs: [ + { + internalType: 'bytes4', + name: '', + type: 'bytes4', + }, + ], + stateMutability: 'pure', + type: 'function', + }, + { + inputs: [], + name: 'registry', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + { + internalType: 'address', + name: '_from', + type: 'address', + }, + { + internalType: 'address', + name: '_to', + type: 'address', + }, + { + internalType: 'uint256', + name: '_amount', + type: 'uint256', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + { + internalType: 'bytes', + name: '', + type: 'bytes', + }, + ], + name: 'tokensReceived', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const; + +const _bytecode = + '0x608060405234801561001057600080fd5b50610d3e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c8063249cb3fa1161005b578063249cb3fa1461013857806379cbc5fa146101685780637b10399914610186578063f23a6e61146101a457610087565b806223de291461008c578063150b7a02146100a85780631626ba7e146100d857806320c13b0b14610108575b600080fd5b6100a660048036038101906100a191906105f5565b6101d4565b005b6100c260048036038101906100bd91906106c4565b610219565b6040516100cf9190610787565b60405180910390f35b6100f260048036038101906100ed91906107d8565b61022e565b6040516100ff9190610787565b60405180910390f35b610122600480360381019061011d9190610838565b610311565b60405161012f9190610787565b60405180910390f35b610152600480360381019061014d91906108b9565b6103f7565b60405161015f9190610908565b60405180910390f35b61017061048f565b60405161017d9190610932565b60405180910390f35b61018e6104b3565b60405161019b9190610932565b60405180910390f35b6101be60048036038101906101b9919061094d565b6104dc565b6040516101cb9190610787565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d15650878787604051610207939291906109f6565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016102909493929190610a8b565b602060405180830381865afa1580156102ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d19190610b03565b6102e25763ffffffff60e01b610308565b6040516020016102f190610b87565b604051602081830303815290604052805190602001205b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610375959493929190610b9c565b602060405180830381865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610b03565b6103c75763ffffffff60e01b6103ed565b6040516020016103d690610c31565b604051602081830303815290604052805190602001205b9050949350505050565b60008060405160200161040990610c92565b604051602081830303815290604052805190602001208414801561045857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156104855760405160200161046c90610cf3565b6040516020818303038152906040528051906020012090505b8091505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600063f23a6e6160e01b90509695505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610527826104fc565b9050919050565b6105378161051c565b811461054257600080fd5b50565b6000813590506105548161052e565b92915050565b6000819050919050565b61056d8161055a565b811461057857600080fd5b50565b60008135905061058a81610564565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105b5576105b4610590565b5b8235905067ffffffffffffffff8111156105d2576105d1610595565b5b6020830191508360018202830111156105ee576105ed61059a565b5b9250929050565b60008060008060008060008060c0898b031215610615576106146104f2565b5b60006106238b828c01610545565b98505060206106348b828c01610545565b97505060406106458b828c01610545565b96505060606106568b828c0161057b565b955050608089013567ffffffffffffffff811115610677576106766104f7565b5b6106838b828c0161059f565b945094505060a089013567ffffffffffffffff8111156106a6576106a56104f7565b5b6106b28b828c0161059f565b92509250509295985092959890939650565b6000806000806000608086880312156106e0576106df6104f2565b5b60006106ee88828901610545565b95505060206106ff88828901610545565b94505060406107108882890161057b565b935050606086013567ffffffffffffffff811115610731576107306104f7565b5b61073d8882890161059f565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6107818161074c565b82525050565b600060208201905061079c6000830184610778565b92915050565b6000819050919050565b6107b5816107a2565b81146107c057600080fd5b50565b6000813590506107d2816107ac565b92915050565b6000806000604084860312156107f1576107f06104f2565b5b60006107ff868287016107c3565b935050602084013567ffffffffffffffff8111156108205761081f6104f7565b5b61082c8682870161059f565b92509250509250925092565b60008060008060408587031215610852576108516104f2565b5b600085013567ffffffffffffffff8111156108705761086f6104f7565b5b61087c8782880161059f565b9450945050602085013567ffffffffffffffff81111561089f5761089e6104f7565b5b6108ab8782880161059f565b925092505092959194509250565b600080604083850312156108d0576108cf6104f2565b5b60006108de858286016107c3565b92505060206108ef85828601610545565b9150509250929050565b610902816107a2565b82525050565b600060208201905061091d60008301846108f9565b92915050565b61092c8161051c565b82525050565b60006020820190506109476000830184610923565b92915050565b60008060008060008060a0878903121561096a576109696104f2565b5b600061097889828a01610545565b965050602061098989828a01610545565b955050604061099a89828a0161057b565b94505060606109ab89828a0161057b565b935050608087013567ffffffffffffffff8111156109cc576109cb6104f7565b5b6109d889828a0161059f565b92509250509295509295509295565b6109f08161055a565b82525050565b6000606082019050610a0b6000830186610923565b610a186020830185610923565b610a2560408301846109e7565b949350505050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000610a6a8385610a2d565b9350610a77838584610a3e565b610a8083610a4d565b840190509392505050565b6000606082019050610aa06000830187610923565b610aad60208301866108f9565b8181036040830152610ac0818486610a5e565b905095945050505050565b60008115159050919050565b610ae081610acb565b8114610aeb57600080fd5b50565b600081519050610afd81610ad7565b92915050565b600060208284031215610b1957610b186104f2565b5b6000610b2784828501610aee565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000610b71601f83610b30565b9150610b7c82610b3b565b601f82019050919050565b6000610b9282610b64565b9150819050919050565b6000606082019050610bb16000830188610923565b8181036020830152610bc4818688610a5e565b90508181036040830152610bd9818486610a5e565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000610c1b601d83610b30565b9150610c2682610be5565b601d82019050919050565b6000610c3c82610c0e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000610c7c601583610b30565b9150610c8782610c46565b601582019050919050565b6000610c9d82610c6f565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000610cdd601483610b30565b9150610ce882610ca7565b601482019050919050565b6000610cfe82610cd0565b915081905091905056fea2646970667358221220f7e20339dc90e32d86fa9f7a7f468d9da4a71760d505c93049696a3d99cbb55b64736f6c634300080c0033'; + +type WalletCompatabilityConstructorParams = [signer?: Signer] | ConstructorParameters; + +const isSuperArgs = (xs: WalletCompatabilityConstructorParams): xs is ConstructorParameters => + xs.length > 1; + +export class WalletCompatability__factory extends ContractFactory { + constructor(...args: WalletCompatabilityConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy(overrides?: Overrides & { from?: PromiseOrValue }): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction(overrides?: Overrides & { from?: PromiseOrValue }): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): WalletCompatability { + return super.attach(address) as WalletCompatability; + } + override connect(signer: Signer): WalletCompatability__factory { + return super.connect(signer) as WalletCompatability__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): WalletCompatabilityInterface { + return new utils.Interface(_abi) as WalletCompatabilityInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): WalletCompatability { + return new Contract(address, _abi, signerOrProvider) as WalletCompatability; + } +} diff --git a/src/contracts/factories/src/wallet/helpers/index.ts b/src/contracts/factories/src/wallet/helpers/index.ts new file mode 100644 index 00000000..b1f3b0b0 --- /dev/null +++ b/src/contracts/factories/src/wallet/helpers/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { AccountRegistry__factory } from "./AccountRegistry__factory"; +export { WalletCompatability__factory } from "./WalletCompatability__factory"; diff --git a/src/contracts/factories/src/wallet/index.ts b/src/contracts/factories/src/wallet/index.ts new file mode 100644 index 00000000..e8c8537f --- /dev/null +++ b/src/contracts/factories/src/wallet/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as helpers from "./helpers"; +export { EtherspotWallet__factory } from "./EtherspotWallet__factory"; +export { EtherspotWalletFactory__factory } from "./EtherspotWalletFactory__factory"; diff --git a/src/contracts/index.ts b/src/contracts/index.ts index 1780636a..9fdee7e4 100644 --- a/src/contracts/index.ts +++ b/src/contracts/index.ts @@ -1,44 +1,138 @@ +/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { BLSAccountFactory } from "./BLSAccountFactory"; -export type { BLSSignatureAggregator } from "./BLSSignatureAggregator"; -export type { IBLSAccount } from "./IBLSAccount"; -export type { BLSOpen } from "./BLSOpen"; -export type { BLSAccount } from "./BLSAccount"; -export type { BaseAccount } from "./BaseAccount"; -export type { BasePaymaster } from "./BasePaymaster"; -export type { DepositPaymaster } from "./DepositPaymaster"; -export type { EtherspotAccount } from "./EtherspotAccount"; -export type { IAccount } from "./IAccount"; -export type { IAggregatedAccount } from "./IAggregatedAccount"; -export type { IAggregator } from "./IAggregator"; -export type { ICreate2Deployer } from "./ICreate2Deployer"; -export type { IEntryPoint } from "./IEntryPoint"; -export type { IPaymaster } from "./IPaymaster"; -export type { IStakeManager } from "./IStakeManager"; -export type { EtherspotAccountFactory } from "./EtherspotAccountFactory"; -export type { VerifyingPaymaster } from "./VerifyingPaymaster"; -export type { SenderCreator } from './SenderCreator'; -export type { StakeManager } from './StakeManager'; -export { BLSAccountFactory__factory } from "./factories/BLSAccountFactory__factory"; -export { BLSSignatureAggregator__factory } from "./factories/BLSSignatureAggregator__factory"; -export { IBLSAccount__factory } from "./factories/IBLSAccount__factory"; -export { BLSOpen__factory } from "./factories/BLSOpen__factory"; -export { BLSAccount__factory } from "./factories/BLSAccount__factory"; -export { BaseAccount__factory } from "./factories/BaseAccount__factory"; -export { BasePaymaster__factory } from "./factories/BasePaymaster__factory"; -export { EntryPoint__factory } from "./factories/EntryPoint__factory"; -export { SenderCreator__factory } from "./factories/SenderCreator__factory"; -export { StakeManager__factory } from "./factories/StakeManager__factory"; -export { DepositPaymaster__factory } from "./factories/DepositPaymaster__factory"; -export { EtherspotAccount__factory } from "./factories/EtherspotAccount__factory"; -export { IAccount__factory } from "./factories/IAccount__factory"; -export { IAggregatedAccount__factory } from "./factories/IAggregatedAccount__factory"; -export { IAggregator__factory } from "./factories/IAggregator__factory"; -export { ICreate2Deployer__factory } from "./factories/ICreate2Deployer__factory"; -export { IEntryPoint__factory } from "./factories/IEntryPoint__factory"; -export { IPaymaster__factory } from "./factories/IPaymaster__factory"; -export { IStakeManager__factory } from "./factories/IStakeManager__factory"; -export { EtherspotAccountFactory__factory } from "./factories/EtherspotAccountFactory__factory"; -export * from "./EntryPoint"; +import type * as openzeppelin from './@openzeppelin'; +export type { openzeppelin }; +import type * as src from './src'; +export type { src }; +export * as factories from './factories'; +export type { Ownable } from './@openzeppelin/contracts/access/Ownable'; +export { Ownable__factory } from './factories/@openzeppelin/contracts/access/Ownable__factory'; +export type { IERC1822Proxiable } from './@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable'; +export { IERC1822Proxiable__factory } from './factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory'; +export type { IBeacon } from './@openzeppelin/contracts/proxy/beacon/IBeacon'; +export { IBeacon__factory } from './factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory'; +export type { ERC1967Proxy } from './@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy'; +export { ERC1967Proxy__factory } from './factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory'; +export type { ERC1967Upgrade } from './@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade'; +export { ERC1967Upgrade__factory } from './factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory'; +export type { Proxy } from './@openzeppelin/contracts/proxy/Proxy'; +export { Proxy__factory } from './factories/@openzeppelin/contracts/proxy/Proxy__factory'; +export type { Initializable } from './@openzeppelin/contracts/proxy/utils/Initializable'; +export { Initializable__factory } from './factories/@openzeppelin/contracts/proxy/utils/Initializable__factory'; +export type { UUPSUpgradeable } from './@openzeppelin/contracts/proxy/utils/UUPSUpgradeable'; +export { UUPSUpgradeable__factory } from './factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory'; +export type { ERC20 } from './@openzeppelin/contracts/token/ERC20/ERC20'; +export { ERC20__factory } from './factories/@openzeppelin/contracts/token/ERC20/ERC20__factory'; +export type { IERC20Permit } from './@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit'; +export { IERC20Permit__factory } from './factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory'; +export type { IERC20Metadata } from './@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata'; +export { IERC20Metadata__factory } from './factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory'; +export type { IERC20 } from './@openzeppelin/contracts/token/ERC20/IERC20'; +export { IERC20__factory } from './factories/@openzeppelin/contracts/token/ERC20/IERC20__factory'; +export type { BLSAccount } from './src/aa-4337/bls/BLSAccount'; +export { BLSAccount__factory } from './factories/src/aa-4337/bls/BLSAccount__factory'; +export type { BLSAccountFactory } from './src/aa-4337/bls/BLSAccountFactory'; +export { BLSAccountFactory__factory } from './factories/src/aa-4337/bls/BLSAccountFactory__factory'; +export type { BLSSignatureAggregator } from './src/aa-4337/bls/BLSSignatureAggregator'; +export { BLSSignatureAggregator__factory } from './factories/src/aa-4337/bls/BLSSignatureAggregator__factory'; +export type { IBLSAccount } from './src/aa-4337/bls/IBLSAccount'; +export { IBLSAccount__factory } from './factories/src/aa-4337/bls/IBLSAccount__factory'; +export type { BLSOpen } from './src/aa-4337/bls/lib/BLSOpen'; +export { BLSOpen__factory } from './factories/src/aa-4337/bls/lib/BLSOpen__factory'; +export type { BNPairingPrecompileCostEstimator } from './src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator'; +export { BNPairingPrecompileCostEstimator__factory } from './factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory'; +export type { BaseAccount } from './src/aa-4337/core/BaseAccount'; +export { BaseAccount__factory } from './factories/src/aa-4337/core/BaseAccount__factory'; +export type { BasePaymaster } from './src/aa-4337/core/BasePaymaster'; +export { BasePaymaster__factory } from './factories/src/aa-4337/core/BasePaymaster__factory'; +export type { EntryPoint } from './src/aa-4337/core/EntryPoint'; +export { EntryPoint__factory } from './factories/src/aa-4337/core/EntryPoint__factory'; +export type { SenderCreator } from './src/aa-4337/core/SenderCreator'; +export { SenderCreator__factory } from './factories/src/aa-4337/core/SenderCreator__factory'; +export type { StakeManager } from './src/aa-4337/core/StakeManager'; +export { StakeManager__factory } from './factories/src/aa-4337/core/StakeManager__factory'; +export type { IAccount } from './src/aa-4337/interfaces/IAccount'; +export { IAccount__factory } from './factories/src/aa-4337/interfaces/IAccount__factory'; +export type { IAggregatedAccount } from './src/aa-4337/interfaces/IAggregatedAccount'; +export { IAggregatedAccount__factory } from './factories/src/aa-4337/interfaces/IAggregatedAccount__factory'; +export type { IAggregator } from './src/aa-4337/interfaces/IAggregator'; +export { IAggregator__factory } from './factories/src/aa-4337/interfaces/IAggregator__factory'; +export type { ICreate2Deployer } from './src/aa-4337/interfaces/ICreate2Deployer'; +export { ICreate2Deployer__factory } from './factories/src/aa-4337/interfaces/ICreate2Deployer__factory'; +export type { IEntryPoint } from './src/aa-4337/interfaces/IEntryPoint'; +export { IEntryPoint__factory } from './factories/src/aa-4337/interfaces/IEntryPoint__factory'; +export type { IPaymaster } from './src/aa-4337/interfaces/IPaymaster'; +export { IPaymaster__factory } from './factories/src/aa-4337/interfaces/IPaymaster__factory'; +export type { IStakeManager } from './src/aa-4337/interfaces/IStakeManager'; +export { IStakeManager__factory } from './factories/src/aa-4337/interfaces/IStakeManager__factory'; +export type { DepositPaymaster } from './src/aa-4337/samples/DepositPaymaster'; +export { DepositPaymaster__factory } from './factories/src/aa-4337/samples/DepositPaymaster__factory'; +export type { IOracle } from './src/aa-4337/samples/IOracle'; +export { IOracle__factory } from './factories/src/aa-4337/samples/IOracle__factory'; +export type { TestAggregatedAccount } from './src/aa-4337/samples/TestAggregatedAccount'; +export { TestAggregatedAccount__factory } from './factories/src/aa-4337/samples/TestAggregatedAccount__factory'; +export type { TestAggregatedAccountFactory } from './src/aa-4337/samples/TestAggregatedAccountFactory'; +export { TestAggregatedAccountFactory__factory } from './factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory'; +export type { TokenPaymaster } from './src/aa-4337/samples/TokenPaymaster'; +export { TokenPaymaster__factory } from './factories/src/aa-4337/samples/TokenPaymaster__factory'; +export type { VerifyingPaymaster } from './src/aa-4337/samples/VerifyingPaymaster'; +export { VerifyingPaymaster__factory } from './factories/src/aa-4337/samples/VerifyingPaymaster__factory'; +export type { BrokenBLSAccount } from './src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount'; +export { BrokenBLSAccount__factory } from './factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory'; +export type { BrokenBLSAccountFactory } from './src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory'; +export { BrokenBLSAccountFactory__factory } from './factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory'; +export type { MaliciousAccount } from './src/aa-4337/test/MaliciousAccount'; +export { MaliciousAccount__factory } from './factories/src/aa-4337/test/MaliciousAccount__factory'; +export type { TestCounter } from './src/aa-4337/test/TestCounter'; +export { TestCounter__factory } from './factories/src/aa-4337/test/TestCounter__factory'; +export type { TestExpirePaymaster } from './src/aa-4337/test/TestExpirePaymaster'; +export { TestExpirePaymaster__factory } from './factories/src/aa-4337/test/TestExpirePaymaster__factory'; +export type { TestExpiryAccount } from './src/aa-4337/test/TestExpiryAccount'; +export { TestExpiryAccount__factory } from './factories/src/aa-4337/test/TestExpiryAccount__factory'; +export type { TestHelpers } from './src/aa-4337/test/TestHelpers'; +export { TestHelpers__factory } from './factories/src/aa-4337/test/TestHelpers__factory'; +export type { TestOracle } from './src/aa-4337/test/TestOracle'; +export { TestOracle__factory } from './factories/src/aa-4337/test/TestOracle__factory'; +export type { TestPaymasterAcceptAll } from './src/aa-4337/test/TestPaymasterAcceptAll'; +export { TestPaymasterAcceptAll__factory } from './factories/src/aa-4337/test/TestPaymasterAcceptAll__factory'; +export type { TestRevertAccount } from './src/aa-4337/test/TestRevertAccount'; +export { TestRevertAccount__factory } from './factories/src/aa-4337/test/TestRevertAccount__factory'; +export type { TestSignatureAggregator } from './src/aa-4337/test/TestSignatureAggregator'; +export { TestSignatureAggregator__factory } from './factories/src/aa-4337/test/TestSignatureAggregator__factory'; +export type { TestToken } from './src/aa-4337/test/TestToken'; +export { TestToken__factory } from './factories/src/aa-4337/test/TestToken__factory'; +export type { TestUtil } from './src/aa-4337/test/TestUtil'; +export { TestUtil__factory } from './factories/src/aa-4337/test/TestUtil__factory'; +export type { TestWarmColdAccount } from './src/aa-4337/test/TestWarmColdAccount'; +export { TestWarmColdAccount__factory } from './factories/src/aa-4337/test/TestWarmColdAccount__factory'; +export type { Account } from './src/backward_compatibility_helpers/Account'; +export { Account__factory } from './factories/src/backward_compatibility_helpers/Account__factory'; +export type { AccountController } from './src/backward_compatibility_helpers/AccountController'; +export { AccountController__factory } from './factories/src/backward_compatibility_helpers/AccountController__factory'; +export type { AccountRegistryMock } from './src/backward_compatibility_helpers/AccountRegistryMock'; +export { AccountRegistryMock__factory } from './factories/src/backward_compatibility_helpers/AccountRegistryMock__factory'; +export type { GatewayRecipient } from './src/backward_compatibility_helpers/GatewayRecipient'; +export { GatewayRecipient__factory } from './factories/src/backward_compatibility_helpers/GatewayRecipient__factory'; +export type { PersonalAccountRegistry } from './src/backward_compatibility_helpers/PersonalAccountRegistry'; +export { PersonalAccountRegistry__factory } from './factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory'; +export type { IWhitelist } from './src/interfaces/IWhitelist'; +export { IWhitelist__factory } from './factories/src/interfaces/IWhitelist__factory'; +export type { ValidationConstants } from './src/libs/ValidationConstants'; +export { ValidationConstants__factory } from './factories/src/libs/ValidationConstants__factory'; +export type { EtherspotPaymaster } from './src/paymaster/EtherspotPaymaster'; +export { EtherspotPaymaster__factory } from './factories/src/paymaster/EtherspotPaymaster__factory'; +export type { Whitelist } from './src/paymaster/Whitelist'; +export { Whitelist__factory } from './factories/src/paymaster/Whitelist__factory'; +export type { TestEtherspotWallet } from './src/test/TestEtherspotWallet'; +export { TestEtherspotWallet__factory } from './factories/src/test/TestEtherspotWallet__factory'; +export type { EtherspotWallet } from './src/wallet/EtherspotWallet'; +export { EtherspotWallet__factory } from './factories/src/wallet/EtherspotWallet__factory'; +export type { EtherspotWalletFactory } from './src/wallet/EtherspotWalletFactory'; +export { EtherspotWalletFactory__factory } from './factories/src/wallet/EtherspotWalletFactory__factory'; +export type { AccountRegistry } from './src/wallet/helpers/AccountRegistry'; +export { AccountRegistry__factory } from './factories/src/wallet/helpers/AccountRegistry__factory'; +export type { WalletCompatability } from './src/wallet/helpers/WalletCompatability'; +export { WalletCompatability__factory } from './factories/src/wallet/helpers/WalletCompatability__factory'; +export * from './src/aa-4337/core/EntryPoint'; export * from './common'; diff --git a/src/contracts/src/aa-4337/bls/BLSAccount.ts b/src/contracts/src/aa-4337/bls/BLSAccount.ts new file mode 100644 index 00000000..26ae988e --- /dev/null +++ b/src/contracts/src/aa-4337/bls/BLSAccount.ts @@ -0,0 +1,1305 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface BLSAccountInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "aggregator()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getBlsPublicKey()": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,uint256[4])": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "setBlsPublicKey(uint256[4])": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "aggregator" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getBlsPublicKey" + | "getDeposit" + | "initialize(address,address,uint256[4])" + | "initialize(address,address,address)" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "setBlsPublicKey" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "aggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getBlsPublicKey", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize(address,address,uint256[4])", + values: [ + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "initialize(address,address,address)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "setBlsPublicKey", + values: [ + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getBlsPublicKey", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "initialize(address,address,uint256[4])", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "initialize(address,address,address)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setBlsPublicKey", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface PublicKeyChangedEventObject { + oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; + newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; +} +export type PublicKeyChangedEvent = TypedEvent< + [ + [BigNumber, BigNumber, BigNumber, BigNumber], + [BigNumber, BigNumber, BigNumber, BigNumber] + ], + PublicKeyChangedEventObject +>; + +export type PublicKeyChangedEventFilter = + TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface BLSAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BLSAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + setBlsPublicKey( + newPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setBlsPublicKey( + newPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setBlsPublicKey( + newPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "PublicKeyChanged(uint256[4],uint256[4])"( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + PublicKeyChanged( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setBlsPublicKey( + newPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setBlsPublicKey( + newPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts b/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts new file mode 100644 index 00000000..08dc5643 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts @@ -0,0 +1,263 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface BLSAccountFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,address,uint256,uint256[4])": FunctionFragment; + "getAddress(address,address,uint256,uint256[4])": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface BLSAccountFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BLSAccountFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + getAddress( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + entryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/BLSSignatureAggregator.ts b/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts similarity index 80% rename from src/contracts/BLSSignatureAggregator.ts rename to src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts index e9f3f668..10ee38a0 100644 --- a/src/contracts/BLSSignatureAggregator.ts +++ b/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -71,6 +77,20 @@ export interface BLSSignatureAggregatorInterface extends utils.Interface { "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "BLS_DOMAIN" + | "N" + | "addStake" + | "aggregateSignatures" + | "getTrailingPublicKey" + | "getUserOpHash" + | "getUserOpPublicKey" + | "userOpToMessage" + | "validateSignatures" + | "validateUserOpSignature" + ): FunctionFragment; + encodeFunctionData( functionFragment: "BLS_DOMAIN", values?: undefined @@ -78,7 +98,7 @@ export interface BLSSignatureAggregatorInterface extends utils.Interface { encodeFunctionData(functionFragment: "N", values?: undefined): string; encodeFunctionData( functionFragment: "addStake", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "aggregateSignatures", @@ -86,7 +106,7 @@ export interface BLSSignatureAggregatorInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "getTrailingPublicKey", - values: [BytesLike] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getUserOpHash", @@ -102,7 +122,7 @@ export interface BLSSignatureAggregatorInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "validateSignatures", - values: [UserOperationStruct[], BytesLike] + values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "validateUserOpSignature", @@ -176,18 +196,18 @@ export interface BLSSignatureAggregator extends BaseContract { N(overrides?: CallOverrides): Promise<[BigNumber]>; addStake( - entryPoint: string, - delay: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; aggregateSignatures( userOps: UserOperationStruct[], overrides?: CallOverrides - ): Promise<[string] & { aggregatesSignature: string }>; + ): Promise<[string] & { aggregatedSignature: string }>; getTrailingPublicKey( - data: BytesLike, + data: PromiseOrValue, overrides?: CallOverrides ): Promise< [[BigNumber, BigNumber, BigNumber, BigNumber]] & { @@ -216,7 +236,7 @@ export interface BLSSignatureAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise<[void]>; @@ -231,9 +251,9 @@ export interface BLSSignatureAggregator extends BaseContract { N(overrides?: CallOverrides): Promise; addStake( - entryPoint: string, - delay: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; aggregateSignatures( @@ -242,7 +262,7 @@ export interface BLSSignatureAggregator extends BaseContract { ): Promise; getTrailingPublicKey( - data: BytesLike, + data: PromiseOrValue, overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; @@ -263,7 +283,7 @@ export interface BLSSignatureAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -278,8 +298,8 @@ export interface BLSSignatureAggregator extends BaseContract { N(overrides?: CallOverrides): Promise; addStake( - entryPoint: string, - delay: BigNumberish, + entryPoint: PromiseOrValue, + delay: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -289,7 +309,7 @@ export interface BLSSignatureAggregator extends BaseContract { ): Promise; getTrailingPublicKey( - data: BytesLike, + data: PromiseOrValue, overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; @@ -310,7 +330,7 @@ export interface BLSSignatureAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -328,9 +348,9 @@ export interface BLSSignatureAggregator extends BaseContract { N(overrides?: CallOverrides): Promise; addStake( - entryPoint: string, - delay: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; aggregateSignatures( @@ -339,7 +359,7 @@ export interface BLSSignatureAggregator extends BaseContract { ): Promise; getTrailingPublicKey( - data: BytesLike, + data: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -360,7 +380,7 @@ export interface BLSSignatureAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -376,9 +396,9 @@ export interface BLSSignatureAggregator extends BaseContract { N(overrides?: CallOverrides): Promise; addStake( - entryPoint: string, - delay: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; aggregateSignatures( @@ -387,7 +407,7 @@ export interface BLSSignatureAggregator extends BaseContract { ): Promise; getTrailingPublicKey( - data: BytesLike, + data: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -408,7 +428,7 @@ export interface BLSSignatureAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; diff --git a/src/contracts/IBLSAccount.ts b/src/contracts/src/aa-4337/bls/IBLSAccount.ts similarity index 54% rename from src/contracts/IBLSAccount.ts rename to src/contracts/src/aa-4337/bls/IBLSAccount.ts index af640f1d..b9cf2d73 100644 --- a/src/contracts/IBLSAccount.ts +++ b/src/contracts/src/aa-4337/bls/IBLSAccount.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -59,28 +69,27 @@ export type UserOperationStructOutput = [ export interface IBLSAccountInterface extends utils.Interface { functions: { - "getAggregator()": FunctionFragment; "getBlsPublicKey()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; }; - encodeFunctionData( - functionFragment: "getAggregator", - values?: undefined - ): string; + getFunction( + nameOrSignatureOrTopic: "getBlsPublicKey" | "validateUserOp" + ): FunctionFragment; + encodeFunctionData( functionFragment: "getBlsPublicKey", values?: undefined ): string; encodeFunctionData( functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; - decodeFunctionResult( - functionFragment: "getAggregator", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "getBlsPublicKey", data: BytesLike @@ -90,9 +99,28 @@ export interface IBLSAccountInterface extends utils.Interface { data: BytesLike ): Result; - events: {}; + events: { + "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; } +export interface PublicKeyChangedEventObject { + oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; + newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; +} +export type PublicKeyChangedEvent = TypedEvent< + [ + [BigNumber, BigNumber, BigNumber, BigNumber], + [BigNumber, BigNumber, BigNumber, BigNumber] + ], + PublicKeyChangedEventObject +>; + +export type PublicKeyChangedEventFilter = + TypedEventFilter; + export interface IBLSAccount extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -120,78 +148,72 @@ export interface IBLSAccount extends BaseContract { removeListener: OnEvent; functions: { - getAggregator(overrides?: CallOverrides): Promise<[string]>; - getBlsPublicKey( overrides?: CallOverrides ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; - getAggregator(overrides?: CallOverrides): Promise; - getBlsPublicKey( overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { - getAggregator(overrides?: CallOverrides): Promise; - getBlsPublicKey( overrides?: CallOverrides ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, overrides?: CallOverrides ): Promise; }; - filters: {}; + filters: { + "PublicKeyChanged(uint256[4],uint256[4])"( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + PublicKeyChanged( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + }; estimateGas: { - getAggregator(overrides?: CallOverrides): Promise; - getBlsPublicKey(overrides?: CallOverrides): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { - getAggregator(overrides?: CallOverrides): Promise; - getBlsPublicKey(overrides?: CallOverrides): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/src/aa-4337/bls/index.ts b/src/contracts/src/aa-4337/bls/index.ts new file mode 100644 index 00000000..9e2d0982 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/index.ts @@ -0,0 +1,9 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as lib from "./lib"; +export type { lib }; +export type { BLSAccount } from "./BLSAccount"; +export type { BLSAccountFactory } from "./BLSAccountFactory"; +export type { BLSSignatureAggregator } from "./BLSSignatureAggregator"; +export type { IBLSAccount } from "./IBLSAccount"; diff --git a/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts b/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts new file mode 100644 index 00000000..46842c6c --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts @@ -0,0 +1,337 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface BLSOpenInterface extends utils.Interface { + functions: { + "hashToPoint(bytes32,bytes)": FunctionFragment; + "isZeroBLSKey(uint256[4])": FunctionFragment; + "verifyMultiple(uint256[2],uint256[4][],uint256[2][])": FunctionFragment; + "verifySingle(uint256[2],uint256[4],uint256[2])": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "hashToPoint" + | "isZeroBLSKey" + | "verifyMultiple" + | "verifySingle" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "hashToPoint", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isZeroBLSKey", + values: [ + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "verifyMultiple", + values: [ + [PromiseOrValue, PromiseOrValue], + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + [PromiseOrValue, PromiseOrValue][] + ] + ): string; + encodeFunctionData( + functionFragment: "verifySingle", + values: [ + [PromiseOrValue, PromiseOrValue], + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + [PromiseOrValue, PromiseOrValue] + ] + ): string; + + decodeFunctionResult( + functionFragment: "hashToPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isZeroBLSKey", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifyMultiple", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifySingle", + data: BytesLike + ): Result; + + events: {}; +} + +export interface BLSOpen extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BLSOpenInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + hashToPoint( + domain: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[[BigNumber, BigNumber]]>; + + isZeroBLSKey( + blsKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise<[boolean]>; + + verifyMultiple( + signature: [PromiseOrValue, PromiseOrValue], + pubkeys: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + messages: [PromiseOrValue, PromiseOrValue][], + overrides?: CallOverrides + ): Promise<[boolean]>; + + verifySingle( + signature: [PromiseOrValue, PromiseOrValue], + pubkey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + message: [PromiseOrValue, PromiseOrValue], + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + hashToPoint( + domain: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber]>; + + isZeroBLSKey( + blsKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + verifyMultiple( + signature: [PromiseOrValue, PromiseOrValue], + pubkeys: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + messages: [PromiseOrValue, PromiseOrValue][], + overrides?: CallOverrides + ): Promise; + + verifySingle( + signature: [PromiseOrValue, PromiseOrValue], + pubkey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + message: [PromiseOrValue, PromiseOrValue], + overrides?: CallOverrides + ): Promise; + + callStatic: { + hashToPoint( + domain: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber]>; + + isZeroBLSKey( + blsKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + verifyMultiple( + signature: [PromiseOrValue, PromiseOrValue], + pubkeys: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + messages: [PromiseOrValue, PromiseOrValue][], + overrides?: CallOverrides + ): Promise; + + verifySingle( + signature: [PromiseOrValue, PromiseOrValue], + pubkey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + message: [PromiseOrValue, PromiseOrValue], + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + hashToPoint( + domain: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isZeroBLSKey( + blsKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + verifyMultiple( + signature: [PromiseOrValue, PromiseOrValue], + pubkeys: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + messages: [PromiseOrValue, PromiseOrValue][], + overrides?: CallOverrides + ): Promise; + + verifySingle( + signature: [PromiseOrValue, PromiseOrValue], + pubkey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + message: [PromiseOrValue, PromiseOrValue], + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + hashToPoint( + domain: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isZeroBLSKey( + blsKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + verifyMultiple( + signature: [PromiseOrValue, PromiseOrValue], + pubkeys: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ][], + messages: [PromiseOrValue, PromiseOrValue][], + overrides?: CallOverrides + ): Promise; + + verifySingle( + signature: [PromiseOrValue, PromiseOrValue], + pubkey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + message: [PromiseOrValue, PromiseOrValue], + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts new file mode 100644 index 00000000..4cc3c7e0 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as libs from "./libs"; +export type { libs }; diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts new file mode 100644 index 00000000..9d1b568a --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts @@ -0,0 +1,159 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface BNPairingPrecompileCostEstimatorInterface + extends utils.Interface { + functions: { + "baseCost()": FunctionFragment; + "getGasCost(uint256)": FunctionFragment; + "perPairCost()": FunctionFragment; + "run()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "baseCost" | "getGasCost" | "perPairCost" | "run" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "baseCost", values?: undefined): string; + encodeFunctionData( + functionFragment: "getGasCost", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "perPairCost", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "run", values?: undefined): string; + + decodeFunctionResult(functionFragment: "baseCost", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getGasCost", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "perPairCost", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "run", data: BytesLike): Result; + + events: {}; +} + +export interface BNPairingPrecompileCostEstimator extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BNPairingPrecompileCostEstimatorInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + baseCost(overrides?: CallOverrides): Promise<[BigNumber]>; + + getGasCost( + pairCount: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + perPairCost(overrides?: CallOverrides): Promise<[BigNumber]>; + + run( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + baseCost(overrides?: CallOverrides): Promise; + + getGasCost( + pairCount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + perPairCost(overrides?: CallOverrides): Promise; + + run( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + baseCost(overrides?: CallOverrides): Promise; + + getGasCost( + pairCount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + perPairCost(overrides?: CallOverrides): Promise; + + run(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + baseCost(overrides?: CallOverrides): Promise; + + getGasCost( + pairCount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + perPairCost(overrides?: CallOverrides): Promise; + + run( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + baseCost(overrides?: CallOverrides): Promise; + + getGasCost( + pairCount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + perPairCost(overrides?: CallOverrides): Promise; + + run( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts new file mode 100644 index 00000000..e692de65 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { BNPairingPrecompileCostEstimator } from "./BNPairingPrecompileCostEstimator"; diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts new file mode 100644 index 00000000..a11e4ca2 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as contracts from "./contracts"; +export type { contracts }; diff --git a/src/contracts/src/aa-4337/bls/lib/index.ts b/src/contracts/src/aa-4337/bls/lib/index.ts new file mode 100644 index 00000000..eba01938 --- /dev/null +++ b/src/contracts/src/aa-4337/bls/lib/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as hubbleContracts from "./hubble-contracts"; +export type { hubbleContracts }; +export type { BLSOpen } from "./BLSOpen"; diff --git a/src/contracts/BaseAccount.ts b/src/contracts/src/aa-4337/core/BaseAccount.ts similarity index 66% rename from src/contracts/BaseAccount.ts rename to src/contracts/src/aa-4337/core/BaseAccount.ts index 60027053..6c584d54 100644 --- a/src/contracts/BaseAccount.ts +++ b/src/contracts/src/aa-4337/core/BaseAccount.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -61,9 +67,13 @@ export interface BaseAccountInterface extends utils.Interface { functions: { "entryPoint()": FunctionFragment; "nonce()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: "entryPoint" | "nonce" | "validateUserOp" + ): FunctionFragment; + encodeFunctionData( functionFragment: "entryPoint", values?: undefined @@ -71,7 +81,11 @@ export interface BaseAccountInterface extends utils.Interface { encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; @@ -117,10 +131,9 @@ export interface BaseAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -130,10 +143,9 @@ export interface BaseAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { @@ -143,9 +155,8 @@ export interface BaseAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -159,10 +170,9 @@ export interface BaseAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -173,10 +183,9 @@ export interface BaseAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/BasePaymaster.ts b/src/contracts/src/aa-4337/core/BasePaymaster.ts similarity index 56% rename from src/contracts/BasePaymaster.ts rename to src/contracts/src/aa-4337/core/BasePaymaster.ts index 87234d55..51c2568d 100644 --- a/src/contracts/BasePaymaster.ts +++ b/src/contracts/src/aa-4337/core/BasePaymaster.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,22 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -67,7 +77,6 @@ export interface BasePaymasterInterface extends utils.Interface { "owner()": FunctionFragment; "postOp(uint8,bytes,uint256)": FunctionFragment; "renounceOwnership()": FunctionFragment; - "setEntryPoint(address)": FunctionFragment; "transferOwnership(address)": FunctionFragment; "unlockStake()": FunctionFragment; "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; @@ -75,9 +84,25 @@ export interface BasePaymasterInterface extends utils.Interface { "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "deposit" + | "entryPoint" + | "getDeposit" + | "owner" + | "postOp" + | "renounceOwnership" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] ): string; encodeFunctionData(functionFragment: "deposit", values?: undefined): string; encodeFunctionData( @@ -91,19 +116,19 @@ export interface BasePaymasterInterface extends utils.Interface { encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( functionFragment: "postOp", - values: [BigNumberish, BytesLike, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined ): string; - encodeFunctionData( - functionFragment: "setEntryPoint", - values: [string] - ): string; encodeFunctionData( functionFragment: "transferOwnership", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "unlockStake", @@ -111,15 +136,19 @@ export interface BasePaymasterInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "validatePaymasterUserOp", - values: [UserOperationStruct, BytesLike, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; @@ -132,10 +161,6 @@ export interface BasePaymasterInterface extends utils.Interface { functionFragment: "renounceOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "setEntryPoint", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -161,9 +186,13 @@ export interface BasePaymasterInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} export type OwnershipTransferredEvent = TypedEvent< [string, string], - { previousOwner: string; newOwner: string } + OwnershipTransferredEventObject >; export type OwnershipTransferredEventFilter = @@ -197,12 +226,12 @@ export interface BasePaymaster extends BaseContract { functions: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -212,56 +241,51 @@ export interface BasePaymaster extends BaseContract { owner(overrides?: CallOverrides): Promise<[string]>; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -271,51 +295,46 @@ export interface BasePaymaster extends BaseContract { owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addStake( - unstakeDelaySec: BigNumberish, + unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -328,21 +347,16 @@ export interface BasePaymaster extends BaseContract { owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, overrides?: CallOverrides ): Promise; renounceOwnership(overrides?: CallOverrides): Promise; - setEntryPoint( - _entryPoint: string, - overrides?: CallOverrides - ): Promise; - transferOwnership( - newOwner: string, + newOwner: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -350,42 +364,44 @@ export interface BasePaymaster extends BaseContract { validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string, BigNumber] & { context: string; deadline: BigNumber }>; + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; }; estimateGas: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -395,57 +411,52 @@ export interface BasePaymaster extends BaseContract { owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -455,46 +466,41 @@ export interface BasePaymaster extends BaseContract { owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/EntryPoint.ts b/src/contracts/src/aa-4337/core/EntryPoint.ts similarity index 51% rename from src/contracts/EntryPoint.ts rename to src/contracts/src/aa-4337/core/EntryPoint.ts index 9b3a3471..8a2e5112 100644 --- a/src/contracts/EntryPoint.ts +++ b/src/contracts/src/aa-4337/core/EntryPoint.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,44 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export type DepositInfoStruct = { - deposit: BigNumberish; - staked: boolean; - stake: BigNumberish; - unstakeDelaySec: BigNumberish; - withdrawTime: BigNumberish; -}; - -export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - BigNumber -] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: BigNumber; -}; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -80,79 +68,107 @@ export type UserOperationStructOutput = [ signature: string; }; -export type UserOpsPerAggregatorStruct = { - userOps: UserOperationStruct[]; - aggregator: string; - signature: BytesLike; -}; +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; -export type UserOpsPerAggregatorStructOutput = [ - UserOperationStructOutput[], - string, - string -] & { - userOps: UserOperationStructOutput[]; - aggregator: string; - signature: string; -}; + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} -export type MemoryUserOpStruct = { - sender: string; - nonce: BigNumberish; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - paymaster: string; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; -}; +export declare namespace IEntryPoint { + export type UserOpsPerAggregatorStruct = { + userOps: UserOperationStruct[]; + aggregator: PromiseOrValue; + signature: PromiseOrValue; + }; -export type MemoryUserOpStructOutput = [ - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - BigNumber, - BigNumber -] & { - sender: string; - nonce: BigNumber; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - paymaster: string; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; -}; + export type UserOpsPerAggregatorStructOutput = [ + UserOperationStructOutput[], + string, + string + ] & { + userOps: UserOperationStructOutput[]; + aggregator: string; + signature: string; + }; +} -export type UserOpInfoStruct = { - mUserOp: MemoryUserOpStruct; - userOpHash: BytesLike; - prefund: BigNumberish; - contextOffset: BigNumberish; - preOpGas: BigNumberish; -}; +export declare namespace EntryPoint { + export type MemoryUserOpStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + paymaster: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + }; -export type UserOpInfoStructOutput = [ - MemoryUserOpStructOutput, - string, - BigNumber, - BigNumber, - BigNumber -] & { - mUserOp: MemoryUserOpStructOutput; - userOpHash: string; - prefund: BigNumber; - contextOffset: BigNumber; - preOpGas: BigNumber; -}; + export type MemoryUserOpStructOutput = [ + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + BigNumber, + BigNumber + ] & { + sender: string; + nonce: BigNumber; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + paymaster: string; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + }; + + export type UserOpInfoStruct = { + mUserOp: EntryPoint.MemoryUserOpStruct; + userOpHash: PromiseOrValue; + prefund: PromiseOrValue; + contextOffset: PromiseOrValue; + preOpGas: PromiseOrValue; + }; + + export type UserOpInfoStructOutput = [ + EntryPoint.MemoryUserOpStructOutput, + string, + BigNumber, + BigNumber, + BigNumber + ] & { + mUserOp: EntryPoint.MemoryUserOpStructOutput; + userOpHash: string; + prefund: BigNumber; + contextOffset: BigNumber; + preOpGas: BigNumber; + }; +} export interface EntryPointInterface extends utils.Interface { functions: { "SIG_VALIDATION_FAILED()": FunctionFragment; - "_simulateFindAggregator(address,address)": FunctionFragment; + "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; "addStake(uint32)": FunctionFragment; "balanceOf(address)": FunctionFragment; "depositTo(address)": FunctionFragment; @@ -163,35 +179,69 @@ export interface EntryPointInterface extends utils.Interface { "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; "unlockStake()": FunctionFragment; "withdrawStake(address)": FunctionFragment; "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "SIG_VALIDATION_FAILED" + | "_validateSenderAndPaymaster" + | "addStake" + | "balanceOf" + | "depositTo" + | "deposits" + | "getDepositInfo" + | "getSenderAddress" + | "getUserOpHash" + | "handleAggregatedOps" + | "handleOps" + | "innerHandleOp" + | "simulateHandleOp" + | "simulateValidation" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "SIG_VALIDATION_FAILED", values?: undefined ): string; encodeFunctionData( - functionFragment: "_simulateFindAggregator", - values: [string, string] + functionFragment: "_validateSenderAndPaymaster", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deposits", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "depositTo", values: [string]): string; - encodeFunctionData(functionFragment: "deposits", values: [string]): string; encodeFunctionData( functionFragment: "getDepositInfo", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getSenderAddress", - values: [BytesLike] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getUserOpHash", @@ -199,19 +249,27 @@ export interface EntryPointInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "handleAggregatedOps", - values: [UserOpsPerAggregatorStruct[], string] + values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "handleOps", - values: [UserOperationStruct[], string] + values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "innerHandleOp", - values: [BytesLike, UserOpInfoStruct, BytesLike] + values: [ + PromiseOrValue, + EntryPoint.UserOpInfoStruct, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "simulateHandleOp", - values: [UserOperationStruct] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "simulateValidation", @@ -223,11 +281,11 @@ export interface EntryPointInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult( @@ -235,7 +293,7 @@ export interface EntryPointInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "_simulateFindAggregator", + functionFragment: "_validateSenderAndPaymaster", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; @@ -304,76 +362,115 @@ export interface EntryPointInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; } +export interface AccountDeployedEventObject { + userOpHash: string; + sender: string; + factory: string; + paymaster: string; +} export type AccountDeployedEvent = TypedEvent< [string, string, string, string], - { userOpHash: string; sender: string; factory: string; paymaster: string } + AccountDeployedEventObject >; export type AccountDeployedEventFilter = TypedEventFilter; +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} export type DepositedEvent = TypedEvent< [string, BigNumber], - { account: string; totalDeposit: BigNumber } + DepositedEventObject >; export type DepositedEventFilter = TypedEventFilter; +export interface SignatureAggregatorChangedEventObject { + aggregator: string; +} export type SignatureAggregatorChangedEvent = TypedEvent< [string], - { aggregator: string } + SignatureAggregatorChangedEventObject >; export type SignatureAggregatorChangedEventFilter = TypedEventFilter; +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} export type StakeLockedEvent = TypedEvent< [string, BigNumber, BigNumber], - { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } + StakeLockedEventObject >; export type StakeLockedEventFilter = TypedEventFilter; +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} export type StakeUnlockedEvent = TypedEvent< [string, BigNumber], - { account: string; withdrawTime: BigNumber } + StakeUnlockedEventObject >; export type StakeUnlockedEventFilter = TypedEventFilter; +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type StakeWithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + StakeWithdrawnEventObject >; export type StakeWithdrawnEventFilter = TypedEventFilter; +export interface UserOperationEventEventObject { + userOpHash: string; + sender: string; + paymaster: string; + nonce: BigNumber; + success: boolean; + actualGasCost: BigNumber; + actualGasUsed: BigNumber; +} export type UserOperationEventEvent = TypedEvent< [string, string, string, BigNumber, boolean, BigNumber, BigNumber], - { - userOpHash: string; - sender: string; - paymaster: string; - nonce: BigNumber; - success: boolean; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; - } + UserOperationEventEventObject >; export type UserOperationEventEventFilter = TypedEventFilter; +export interface UserOperationRevertReasonEventObject { + userOpHash: string; + sender: string; + nonce: BigNumber; + revertReason: string; +} export type UserOperationRevertReasonEvent = TypedEvent< [string, string, BigNumber, string], - { userOpHash: string; sender: string; nonce: BigNumber; revertReason: string } + UserOperationRevertReasonEventObject >; export type UserOperationRevertReasonEventFilter = TypedEventFilter; +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type WithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + WithdrawnEventObject >; export type WithdrawnEventFilter = TypedEventFilter; @@ -407,45 +504,53 @@ export interface EntryPoint extends BaseContract { functions: { SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise<[BigNumber]>; - _simulateFindAggregator( - sender: string, - paymaster: string, + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, overrides?: CallOverrides ): Promise<[void]>; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise<[DepositInfoStructOutput] & { info: DepositInfoStructOutput }>; + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -454,91 +559,97 @@ export interface EntryPoint extends BaseContract { ): Promise<[string]>; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; innerHandleOp( - callData: BytesLike, - opInfo: UserOpInfoStruct, - context: BytesLike, - overrides?: Overrides & { from?: string | Promise } + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - _simulateFindAggregator( - sender: string, - paymaster: string, + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, overrides?: CallOverrides ): Promise; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -547,87 +658,96 @@ export interface EntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; innerHandleOp( - callData: BytesLike, - opInfo: UserOpInfoStruct, - context: BytesLike, - overrides?: Overrides & { from?: string | Promise } + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - _simulateFindAggregator( - sender: string, - paymaster: string, + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, overrides?: CallOverrides ): Promise; addStake( - _unstakeDelaySec: BigNumberish, + unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - depositTo(account: string, overrides?: CallOverrides): Promise; + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; getSenderAddress( - initCode: BytesLike, + initCode: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -637,26 +757,28 @@ export interface EntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, overrides?: CallOverrides ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, + beneficiary: PromiseOrValue, overrides?: CallOverrides ): Promise; innerHandleOp( - callData: BytesLike, - opInfo: UserOpInfoStruct, - context: BytesLike, + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, overrides?: CallOverrides ): Promise; simulateHandleOp( op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -668,91 +790,91 @@ export interface EntryPoint extends BaseContract { unlockStake(overrides?: CallOverrides): Promise; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "AccountDeployed(bytes32,address,address,address)"( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, factory?: null, paymaster?: null ): AccountDeployedEventFilter; AccountDeployed( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, factory?: null, paymaster?: null ): AccountDeployedEventFilter; "Deposited(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; Deposited( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; "SignatureAggregatorChanged(address)"( - aggregator?: null + aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; SignatureAggregatorChanged( - aggregator?: null + aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; "StakeLocked(address,uint256,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; StakeLocked( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; "StakeUnlocked(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; StakeUnlocked( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; "StakeWithdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; StakeWithdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( - userOpHash?: BytesLike | null, - sender?: string | null, - paymaster?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, nonce?: null, success?: null, actualGasCost?: null, actualGasUsed?: null ): UserOperationEventEventFilter; UserOperationEvent( - userOpHash?: BytesLike | null, - sender?: string | null, - paymaster?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, nonce?: null, success?: null, actualGasCost?: null, @@ -760,25 +882,25 @@ export interface EntryPoint extends BaseContract { ): UserOperationEventEventFilter; "UserOperationRevertReason(bytes32,address,uint256,bytes)"( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, nonce?: null, revertReason?: null ): UserOperationRevertReasonEventFilter; UserOperationRevertReason( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, nonce?: null, revertReason?: null ): UserOperationRevertReasonEventFilter; "Withdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; Withdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; @@ -787,34 +909,41 @@ export interface EntryPoint extends BaseContract { estimateGas: { SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - _simulateFindAggregator( - sender: string, - paymaster: string, + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, overrides?: CallOverrides ): Promise; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - deposits(arg0: string, overrides?: CallOverrides): Promise; + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -823,47 +952,49 @@ export interface EntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; innerHandleOp( - callData: BytesLike, - opInfo: UserOpInfoStruct, - context: BytesLike, - overrides?: Overrides & { from?: string | Promise } + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -872,40 +1003,41 @@ export interface EntryPoint extends BaseContract { overrides?: CallOverrides ): Promise; - _simulateFindAggregator( - sender: string, - paymaster: string, + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, overrides?: CallOverrides ): Promise; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; balanceOf( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -914,47 +1046,49 @@ export interface EntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; innerHandleOp( - callData: BytesLike, - opInfo: UserOpInfoStruct, - context: BytesLike, - overrides?: Overrides & { from?: string | Promise } + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/SenderCreator.ts b/src/contracts/src/aa-4337/core/SenderCreator.ts similarity index 68% rename from src/contracts/SenderCreator.ts rename to src/contracts/src/aa-4337/core/SenderCreator.ts index 6f69820f..3669c957 100644 --- a/src/contracts/SenderCreator.ts +++ b/src/contracts/src/aa-4337/core/SenderCreator.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BytesLike, @@ -12,18 +12,26 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export interface SenderCreatorInterface extends utils.Interface { functions: { "createSender(bytes)": FunctionFragment; }; + getFunction(nameOrSignatureOrTopic: "createSender"): FunctionFragment; + encodeFunctionData( functionFragment: "createSender", - values: [BytesLike] + values: [PromiseOrValue] ): string; decodeFunctionResult( @@ -62,19 +70,19 @@ export interface SenderCreator extends BaseContract { functions: { createSender( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; createSender( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { createSender( - initCode: BytesLike, + initCode: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -83,15 +91,15 @@ export interface SenderCreator extends BaseContract { estimateGas: { createSender( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { createSender( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/StakeManager.ts b/src/contracts/src/aa-4337/core/StakeManager.ts similarity index 52% rename from src/contracts/StakeManager.ts rename to src/contracts/src/aa-4337/core/StakeManager.ts index b9c4417c..e7e879c9 100644 --- a/src/contracts/StakeManager.ts +++ b/src/contracts/src/aa-4337/core/StakeManager.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,31 +14,43 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export type DepositInfoStruct = { - deposit: BigNumberish; - staked: boolean; - stake: BigNumberish; - unstakeDelaySec: BigNumberish; - withdrawTime: BigNumberish; -}; - -export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - BigNumber -] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: BigNumber; -}; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} export interface StakeManagerInterface extends utils.Interface { functions: { @@ -52,16 +64,37 @@ export interface StakeManagerInterface extends utils.Interface { "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "balanceOf" + | "depositTo" + | "deposits" + | "getDepositInfo" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deposits", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "depositTo", values: [string]): string; - encodeFunctionData(functionFragment: "deposits", values: [string]): string; encodeFunctionData( functionFragment: "getDepositInfo", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "unlockStake", @@ -69,11 +102,11 @@ export interface StakeManagerInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; @@ -109,37 +142,60 @@ export interface StakeManagerInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; } +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} export type DepositedEvent = TypedEvent< [string, BigNumber], - { account: string; totalDeposit: BigNumber } + DepositedEventObject >; export type DepositedEventFilter = TypedEventFilter; +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} export type StakeLockedEvent = TypedEvent< [string, BigNumber, BigNumber], - { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } + StakeLockedEventObject >; export type StakeLockedEventFilter = TypedEventFilter; +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} export type StakeUnlockedEvent = TypedEvent< [string, BigNumber], - { account: string; withdrawTime: BigNumber } + StakeUnlockedEventObject >; export type StakeUnlockedEventFilter = TypedEventFilter; +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type StakeWithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + StakeWithdrawnEventObject >; export type StakeWithdrawnEventFilter = TypedEventFilter; +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type WithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + WithdrawnEventObject >; export type WithdrawnEventFilter = TypedEventFilter; @@ -172,186 +228,202 @@ export interface StakeManager extends BaseContract { functions: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise<[DepositInfoStructOutput] & { info: DepositInfoStructOutput }>; + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addStake( - _unstakeDelaySec: BigNumberish, + unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - depositTo(account: string, overrides?: CallOverrides): Promise; + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [BigNumber, boolean, BigNumber, number, BigNumber] & { + [BigNumber, boolean, BigNumber, number, number] & { deposit: BigNumber; staked: boolean; stake: BigNumber; unstakeDelaySec: number; - withdrawTime: BigNumber; + withdrawTime: number; } >; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; unlockStake(overrides?: CallOverrides): Promise; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "Deposited(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; Deposited( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; "StakeLocked(address,uint256,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; StakeLocked( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; "StakeUnlocked(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; StakeUnlocked( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; "StakeWithdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; StakeWithdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; "Withdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; Withdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; @@ -359,79 +431,85 @@ export interface StakeManager extends BaseContract { estimateGas: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - deposits(arg0: string, overrides?: CallOverrides): Promise; + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; balanceOf( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposits( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/src/aa-4337/core/index.ts b/src/contracts/src/aa-4337/core/index.ts new file mode 100644 index 00000000..a6caa026 --- /dev/null +++ b/src/contracts/src/aa-4337/core/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { BaseAccount } from "./BaseAccount"; +export type { BasePaymaster } from "./BasePaymaster"; +export type { EntryPoint } from "./EntryPoint"; +export type { SenderCreator } from "./SenderCreator"; +export type { StakeManager } from "./StakeManager"; diff --git a/src/contracts/src/aa-4337/index.ts b/src/contracts/src/aa-4337/index.ts new file mode 100644 index 00000000..7e3900a4 --- /dev/null +++ b/src/contracts/src/aa-4337/index.ts @@ -0,0 +1,13 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as bls from "./bls"; +export type { bls }; +import type * as core from "./core"; +export type { core }; +import type * as interfaces from "./interfaces"; +export type { interfaces }; +import type * as samples from "./samples"; +export type { samples }; +import type * as test from "./test"; +export type { test }; diff --git a/src/contracts/IAccount.ts b/src/contracts/src/aa-4337/interfaces/IAccount.ts similarity index 58% rename from src/contracts/IAccount.ts rename to src/contracts/src/aa-4337/interfaces/IAccount.ts index 385ca1d9..936e8d0c 100644 --- a/src/contracts/IAccount.ts +++ b/src/contracts/src/aa-4337/interfaces/IAccount.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -59,12 +65,18 @@ export type UserOperationStructOutput = [ export interface IAccountInterface extends utils.Interface { functions: { - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; }; + getFunction(nameOrSignatureOrTopic: "validateUserOp"): FunctionFragment; + encodeFunctionData( functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult( @@ -104,27 +116,24 @@ export interface IAccount extends BaseContract { functions: { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -134,20 +143,18 @@ export interface IAccount extends BaseContract { estimateGas: { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/IAggregatedAccount.ts b/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts similarity index 63% rename from src/contracts/IAggregatedAccount.ts rename to src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts index 0ea9722a..12397f09 100644 --- a/src/contracts/IAggregatedAccount.ts +++ b/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -60,16 +66,24 @@ export type UserOperationStructOutput = [ export interface IAggregatedAccountInterface extends utils.Interface { functions: { "getAggregator()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: "getAggregator" | "validateUserOp" + ): FunctionFragment; + encodeFunctionData( functionFragment: "getAggregator", values?: undefined ): string; encodeFunctionData( functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult( @@ -115,10 +129,9 @@ export interface IAggregatedAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -126,10 +139,9 @@ export interface IAggregatedAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { @@ -137,9 +149,8 @@ export interface IAggregatedAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -151,10 +162,9 @@ export interface IAggregatedAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -163,10 +173,9 @@ export interface IAggregatedAccount extends BaseContract { validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/IAggregator.ts b/src/contracts/src/aa-4337/interfaces/IAggregator.ts similarity index 78% rename from src/contracts/IAggregator.ts rename to src/contracts/src/aa-4337/interfaces/IAggregator.ts index 30e3e836..b617dc70 100644 --- a/src/contracts/IAggregator.ts +++ b/src/contracts/src/aa-4337/interfaces/IAggregator.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -11,22 +11,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -62,13 +68,20 @@ export interface IAggregatorInterface extends utils.Interface { "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "aggregateSignatures" + | "validateSignatures" + | "validateUserOpSignature" + ): FunctionFragment; + encodeFunctionData( functionFragment: "aggregateSignatures", values: [UserOperationStruct[]] ): string; encodeFunctionData( functionFragment: "validateSignatures", - values: [UserOperationStruct[], BytesLike] + values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "validateUserOpSignature", @@ -121,11 +134,11 @@ export interface IAggregator extends BaseContract { aggregateSignatures( userOps: UserOperationStruct[], overrides?: CallOverrides - ): Promise<[string] & { aggregatesSignature: string }>; + ): Promise<[string] & { aggregatedSignature: string }>; validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise<[void]>; @@ -142,7 +155,7 @@ export interface IAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -159,7 +172,7 @@ export interface IAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -179,7 +192,7 @@ export interface IAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -197,7 +210,7 @@ export interface IAggregator extends BaseContract { validateSignatures( userOps: UserOperationStruct[], - signature: BytesLike, + signature: PromiseOrValue, overrides?: CallOverrides ): Promise; diff --git a/src/contracts/ICreate2Deployer.ts b/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts similarity index 62% rename from src/contracts/ICreate2Deployer.ts rename to src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts index 700e3e27..d80bf9c5 100644 --- a/src/contracts/ICreate2Deployer.ts +++ b/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BytesLike, @@ -12,18 +12,26 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export interface ICreate2DeployerInterface extends utils.Interface { functions: { "deploy(bytes,bytes32)": FunctionFragment; }; + getFunction(nameOrSignatureOrTopic: "deploy"): FunctionFragment; + encodeFunctionData( functionFragment: "deploy", - values: [BytesLike, BytesLike] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result; @@ -59,22 +67,22 @@ export interface ICreate2Deployer extends BaseContract { functions: { deploy( - initCode: BytesLike, - salt: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; deploy( - initCode: BytesLike, - salt: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { deploy( - initCode: BytesLike, - salt: BytesLike, + initCode: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -83,17 +91,17 @@ export interface ICreate2Deployer extends BaseContract { estimateGas: { deploy( - initCode: BytesLike, - salt: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { deploy( - initCode: BytesLike, - salt: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/IEntryPoint.ts b/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts similarity index 54% rename from src/contracts/IEntryPoint.ts rename to src/contracts/src/aa-4337/interfaces/IEntryPoint.ts index 4da08fc4..21924319 100644 --- a/src/contracts/IEntryPoint.ts +++ b/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,44 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export type DepositInfoStruct = { - deposit: BigNumberish; - staked: boolean; - stake: BigNumberish; - unstakeDelaySec: BigNumberish; - withdrawTime: BigNumberish; -}; - -export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - BigNumber -] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: BigNumber; -}; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -80,21 +68,47 @@ export type UserOperationStructOutput = [ signature: string; }; -export type UserOpsPerAggregatorStruct = { - userOps: UserOperationStruct[]; - aggregator: string; - signature: BytesLike; -}; +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; -export type UserOpsPerAggregatorStructOutput = [ - UserOperationStructOutput[], - string, - string -] & { - userOps: UserOperationStructOutput[]; - aggregator: string; - signature: string; -}; + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} + +export declare namespace IEntryPoint { + export type UserOpsPerAggregatorStruct = { + userOps: UserOperationStruct[]; + aggregator: PromiseOrValue; + signature: PromiseOrValue; + }; + + export type UserOpsPerAggregatorStructOutput = [ + UserOperationStructOutput[], + string, + string + ] & { + userOps: UserOperationStructOutput[]; + aggregator: string; + signature: string; + }; +} export interface IEntryPointInterface extends utils.Interface { functions: { @@ -106,26 +120,49 @@ export interface IEntryPointInterface extends utils.Interface { "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; "unlockStake()": FunctionFragment; "withdrawStake(address)": FunctionFragment; "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "balanceOf" + | "depositTo" + | "getDepositInfo" + | "getSenderAddress" + | "getUserOpHash" + | "handleAggregatedOps" + | "handleOps" + | "simulateHandleOp" + | "simulateValidation" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "depositTo", values: [string]): string; encodeFunctionData( functionFragment: "getDepositInfo", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getSenderAddress", - values: [BytesLike] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getUserOpHash", @@ -133,15 +170,19 @@ export interface IEntryPointInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "handleAggregatedOps", - values: [UserOpsPerAggregatorStruct[], string] + values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "handleOps", - values: [UserOperationStruct[], string] + values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( functionFragment: "simulateHandleOp", - values: [UserOperationStruct] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "simulateValidation", @@ -153,11 +194,11 @@ export interface IEntryPointInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; @@ -221,76 +262,115 @@ export interface IEntryPointInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; } +export interface AccountDeployedEventObject { + userOpHash: string; + sender: string; + factory: string; + paymaster: string; +} export type AccountDeployedEvent = TypedEvent< [string, string, string, string], - { userOpHash: string; sender: string; factory: string; paymaster: string } + AccountDeployedEventObject >; export type AccountDeployedEventFilter = TypedEventFilter; +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} export type DepositedEvent = TypedEvent< [string, BigNumber], - { account: string; totalDeposit: BigNumber } + DepositedEventObject >; export type DepositedEventFilter = TypedEventFilter; +export interface SignatureAggregatorChangedEventObject { + aggregator: string; +} export type SignatureAggregatorChangedEvent = TypedEvent< [string], - { aggregator: string } + SignatureAggregatorChangedEventObject >; export type SignatureAggregatorChangedEventFilter = TypedEventFilter; +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} export type StakeLockedEvent = TypedEvent< [string, BigNumber, BigNumber], - { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } + StakeLockedEventObject >; export type StakeLockedEventFilter = TypedEventFilter; +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} export type StakeUnlockedEvent = TypedEvent< [string, BigNumber], - { account: string; withdrawTime: BigNumber } + StakeUnlockedEventObject >; export type StakeUnlockedEventFilter = TypedEventFilter; +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type StakeWithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + StakeWithdrawnEventObject >; export type StakeWithdrawnEventFilter = TypedEventFilter; +export interface UserOperationEventEventObject { + userOpHash: string; + sender: string; + paymaster: string; + nonce: BigNumber; + success: boolean; + actualGasCost: BigNumber; + actualGasUsed: BigNumber; +} export type UserOperationEventEvent = TypedEvent< [string, string, string, BigNumber, boolean, BigNumber, BigNumber], - { - userOpHash: string; - sender: string; - paymaster: string; - nonce: BigNumber; - success: boolean; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; - } + UserOperationEventEventObject >; export type UserOperationEventEventFilter = TypedEventFilter; +export interface UserOperationRevertReasonEventObject { + userOpHash: string; + sender: string; + nonce: BigNumber; + revertReason: string; +} export type UserOperationRevertReasonEvent = TypedEvent< [string, string, BigNumber, string], - { userOpHash: string; sender: string; nonce: BigNumber; revertReason: string } + UserOperationRevertReasonEventObject >; export type UserOperationRevertReasonEventFilter = TypedEventFilter; +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type WithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + WithdrawnEventObject >; export type WithdrawnEventFilter = TypedEventFilter; @@ -323,25 +403,32 @@ export interface IEntryPoint extends BaseContract { functions: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise<[DepositInfoStructOutput] & { info: DepositInfoStructOutput }>; + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -350,63 +437,68 @@ export interface IEntryPoint extends BaseContract { ): Promise<[string]>; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -415,59 +507,67 @@ export interface IEntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addStake( - _unstakeDelaySec: BigNumberish, + _unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - depositTo(account: string, overrides?: CallOverrides): Promise; + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; getSenderAddress( - initCode: BytesLike, + initCode: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -477,19 +577,21 @@ export interface IEntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, overrides?: CallOverrides ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, + beneficiary: PromiseOrValue, overrides?: CallOverrides ): Promise; simulateHandleOp( op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -501,91 +603,91 @@ export interface IEntryPoint extends BaseContract { unlockStake(overrides?: CallOverrides): Promise; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "AccountDeployed(bytes32,address,address,address)"( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, factory?: null, paymaster?: null ): AccountDeployedEventFilter; AccountDeployed( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, factory?: null, paymaster?: null ): AccountDeployedEventFilter; "Deposited(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; Deposited( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; "SignatureAggregatorChanged(address)"( - aggregator?: null + aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; SignatureAggregatorChanged( - aggregator?: null + aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; "StakeLocked(address,uint256,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; StakeLocked( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; "StakeUnlocked(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; StakeUnlocked( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; "StakeWithdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; StakeWithdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( - userOpHash?: BytesLike | null, - sender?: string | null, - paymaster?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, nonce?: null, success?: null, actualGasCost?: null, actualGasUsed?: null ): UserOperationEventEventFilter; UserOperationEvent( - userOpHash?: BytesLike | null, - sender?: string | null, - paymaster?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, nonce?: null, success?: null, actualGasCost?: null, @@ -593,25 +695,25 @@ export interface IEntryPoint extends BaseContract { ): UserOperationEventEventFilter; "UserOperationRevertReason(bytes32,address,uint256,bytes)"( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, nonce?: null, revertReason?: null ): UserOperationRevertReasonEventFilter; UserOperationRevertReason( - userOpHash?: BytesLike | null, - sender?: string | null, + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, nonce?: null, revertReason?: null ): UserOperationRevertReasonEventFilter; "Withdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; Withdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; @@ -619,25 +721,28 @@ export interface IEntryPoint extends BaseContract { estimateGas: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -646,67 +751,69 @@ export interface IEntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; balanceOf( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; getSenderAddress( - initCode: BytesLike, - overrides?: Overrides & { from?: string | Promise } + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getUserOpHash( @@ -715,40 +822,42 @@ export interface IEntryPoint extends BaseContract { ): Promise; handleAggregatedOps( - opsPerAggregator: UserOpsPerAggregatorStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; handleOps( ops: UserOperationStruct[], - beneficiary: string, - overrides?: Overrides & { from?: string | Promise } + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateHandleOp( op: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; simulateValidation( userOp: UserOperationStruct, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/IPaymaster.ts b/src/contracts/src/aa-4337/interfaces/IPaymaster.ts similarity index 52% rename from src/contracts/IPaymaster.ts rename to src/contracts/src/aa-4337/interfaces/IPaymaster.ts index a6a8f585..68b08bbd 100644 --- a/src/contracts/IPaymaster.ts +++ b/src/contracts/src/aa-4337/interfaces/IPaymaster.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,22 +13,28 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -63,13 +69,25 @@ export interface IPaymasterInterface extends utils.Interface { "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: "postOp" | "validatePaymasterUserOp" + ): FunctionFragment; + encodeFunctionData( functionFragment: "postOp", - values: [BigNumberish, BytesLike, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "validatePaymasterUserOp", - values: [UserOperationStruct, BytesLike, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; @@ -109,49 +127,49 @@ export interface IPaymaster extends BaseContract { functions: { postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, overrides?: CallOverrides ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, overrides?: CallOverrides ): Promise< - [string, BigNumber] & { context: string; sigTimeRange: BigNumber } + [string, BigNumber] & { context: string; validationData: BigNumber } >; }; @@ -159,33 +177,33 @@ export interface IPaymaster extends BaseContract { estimateGas: { postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/IStakeManager.ts b/src/contracts/src/aa-4337/interfaces/IStakeManager.ts similarity index 52% rename from src/contracts/IStakeManager.ts rename to src/contracts/src/aa-4337/interfaces/IStakeManager.ts index 85ac9b68..0766fd74 100644 --- a/src/contracts/IStakeManager.ts +++ b/src/contracts/src/aa-4337/interfaces/IStakeManager.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,31 +14,43 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export type DepositInfoStruct = { - deposit: BigNumberish; - staked: boolean; - stake: BigNumberish; - unstakeDelaySec: BigNumberish; - withdrawTime: BigNumberish; -}; - -export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - BigNumber -] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: BigNumber; -}; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} export interface IStakeManagerInterface extends utils.Interface { functions: { @@ -51,15 +63,32 @@ export interface IStakeManagerInterface extends utils.Interface { "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "balanceOf" + | "depositTo" + | "getDepositInfo" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "depositTo", values: [string]): string; encodeFunctionData( functionFragment: "getDepositInfo", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "unlockStake", @@ -67,11 +96,11 @@ export interface IStakeManagerInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; @@ -106,37 +135,60 @@ export interface IStakeManagerInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; } +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} export type DepositedEvent = TypedEvent< [string, BigNumber], - { account: string; totalDeposit: BigNumber } + DepositedEventObject >; export type DepositedEventFilter = TypedEventFilter; +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} export type StakeLockedEvent = TypedEvent< [string, BigNumber, BigNumber], - { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } + StakeLockedEventObject >; export type StakeLockedEventFilter = TypedEventFilter; +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} export type StakeUnlockedEvent = TypedEvent< [string, BigNumber], - { account: string; withdrawTime: BigNumber } + StakeUnlockedEventObject >; export type StakeUnlockedEventFilter = TypedEventFilter; +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type StakeWithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + StakeWithdrawnEventObject >; export type StakeWithdrawnEventFilter = TypedEventFilter; +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} export type WithdrawnEvent = TypedEvent< [string, string, BigNumber], - { account: string; withdrawAddress: string; amount: BigNumber } + WithdrawnEventObject >; export type WithdrawnEventFilter = TypedEventFilter; @@ -169,147 +221,163 @@ export interface IStakeManager extends BaseContract { functions: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise<[DepositInfoStructOutput] & { info: DepositInfoStructOutput }>; + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addStake( - _unstakeDelaySec: BigNumberish, + _unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - depositTo(account: string, overrides?: CallOverrides): Promise; + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; unlockStake(overrides?: CallOverrides): Promise; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "Deposited(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; Deposited( - account?: string | null, + account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; "StakeLocked(address,uint256,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; StakeLocked( - account?: string | null, + account?: PromiseOrValue | null, totalStaked?: null, - withdrawTime?: null + unstakeDelaySec?: null ): StakeLockedEventFilter; "StakeUnlocked(address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; StakeUnlocked( - account?: string | null, + account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; "StakeWithdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; StakeWithdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): StakeWithdrawnEventFilter; "Withdrawn(address,address,uint256)"( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; Withdrawn( - account?: string | null, + account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null ): WithdrawnEventFilter; @@ -317,72 +385,75 @@ export interface IStakeManager extends BaseContract { estimateGas: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - balanceOf(account: string, overrides?: CallOverrides): Promise; + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addStake( - _unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + _unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; balanceOf( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; depositTo( - account: string, - overrides?: PayableOverrides & { from?: string | Promise } + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; getDepositInfo( - account: string, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - withdrawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/src/aa-4337/interfaces/index.ts b/src/contracts/src/aa-4337/interfaces/index.ts new file mode 100644 index 00000000..7860e310 --- /dev/null +++ b/src/contracts/src/aa-4337/interfaces/index.ts @@ -0,0 +1,10 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IAccount } from "./IAccount"; +export type { IAggregatedAccount } from "./IAggregatedAccount"; +export type { IAggregator } from "./IAggregator"; +export type { ICreate2Deployer } from "./ICreate2Deployer"; +export type { IEntryPoint } from "./IEntryPoint"; +export type { IPaymaster } from "./IPaymaster"; +export type { IStakeManager } from "./IStakeManager"; diff --git a/src/contracts/DepositPaymaster.ts b/src/contracts/src/aa-4337/samples/DepositPaymaster.ts similarity index 54% rename from src/contracts/DepositPaymaster.ts rename to src/contracts/src/aa-4337/samples/DepositPaymaster.ts index 5710f58c..564c3650 100644 --- a/src/contracts/DepositPaymaster.ts +++ b/src/contracts/src/aa-4337/samples/DepositPaymaster.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,22 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -74,7 +84,6 @@ export interface DepositPaymasterInterface extends utils.Interface { "owner()": FunctionFragment; "postOp(uint8,bytes,uint256)": FunctionFragment; "renounceOwnership()": FunctionFragment; - "setEntryPoint(address)": FunctionFragment; "transferOwnership(address)": FunctionFragment; "unlockBlock(address)": FunctionFragment; "unlockStake()": FunctionFragment; @@ -85,30 +94,60 @@ export interface DepositPaymasterInterface extends utils.Interface { "withdrawTokensTo(address,address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "COST_OF_POST" + | "addDepositFor" + | "addStake" + | "addToken" + | "balances" + | "deposit" + | "depositInfo" + | "entryPoint" + | "getDeposit" + | "lockTokenDeposit" + | "oracles" + | "owner" + | "postOp" + | "renounceOwnership" + | "transferOwnership" + | "unlockBlock" + | "unlockStake" + | "unlockTokenDeposit" + | "validatePaymasterUserOp" + | "withdrawStake" + | "withdrawTo" + | "withdrawTokensTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "COST_OF_POST", values?: undefined ): string; encodeFunctionData( functionFragment: "addDepositFor", - values: [string, string, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "addToken", - values: [string, string] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "balances", - values: [string, string] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData(functionFragment: "deposit", values?: undefined): string; encodeFunctionData( functionFragment: "depositInfo", - values: [string, string] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "entryPoint", @@ -122,25 +161,31 @@ export interface DepositPaymasterInterface extends utils.Interface { functionFragment: "lockTokenDeposit", values?: undefined ): string; - encodeFunctionData(functionFragment: "oracles", values: [string]): string; + encodeFunctionData( + functionFragment: "oracles", + values: [PromiseOrValue] + ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( functionFragment: "postOp", - values: [BigNumberish, BytesLike, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined ): string; encodeFunctionData( - functionFragment: "setEntryPoint", - values: [string] + functionFragment: "transferOwnership", + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] + functionFragment: "unlockBlock", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "unlockBlock", values: [string]): string; encodeFunctionData( functionFragment: "unlockStake", values?: undefined @@ -151,19 +196,27 @@ export interface DepositPaymasterInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "validatePaymasterUserOp", - values: [UserOperationStruct, BytesLike, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTokensTo", - values: [string, string, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult( @@ -195,10 +248,6 @@ export interface DepositPaymasterInterface extends utils.Interface { functionFragment: "renounceOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "setEntryPoint", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -236,9 +285,13 @@ export interface DepositPaymasterInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} export type OwnershipTransferredEvent = TypedEvent< [string, string], - { previousOwner: string; newOwner: string } + OwnershipTransferredEventObject >; export type OwnershipTransferredEventFilter = @@ -274,36 +327,36 @@ export interface DepositPaymaster extends BaseContract { COST_OF_POST(overrides?: CallOverrides): Promise<[BigNumber]>; addDepositFor( - token: string, - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + account: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; addToken( - token: string, - tokenPriceOracle: string, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + tokenPriceOracle: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; balances( - arg0: string, - arg1: string, + arg0: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise<[BigNumber]>; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; depositInfo( - token: string, - account: string, + token: PromiseOrValue, + account: PromiseOrValue, overrides?: CallOverrides ): Promise< [BigNumber, BigNumber] & { amount: BigNumber; _unlockBlock: BigNumber } @@ -314,103 +367,104 @@ export interface DepositPaymaster extends BaseContract { getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; lockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - oracles(arg0: string, overrides?: CallOverrides): Promise<[string]>; + oracles( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; owner(overrides?: CallOverrides): Promise<[string]>; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - unlockBlock(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; + unlockBlock( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, BigNumber] & { context: string; deadline: BigNumber }>; + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTokensTo( - token: string, - target: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + target: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; COST_OF_POST(overrides?: CallOverrides): Promise; addDepositFor( - token: string, - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + account: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; addToken( - token: string, - tokenPriceOracle: string, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + tokenPriceOracle: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; balances( - arg0: string, - arg1: string, + arg0: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; depositInfo( - token: string, - account: string, + token: PromiseOrValue, + account: PromiseOrValue, overrides?: CallOverrides ): Promise< [BigNumber, BigNumber] & { amount: BigNumber; _unlockBlock: BigNumber } @@ -421,101 +475,102 @@ export interface DepositPaymaster extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; lockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - oracles(arg0: string, overrides?: CallOverrides): Promise; + oracles( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - unlockBlock(arg0: string, overrides?: CallOverrides): Promise; + unlockBlock( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: CallOverrides - ): Promise<[string, BigNumber] & { context: string; deadline: BigNumber }>; + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTokensTo( - token: string, - target: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + target: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { COST_OF_POST(overrides?: CallOverrides): Promise; addDepositFor( - token: string, - account: string, - amount: BigNumberish, + token: PromiseOrValue, + account: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; addStake( - unstakeDelaySec: BigNumberish, + unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; addToken( - token: string, - tokenPriceOracle: string, + token: PromiseOrValue, + tokenPriceOracle: PromiseOrValue, overrides?: CallOverrides ): Promise; balances( - arg0: string, - arg1: string, + arg0: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; deposit(overrides?: CallOverrides): Promise; depositInfo( - token: string, - account: string, + token: PromiseOrValue, + account: PromiseOrValue, overrides?: CallOverrides ): Promise< [BigNumber, BigNumber] & { amount: BigNumber; _unlockBlock: BigNumber } @@ -527,30 +582,31 @@ export interface DepositPaymaster extends BaseContract { lockTokenDeposit(overrides?: CallOverrides): Promise; - oracles(arg0: string, overrides?: CallOverrides): Promise; + oracles( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, overrides?: CallOverrides ): Promise; renounceOwnership(overrides?: CallOverrides): Promise; - setEntryPoint( - _entryPoint: string, - overrides?: CallOverrides - ): Promise; - transferOwnership( - newOwner: string, + newOwner: PromiseOrValue, overrides?: CallOverrides ): Promise; - unlockBlock(arg0: string, overrides?: CallOverrides): Promise; + unlockBlock( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; unlockStake(overrides?: CallOverrides): Promise; @@ -558,38 +614,40 @@ export interface DepositPaymaster extends BaseContract { validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string, BigNumber] & { context: string; deadline: BigNumber }>; + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTokensTo( - token: string, - target: string, - amount: BigNumberish, + token: PromiseOrValue, + target: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; }; @@ -597,36 +655,36 @@ export interface DepositPaymaster extends BaseContract { COST_OF_POST(overrides?: CallOverrides): Promise; addDepositFor( - token: string, - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + account: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; addToken( - token: string, - tokenPriceOracle: string, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + tokenPriceOracle: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; balances( - arg0: string, - arg1: string, + arg0: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; depositInfo( - token: string, - account: string, + token: PromiseOrValue, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -635,67 +693,68 @@ export interface DepositPaymaster extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; lockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - oracles(arg0: string, overrides?: CallOverrides): Promise; + oracles( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - unlockBlock(arg0: string, overrides?: CallOverrides): Promise; + unlockBlock( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: CallOverrides + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTokensTo( - token: string, - target: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + target: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; @@ -703,36 +762,36 @@ export interface DepositPaymaster extends BaseContract { COST_OF_POST(overrides?: CallOverrides): Promise; addDepositFor( - token: string, - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + account: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; addToken( - token: string, - tokenPriceOracle: string, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + tokenPriceOracle: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; balances( - arg0: string, - arg1: string, + arg0: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; depositInfo( - token: string, - account: string, + token: PromiseOrValue, + account: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -741,73 +800,68 @@ export interface DepositPaymaster extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; lockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; oracles( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockBlock( - arg0: string, + arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockTokenDeposit( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - maxCost: BigNumberish, - overrides?: CallOverrides + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTokensTo( - token: string, - target: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + token: PromiseOrValue, + target: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/src/aa-4337/samples/IOracle.ts b/src/contracts/src/aa-4337/samples/IOracle.ts new file mode 100644 index 00000000..942a185f --- /dev/null +++ b/src/contracts/src/aa-4337/samples/IOracle.ts @@ -0,0 +1,104 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface IOracleInterface extends utils.Interface { + functions: { + "getTokenValueOfEth(uint256)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "getTokenValueOfEth"): FunctionFragment; + + encodeFunctionData( + functionFragment: "getTokenValueOfEth", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "getTokenValueOfEth", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IOracle extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IOracleInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber] & { tokenInput: BigNumber }>; + }; + + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/EtherspotAccount.ts b/src/contracts/src/aa-4337/samples/SimpleAccount.ts similarity index 51% rename from src/contracts/EtherspotAccount.ts rename to src/contracts/src/aa-4337/samples/SimpleAccount.ts index 03306284..a4390322 100644 --- a/src/contracts/EtherspotAccount.ts +++ b/src/contracts/src/aa-4337/samples/SimpleAccount.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,22 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -58,12 +68,12 @@ export type UserOperationStructOutput = [ signature: string; }; -export interface EtherspotAccountInterface extends utils.Interface { +export interface SimpleAccountInterface extends utils.Interface { functions: { "addDeposit()": FunctionFragment; "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; "executeBatch(address[],bytes[])": FunctionFragment; - "executeTransaction(address,uint256,bytes)": FunctionFragment; "getDeposit()": FunctionFragment; "initialize(address)": FunctionFragment; "nonce()": FunctionFragment; @@ -71,10 +81,27 @@ export interface EtherspotAccountInterface extends utils.Interface { "proxiableUUID()": FunctionFragment; "upgradeTo(address)": FunctionFragment; "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; "withdrawDepositTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addDeposit" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "initialize" + | "nonce" + | "owner" + | "proxiableUUID" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addDeposit", values?: undefined @@ -84,48 +111,59 @@ export interface EtherspotAccountInterface extends utils.Interface { values?: undefined ): string; encodeFunctionData( - functionFragment: "executeBatch", - values: [string[], BytesLike[]] + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, BytesLike] + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( functionFragment: "getDeposit", values?: undefined ): string; - encodeFunctionData(functionFragment: "initialize", values: [string]): string; + encodeFunctionData( + functionFragment: "initialize", + values: [PromiseOrValue] + ): string; encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( functionFragment: "proxiableUUID", values?: undefined ): string; - encodeFunctionData(functionFragment: "upgradeTo", values: [string]): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "upgradeToAndCall", - values: [string, BytesLike] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "validateUserOp", - values: [UserOperationStruct, BytesLike, string, BigNumberish] + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "withdrawDepositTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( functionFragment: "executeBatch", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; @@ -151,51 +189,71 @@ export interface EtherspotAccountInterface extends utils.Interface { events: { "AdminChanged(address,address)": EventFragment; "BeaconUpgraded(address)": EventFragment; - "EtherspotInitialized(address,address)": EventFragment; "Initialized(uint8)": EventFragment; + "SimpleAccountInitialized(address,address)": EventFragment; "Upgraded(address)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotInitialized"): EventFragment; getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SimpleAccountInitialized"): EventFragment; getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; } +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} export type AdminChangedEvent = TypedEvent< [string, string], - { previousAdmin: string; newAdmin: string } + AdminChangedEventObject >; export type AdminChangedEventFilter = TypedEventFilter; -export type BeaconUpgradedEvent = TypedEvent<[string], { beacon: string }>; +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; export type BeaconUpgradedEventFilter = TypedEventFilter; -export type EtherspotInitializedEvent = TypedEvent< - [string, string], - { entryPoint: string; owner: string } ->; +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; -export type EtherspotInitializedEventFilter = - TypedEventFilter; +export type InitializedEventFilter = TypedEventFilter; -export type InitializedEvent = TypedEvent<[number], { version: number }>; +export interface SimpleAccountInitializedEventObject { + entryPoint: string; + owner: string; +} +export type SimpleAccountInitializedEvent = TypedEvent< + [string, string], + SimpleAccountInitializedEventObject +>; -export type InitializedEventFilter = TypedEventFilter; +export type SimpleAccountInitializedEventFilter = + TypedEventFilter; -export type UpgradedEvent = TypedEvent<[string], { implementation: string }>; +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; export type UpgradedEventFilter = TypedEventFilter; -export interface EtherspotAccount extends BaseContract { +export interface SimpleAccount extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: EtherspotAccountInterface; + interface: SimpleAccountInterface; queryFilter( event: TypedEventFilter, @@ -218,29 +276,29 @@ export interface EtherspotAccount extends BaseContract { functions: { addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; initialize( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; @@ -250,55 +308,54 @@ export interface EtherspotAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise<[string]>; upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; initialize( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -308,28 +365,27 @@ export interface EtherspotAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { @@ -337,22 +393,25 @@ export interface EtherspotAccount extends BaseContract { entryPoint(overrides?: CallOverrides): Promise; - executeBatch( - dest: string[], - func: BytesLike[], + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, overrides?: CallOverrides ): Promise; - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], overrides?: CallOverrides ): Promise; getDeposit(overrides?: CallOverrides): Promise; - initialize(anOwner: string, overrides?: CallOverrides): Promise; + initialize( + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -361,27 +420,26 @@ export interface EtherspotAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; upgradeTo( - newImplementation: string, + newImplementation: PromiseOrValue, overrides?: CallOverrides ): Promise; upgradeToAndCall( - newImplementation: string, - data: BytesLike, + newImplementation: PromiseOrValue, + data: PromiseOrValue, overrides?: CallOverrides ): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -397,51 +455,57 @@ export interface EtherspotAccount extends BaseContract { ): AdminChangedEventFilter; "BeaconUpgraded(address)"( - beacon?: string | null + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - BeaconUpgraded(beacon?: string | null): BeaconUpgradedEventFilter; - - "EtherspotInitialized(address,address)"( - entryPoint?: string | null, - owner?: string | null - ): EtherspotInitializedEventFilter; - EtherspotInitialized( - entryPoint?: string | null, - owner?: string | null - ): EtherspotInitializedEventFilter; "Initialized(uint8)"(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "Upgraded(address)"(implementation?: string | null): UpgradedEventFilter; - Upgraded(implementation?: string | null): UpgradedEventFilter; + "SimpleAccountInitialized(address,address)"( + entryPoint?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): SimpleAccountInitializedEventFilter; + SimpleAccountInitialized( + entryPoint?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): SimpleAccountInitializedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; }; estimateGas: { addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; initialize( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -451,56 +515,55 @@ export interface EtherspotAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addDeposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; - executeBatch( - dest: string[], - func: BytesLike[], - overrides?: Overrides & { from?: string | Promise } + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - executeTransaction( - dest: string, - value: BigNumberish, - func: BytesLike, - overrides?: Overrides & { from?: string | Promise } + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; initialize( - anOwner: string, - overrides?: Overrides & { from?: string | Promise } + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -510,28 +573,27 @@ export interface EtherspotAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, - userOpHash: BytesLike, - aggregator: string, - missingAccountFunds: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/EtherspotAccountFactory.ts b/src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts similarity index 62% rename from src/contracts/EtherspotAccountFactory.ts rename to src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts index 7ab6491e..b14cf949 100644 --- a/src/contracts/EtherspotAccountFactory.ts +++ b/src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -13,28 +13,41 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; - -export interface EtherspotAccountFactoryInterface extends utils.Interface { +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface SimpleAccountFactoryInterface extends utils.Interface { functions: { "accountImplementation()": FunctionFragment; "createAccount(address,uint256)": FunctionFragment; "getAddress(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + encodeFunctionData( functionFragment: "accountImplementation", values?: undefined ): string; encodeFunctionData( functionFragment: "createAccount", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( functionFragment: "getAddress", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult( @@ -50,12 +63,12 @@ export interface EtherspotAccountFactoryInterface extends utils.Interface { events: {}; } -export interface EtherspotAccountFactory extends BaseContract { +export interface SimpleAccountFactory extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: EtherspotAccountFactoryInterface; + interface: SimpleAccountFactoryInterface; queryFilter( event: TypedEventFilter, @@ -80,14 +93,14 @@ export interface EtherspotAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise<[string]>; createAccount( - owner: string, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise<[string]>; }; @@ -95,14 +108,14 @@ export interface EtherspotAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - owner: string, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -110,14 +123,14 @@ export interface EtherspotAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; getAddress( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -128,14 +141,14 @@ export interface EtherspotAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - owner: string, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; }; @@ -146,14 +159,14 @@ export interface EtherspotAccountFactory extends BaseContract { ): Promise; createAccount( - owner: string, - salt: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( - owner: string, - salt: BigNumberish, + owner: PromiseOrValue, + salt: PromiseOrValue, overrides?: CallOverrides ): Promise; }; diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts b/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts new file mode 100644 index 00000000..aabc641d --- /dev/null +++ b/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts @@ -0,0 +1,1124 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestAggregatedAccountInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "aggregator()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getAggregator()": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "aggregator" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getAggregator" + | "getDeposit" + | "initialize" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "aggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getAggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAggregator", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface TestAggregatedAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestAggregatedAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAggregator(overrides?: CallOverrides): Promise<[string]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAggregator(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getAggregator(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAggregator(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAggregator(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts b/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts new file mode 100644 index 00000000..81aac0b8 --- /dev/null +++ b/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts @@ -0,0 +1,203 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface TestAggregatedAccountFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,address,address,uint256)": FunctionFragment; + "getAddress(address,address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface TestAggregatedAccountFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestAggregatedAccountFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/samples/TokenPaymaster.ts b/src/contracts/src/aa-4337/samples/TokenPaymaster.ts new file mode 100644 index 00000000..0fb49190 --- /dev/null +++ b/src/contracts/src/aa-4337/samples/TokenPaymaster.ts @@ -0,0 +1,964 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TokenPaymasterInterface extends utils.Interface { + functions: { + "COST_OF_POST()": FunctionFragment; + "addStake(uint32)": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "deposit()": FunctionFragment; + "entryPoint()": FunctionFragment; + "getDeposit()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "mintTokens(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "owner()": FunctionFragment; + "postOp(uint8,bytes,uint256)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "symbol()": FunctionFragment; + "theFactory()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "unlockStake()": FunctionFragment; + "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "COST_OF_POST" + | "addStake" + | "allowance" + | "approve" + | "balanceOf" + | "decimals" + | "decreaseAllowance" + | "deposit" + | "entryPoint" + | "getDeposit" + | "increaseAllowance" + | "mintTokens" + | "name" + | "owner" + | "postOp" + | "renounceOwnership" + | "symbol" + | "theFactory" + | "totalSupply" + | "transfer" + | "transferFrom" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "COST_OF_POST", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData( + functionFragment: "decreaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "increaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "mintTokens", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "postOp", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData( + functionFragment: "theFactory", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "validatePaymasterUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "COST_OF_POST", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "decreaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "increaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "mintTokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "theFactory", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validatePaymasterUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface TokenPaymaster extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TokenPaymasterInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + COST_OF_POST(overrides?: CallOverrides): Promise<[BigNumber]>; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + decimals(overrides?: CallOverrides): Promise<[number]>; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mintTokens( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + theFactory(overrides?: CallOverrides): Promise<[string]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + COST_OF_POST(overrides?: CallOverrides): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mintTokens( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + theFactory(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + COST_OF_POST(overrides?: CallOverrides): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mintTokens( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + name(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + theFactory(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + COST_OF_POST(overrides?: CallOverrides): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mintTokens( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + theFactory(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + COST_OF_POST(overrides?: CallOverrides): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mintTokens( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + theFactory(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts b/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts new file mode 100644 index 00000000..0cc23b22 --- /dev/null +++ b/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts @@ -0,0 +1,660 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface VerifyingPaymasterInterface extends utils.Interface { + functions: { + "addStake(uint32)": FunctionFragment; + "deposit()": FunctionFragment; + "entryPoint()": FunctionFragment; + "getDeposit()": FunctionFragment; + "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)": FunctionFragment; + "owner()": FunctionFragment; + "parsePaymasterAndData(bytes)": FunctionFragment; + "postOp(uint8,bytes,uint256)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "senderNonce(address)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "unlockStake()": FunctionFragment; + "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "verifyingSigner()": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "deposit" + | "entryPoint" + | "getDeposit" + | "getHash" + | "owner" + | "parsePaymasterAndData" + | "postOp" + | "renounceOwnership" + | "senderNonce" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "verifyingSigner" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getHash", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "parsePaymasterAndData", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "postOp", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "senderNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "validatePaymasterUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "verifyingSigner", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "parsePaymasterAndData", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "senderNonce", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validatePaymasterUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifyingSigner", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface VerifyingPaymaster extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: VerifyingPaymasterInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyingSigner(overrides?: CallOverrides): Promise<[string]>; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyingSigner(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; + + verifyingSigner(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyingSigner(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyingSigner(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/samples/index.ts b/src/contracts/src/aa-4337/samples/index.ts new file mode 100644 index 00000000..be5a61a5 --- /dev/null +++ b/src/contracts/src/aa-4337/samples/index.ts @@ -0,0 +1,9 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { DepositPaymaster } from "./DepositPaymaster"; +export type { IOracle } from "./IOracle"; +export type { TestAggregatedAccount } from "./TestAggregatedAccount"; +export type { TestAggregatedAccountFactory } from "./TestAggregatedAccountFactory"; +export type { TokenPaymaster } from "./TokenPaymaster"; +export type { VerifyingPaymaster } from "./VerifyingPaymaster"; diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts new file mode 100644 index 00000000..3e20db45 --- /dev/null +++ b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts @@ -0,0 +1,1238 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface BrokenBLSAccountInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "aggregator()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getBlsPublicKey()": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,uint256[4])": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "aggregator" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getBlsPublicKey" + | "getDeposit" + | "initialize(address,address,uint256[4])" + | "initialize(address,address,address)" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "aggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getBlsPublicKey", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize(address,address,uint256[4])", + values: [ + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "initialize(address,address,address)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getBlsPublicKey", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "initialize(address,address,uint256[4])", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "initialize(address,address,address)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface PublicKeyChangedEventObject { + oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; + newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; +} +export type PublicKeyChangedEvent = TypedEvent< + [ + [BigNumber, BigNumber, BigNumber, BigNumber], + [BigNumber, BigNumber, BigNumber, BigNumber] + ], + PublicKeyChangedEventObject +>; + +export type PublicKeyChangedEventFilter = + TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface BrokenBLSAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BrokenBLSAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[[BigNumber, BigNumber, BigNumber, BigNumber]]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getBlsPublicKey( + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]>; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "PublicKeyChanged(uint256[4],uint256[4])"( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + PublicKeyChanged( + oldPublicKey?: null, + newPublicKey?: null + ): PublicKeyChangedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getBlsPublicKey(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + "initialize(address,address,uint256[4])"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "initialize(address,address,address)"( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts new file mode 100644 index 00000000..f282c372 --- /dev/null +++ b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts @@ -0,0 +1,263 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface BrokenBLSAccountFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,address,uint256,uint256[4])": FunctionFragment; + "getAddress(address,address,uint256,uint256[4])": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface BrokenBLSAccountFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BrokenBLSAccountFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + salt: PromiseOrValue, + aPublicKey: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ], + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts new file mode 100644 index 00000000..f4440ee6 --- /dev/null +++ b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { BrokenBLSAccount } from "./BrokenBLSAccount"; +export type { BrokenBLSAccountFactory } from "./BrokenBLSAccountFactory"; diff --git a/src/contracts/src/aa-4337/test/MaliciousAccount.ts b/src/contracts/src/aa-4337/test/MaliciousAccount.ts new file mode 100644 index 00000000..9b92a02d --- /dev/null +++ b/src/contracts/src/aa-4337/test/MaliciousAccount.ts @@ -0,0 +1,160 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface MaliciousAccountInterface extends utils.Interface { + functions: { + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "validateUserOp"): FunctionFragment; + + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface MaliciousAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: MaliciousAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts b/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts new file mode 100644 index 00000000..ef43893d --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts @@ -0,0 +1,1104 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestAggregatedAccountInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "aggregator()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "aggregator" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "initialize" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "aggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface TestAggregatedAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestAggregatedAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + arg2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts b/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts new file mode 100644 index 00000000..81aac0b8 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts @@ -0,0 +1,203 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface TestAggregatedAccountFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,address,address,uint256)": FunctionFragment; + "getAddress(address,address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface TestAggregatedAccountFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestAggregatedAccountFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestCounter.ts b/src/contracts/src/aa-4337/test/TestCounter.ts new file mode 100644 index 00000000..9609e206 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestCounter.ts @@ -0,0 +1,265 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface TestCounterInterface extends utils.Interface { + functions: { + "count()": FunctionFragment; + "countFail()": FunctionFragment; + "counters(address)": FunctionFragment; + "gasWaster(uint256,string)": FunctionFragment; + "justemit()": FunctionFragment; + "offset()": FunctionFragment; + "xxx(uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "count" + | "countFail" + | "counters" + | "gasWaster" + | "justemit" + | "offset" + | "xxx" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "count", values?: undefined): string; + encodeFunctionData(functionFragment: "countFail", values?: undefined): string; + encodeFunctionData( + functionFragment: "counters", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "gasWaster", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "justemit", values?: undefined): string; + encodeFunctionData(functionFragment: "offset", values?: undefined): string; + encodeFunctionData( + functionFragment: "xxx", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "count", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "countFail", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "counters", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gasWaster", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "justemit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "offset", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "xxx", data: BytesLike): Result; + + events: { + "CalledFrom(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "CalledFrom"): EventFragment; +} + +export interface CalledFromEventObject { + sender: string; +} +export type CalledFromEvent = TypedEvent<[string], CalledFromEventObject>; + +export type CalledFromEventFilter = TypedEventFilter; + +export interface TestCounter extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestCounterInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + count( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + countFail(overrides?: CallOverrides): Promise<[void]>; + + counters( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + gasWaster( + repeat: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + justemit( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + offset(overrides?: CallOverrides): Promise<[BigNumber]>; + + xxx( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + }; + + count( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + countFail(overrides?: CallOverrides): Promise; + + counters( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + gasWaster( + repeat: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + justemit( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + offset(overrides?: CallOverrides): Promise; + + xxx( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + count(overrides?: CallOverrides): Promise; + + countFail(overrides?: CallOverrides): Promise; + + counters( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + gasWaster( + repeat: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + justemit(overrides?: CallOverrides): Promise; + + offset(overrides?: CallOverrides): Promise; + + xxx( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "CalledFrom(address)"(sender?: null): CalledFromEventFilter; + CalledFrom(sender?: null): CalledFromEventFilter; + }; + + estimateGas: { + count( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + countFail(overrides?: CallOverrides): Promise; + + counters( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + gasWaster( + repeat: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + justemit( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + offset(overrides?: CallOverrides): Promise; + + xxx( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + count( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + countFail(overrides?: CallOverrides): Promise; + + counters( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + gasWaster( + repeat: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + justemit( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + offset(overrides?: CallOverrides): Promise; + + xxx( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/VerifyingPaymaster.ts b/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts similarity index 53% rename from src/contracts/VerifyingPaymaster.ts rename to src/contracts/src/aa-4337/test/TestExpirePaymaster.ts index b66e0429..b2f21cd3 100644 --- a/src/contracts/VerifyingPaymaster.ts +++ b/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts @@ -1,7 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { +import type { BaseContract, BigNumber, BigNumberish, @@ -14,22 +14,32 @@ import { Signer, utils, } from "ethers"; -import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; -import { Listener, Provider } from "@ethersproject/providers"; -import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; export type UserOperationStruct = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; }; export type UserOperationStructOutput = [ @@ -58,28 +68,41 @@ export type UserOperationStructOutput = [ signature: string; }; -export interface VerifyingPaymasterInterface extends utils.Interface { +export interface TestExpirePaymasterInterface extends utils.Interface { functions: { "addStake(uint32)": FunctionFragment; "deposit()": FunctionFragment; "entryPoint()": FunctionFragment; "getDeposit()": FunctionFragment; - "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; "owner()": FunctionFragment; "postOp(uint8,bytes,uint256)": FunctionFragment; "renounceOwnership()": FunctionFragment; - "setEntryPoint(address)": FunctionFragment; "transferOwnership(address)": FunctionFragment; "unlockStake()": FunctionFragment; "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "verifyingSigner()": FunctionFragment; "withdrawStake(address)": FunctionFragment; "withdrawTo(address,uint256)": FunctionFragment; }; + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "deposit" + | "entryPoint" + | "getDeposit" + | "owner" + | "postOp" + | "renounceOwnership" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + encodeFunctionData( functionFragment: "addStake", - values: [BigNumberish] + values: [PromiseOrValue] ): string; encodeFunctionData(functionFragment: "deposit", values?: undefined): string; encodeFunctionData( @@ -90,26 +113,22 @@ export interface VerifyingPaymasterInterface extends utils.Interface { functionFragment: "getDeposit", values?: undefined ): string; - encodeFunctionData( - functionFragment: "getHash", - values: [UserOperationStruct] - ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( functionFragment: "postOp", - values: [BigNumberish, BytesLike, BigNumberish] + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "renounceOwnership", values?: undefined ): string; - encodeFunctionData( - functionFragment: "setEntryPoint", - values: [string] - ): string; encodeFunctionData( functionFragment: "transferOwnership", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "unlockStake", @@ -117,36 +136,31 @@ export interface VerifyingPaymasterInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "validatePaymasterUserOp", - values: [UserOperationStruct, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "verifyingSigner", - values?: undefined + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( functionFragment: "withdrawStake", - values: [string] + values: [PromiseOrValue] ): string; encodeFunctionData( functionFragment: "withdrawTo", - values: [string, BigNumberish] + values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; decodeFunctionResult( functionFragment: "renounceOwnership", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "setEntryPoint", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "transferOwnership", data: BytesLike @@ -159,10 +173,6 @@ export interface VerifyingPaymasterInterface extends utils.Interface { functionFragment: "validatePaymasterUserOp", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "verifyingSigner", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "withdrawStake", data: BytesLike @@ -176,20 +186,24 @@ export interface VerifyingPaymasterInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; } +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} export type OwnershipTransferredEvent = TypedEvent< [string, string], - { previousOwner: string; newOwner: string } + OwnershipTransferredEventObject >; export type OwnershipTransferredEventFilter = TypedEventFilter; -export interface VerifyingPaymaster extends BaseContract { +export interface TestExpirePaymaster extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: VerifyingPaymasterInterface; + interface: TestExpirePaymasterInterface; queryFilter( event: TypedEventFilter, @@ -212,143 +226,115 @@ export interface VerifyingPaymaster extends BaseContract { functions: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - getHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - arg1: BytesLike, - requiredPreFund: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, BigNumber] & { context: string; sigTimeRange: BigNumber } - >; - - verifyingSigner(overrides?: CallOverrides): Promise<[string]>; + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; getDeposit(overrides?: CallOverrides): Promise; - getHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - arg1: BytesLike, - requiredPreFund: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string, BigNumber] & { context: string; sigTimeRange: BigNumber } - >; - - verifyingSigner(overrides?: CallOverrides): Promise; + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addStake( - unstakeDelaySec: BigNumberish, + unstakeDelaySec: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -358,29 +344,19 @@ export interface VerifyingPaymaster extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - getHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, overrides?: CallOverrides ): Promise; renounceOwnership(overrides?: CallOverrides): Promise; - setEntryPoint( - _entryPoint: string, - overrides?: CallOverrides - ): Promise; - transferOwnership( - newOwner: string, + newOwner: PromiseOrValue, overrides?: CallOverrides ): Promise; @@ -388,169 +364,143 @@ export interface VerifyingPaymaster extends BaseContract { validatePaymasterUserOp( userOp: UserOperationStruct, - arg1: BytesLike, - requiredPreFund: BigNumberish, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, overrides?: CallOverrides ): Promise< - [string, BigNumber] & { context: string; sigTimeRange: BigNumber } + [string, BigNumber] & { context: string; validationData: BigNumber } >; - verifyingSigner(overrides?: CallOverrides): Promise; - withdrawStake( - withdrawAddress: string, + withdrawAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, overrides?: CallOverrides ): Promise; }; filters: { "OwnershipTransferred(address,address)"( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; OwnershipTransferred( - previousOwner?: string | null, - newOwner?: string | null + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; }; estimateGas: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; getDeposit(overrides?: CallOverrides): Promise; - getHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - arg1: BytesLike, - requiredPreFund: BigNumberish, - overrides?: CallOverrides + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - verifyingSigner(overrides?: CallOverrides): Promise; - withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { addStake( - unstakeDelaySec: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; deposit( - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; getDeposit(overrides?: CallOverrides): Promise; - getHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - owner(overrides?: CallOverrides): Promise; postOp( - mode: BigNumberish, - context: BytesLike, - actualGasCost: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setEntryPoint( - _entryPoint: string, - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; unlockStake( - overrides?: Overrides & { from?: string | Promise } + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; validatePaymasterUserOp( userOp: UserOperationStruct, - arg1: BytesLike, - requiredPreFund: BigNumberish, - overrides?: CallOverrides + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - verifyingSigner(overrides?: CallOverrides): Promise; - withdrawStake( - withdrawAddress: string, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawTo( - withdrawAddress: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/src/contracts/src/aa-4337/test/TestExpiryAccount.ts b/src/contracts/src/aa-4337/test/TestExpiryAccount.ts new file mode 100644 index 00000000..8e3e7000 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestExpiryAccount.ts @@ -0,0 +1,1200 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestExpiryAccountInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "addTemporaryOwner(address,uint48,uint48)": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "ownerAfter(address)": FunctionFragment; + "ownerUntil(address)": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "addTemporaryOwner" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "initialize" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "ownerAfter" + | "ownerUntil" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "addTemporaryOwner", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "ownerAfter", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "ownerUntil", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "addTemporaryOwner", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "ownerAfter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "ownerUntil", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface TestExpiryAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestExpiryAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + addTemporaryOwner( + owner: PromiseOrValue, + _after: PromiseOrValue, + _until: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + ownerAfter( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[number]>; + + ownerUntil( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[number]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + addTemporaryOwner( + owner: PromiseOrValue, + _after: PromiseOrValue, + _until: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAfter( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerUntil( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + addTemporaryOwner( + owner: PromiseOrValue, + _after: PromiseOrValue, + _until: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAfter( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerUntil( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + addTemporaryOwner( + owner: PromiseOrValue, + _after: PromiseOrValue, + _until: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAfter( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerUntil( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + addTemporaryOwner( + owner: PromiseOrValue, + _after: PromiseOrValue, + _until: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAfter( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerUntil( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestHelpers.ts b/src/contracts/src/aa-4337/test/TestHelpers.ts new file mode 100644 index 00000000..560493e6 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestHelpers.ts @@ -0,0 +1,243 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type ValidationDataStruct = { + aggregator: PromiseOrValue; + validAfter: PromiseOrValue; + validUntil: PromiseOrValue; +}; + +export type ValidationDataStructOutput = [string, number, number] & { + aggregator: string; + validAfter: number; + validUntil: number; +}; + +export interface TestHelpersInterface extends utils.Interface { + functions: { + "intersectTimeRange(uint256,uint256)": FunctionFragment; + "packValidationData(bool,uint48,uint48)": FunctionFragment; + "packValidationDataStruct((address,uint48,uint48))": FunctionFragment; + "parseValidationData(uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "intersectTimeRange" + | "packValidationData" + | "packValidationDataStruct" + | "parseValidationData" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "intersectTimeRange", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "packValidationData", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "packValidationDataStruct", + values: [ValidationDataStruct] + ): string; + encodeFunctionData( + functionFragment: "parseValidationData", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "intersectTimeRange", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "packValidationData", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "packValidationDataStruct", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "parseValidationData", + data: BytesLike + ): Result; + + events: {}; +} + +export interface TestHelpers extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestHelpersInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + intersectTimeRange( + validationData: PromiseOrValue, + paymasterValidationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[ValidationDataStructOutput]>; + + packValidationData( + sigFailed: PromiseOrValue, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + packValidationDataStruct( + data: ValidationDataStruct, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + parseValidationData( + validationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[ValidationDataStructOutput]>; + }; + + intersectTimeRange( + validationData: PromiseOrValue, + paymasterValidationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationData( + sigFailed: PromiseOrValue, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationDataStruct( + data: ValidationDataStruct, + overrides?: CallOverrides + ): Promise; + + parseValidationData( + validationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + intersectTimeRange( + validationData: PromiseOrValue, + paymasterValidationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationData( + sigFailed: PromiseOrValue, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationDataStruct( + data: ValidationDataStruct, + overrides?: CallOverrides + ): Promise; + + parseValidationData( + validationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + intersectTimeRange( + validationData: PromiseOrValue, + paymasterValidationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationData( + sigFailed: PromiseOrValue, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationDataStruct( + data: ValidationDataStruct, + overrides?: CallOverrides + ): Promise; + + parseValidationData( + validationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + intersectTimeRange( + validationData: PromiseOrValue, + paymasterValidationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationData( + sigFailed: PromiseOrValue, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + packValidationDataStruct( + data: ValidationDataStruct, + overrides?: CallOverrides + ): Promise; + + parseValidationData( + validationData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestOracle.ts b/src/contracts/src/aa-4337/test/TestOracle.ts new file mode 100644 index 00000000..216bc9cb --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestOracle.ts @@ -0,0 +1,104 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface TestOracleInterface extends utils.Interface { + functions: { + "getTokenValueOfEth(uint256)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "getTokenValueOfEth"): FunctionFragment; + + encodeFunctionData( + functionFragment: "getTokenValueOfEth", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "getTokenValueOfEth", + data: BytesLike + ): Result; + + events: {}; +} + +export interface TestOracle extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestOracleInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber] & { tokenInput: BigNumber }>; + }; + + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + getTokenValueOfEth( + ethOutput: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts b/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts new file mode 100644 index 00000000..cb85eb86 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts @@ -0,0 +1,506 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestPaymasterAcceptAllInterface extends utils.Interface { + functions: { + "addStake(uint32)": FunctionFragment; + "deposit()": FunctionFragment; + "entryPoint()": FunctionFragment; + "getDeposit()": FunctionFragment; + "owner()": FunctionFragment; + "postOp(uint8,bytes,uint256)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "unlockStake()": FunctionFragment; + "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "deposit" + | "entryPoint" + | "getDeposit" + | "owner" + | "postOp" + | "renounceOwnership" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "postOp", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "validatePaymasterUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validatePaymasterUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface TestPaymasterAcceptAll extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestPaymasterAcceptAllInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestRevertAccount.ts b/src/contracts/src/aa-4337/test/TestRevertAccount.ts new file mode 100644 index 00000000..64c640ba --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestRevertAccount.ts @@ -0,0 +1,193 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestRevertAccountInterface extends utils.Interface { + functions: { + "revertLong(uint256)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "revertLong" | "validateUserOp" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "revertLong", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "revertLong", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface TestRevertAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestRevertAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + revertLong( + length: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + + validateUserOp( + arg0: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + revertLong( + length: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + arg0: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + revertLong( + length: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + arg0: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + revertLong( + length: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + arg0: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + revertLong( + length: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + arg0: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts b/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts new file mode 100644 index 00000000..41a7d177 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts @@ -0,0 +1,261 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestSignatureAggregatorInterface extends utils.Interface { + functions: { + "addStake(address,uint32)": FunctionFragment; + "aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])": FunctionFragment; + "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)": FunctionFragment; + "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addStake" + | "aggregateSignatures" + | "validateSignatures" + | "validateUserOpSignature" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "aggregateSignatures", + values: [UserOperationStruct[]] + ): string; + encodeFunctionData( + functionFragment: "validateSignatures", + values: [UserOperationStruct[], PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOpSignature", + values: [UserOperationStruct] + ): string; + + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "aggregateSignatures", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateSignatures", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOpSignature", + data: BytesLike + ): Result; + + events: {}; +} + +export interface TestSignatureAggregator extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestSignatureAggregatorInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addStake( + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregateSignatures( + userOps: UserOperationStruct[], + overrides?: CallOverrides + ): Promise<[string] & { aggregatedSignature: string }>; + + validateSignatures( + userOps: UserOperationStruct[], + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + + validateUserOpSignature( + arg0: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + addStake( + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregateSignatures( + userOps: UserOperationStruct[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + arg0: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + callStatic: { + addStake( + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + aggregateSignatures( + userOps: UserOperationStruct[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + arg0: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + addStake( + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregateSignatures( + userOps: UserOperationStruct[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + arg0: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + addStake( + entryPoint: PromiseOrValue, + delay: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + aggregateSignatures( + userOps: UserOperationStruct[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + arg0: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestToken.ts b/src/contracts/src/aa-4337/test/TestToken.ts new file mode 100644 index 00000000..3ae96e30 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestToken.ts @@ -0,0 +1,501 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface TestTokenInterface extends utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "mint(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "allowance" + | "approve" + | "balanceOf" + | "decimals" + | "decreaseAllowance" + | "increaseAllowance" + | "mint" + | "name" + | "symbol" + | "totalSupply" + | "transfer" + | "transferFrom" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData( + functionFragment: "decreaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "increaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "mint", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "decreaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "increaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface TestToken extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestTokenInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + decimals(overrides?: CallOverrides): Promise<[number]>; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mint( + sender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mint( + sender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mint( + sender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mint( + sender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + mint( + sender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestUtil.ts b/src/contracts/src/aa-4337/test/TestUtil.ts new file mode 100644 index 00000000..671570a2 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestUtil.ts @@ -0,0 +1,141 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestUtilInterface extends utils.Interface { + functions: { + "packUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "packUserOp"): FunctionFragment; + + encodeFunctionData( + functionFragment: "packUserOp", + values: [UserOperationStruct] + ): string; + + decodeFunctionResult(functionFragment: "packUserOp", data: BytesLike): Result; + + events: {}; +} + +export interface TestUtil extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestUtilInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + packUserOp( + op: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + packUserOp( + op: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + callStatic: { + packUserOp( + op: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + packUserOp( + op: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + packUserOp( + op: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts b/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts new file mode 100644 index 00000000..3140edf7 --- /dev/null +++ b/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts @@ -0,0 +1,232 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestWarmColdAccountInterface extends utils.Interface { + functions: { + "state()": FunctionFragment; + "touchPaymaster(address)": FunctionFragment; + "touchStorage()": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "state" + | "touchPaymaster" + | "touchStorage" + | "validateUserOp" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "state", values?: undefined): string; + encodeFunctionData( + functionFragment: "touchPaymaster", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "touchStorage", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "touchPaymaster", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "touchStorage", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface TestWarmColdAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestWarmColdAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + state(overrides?: CallOverrides): Promise<[BigNumber]>; + + touchPaymaster( + paymaster: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + touchStorage(overrides?: CallOverrides): Promise<[BigNumber]>; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + state(overrides?: CallOverrides): Promise; + + touchPaymaster( + paymaster: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + touchStorage(overrides?: CallOverrides): Promise; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + state(overrides?: CallOverrides): Promise; + + touchPaymaster( + paymaster: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + touchStorage(overrides?: CallOverrides): Promise; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + state(overrides?: CallOverrides): Promise; + + touchPaymaster( + paymaster: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + touchStorage(overrides?: CallOverrides): Promise; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + state(overrides?: CallOverrides): Promise; + + touchPaymaster( + paymaster: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + touchStorage(overrides?: CallOverrides): Promise; + + validateUserOp( + userOp: UserOperationStruct, + arg1: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/test/index.ts b/src/contracts/src/aa-4337/test/index.ts new file mode 100644 index 00000000..f9d048b2 --- /dev/null +++ b/src/contracts/src/aa-4337/test/index.ts @@ -0,0 +1,19 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as brokenBlsAccountSol from "./BrokenBlsAccount.sol"; +export type { brokenBlsAccountSol }; +export type { MaliciousAccount } from "./MaliciousAccount"; +export type { TestAggregatedAccount } from "./TestAggregatedAccount"; +export type { TestAggregatedAccountFactory } from "./TestAggregatedAccountFactory"; +export type { TestCounter } from "./TestCounter"; +export type { TestExpirePaymaster } from "./TestExpirePaymaster"; +export type { TestExpiryAccount } from "./TestExpiryAccount"; +export type { TestHelpers } from "./TestHelpers"; +export type { TestOracle } from "./TestOracle"; +export type { TestPaymasterAcceptAll } from "./TestPaymasterAcceptAll"; +export type { TestRevertAccount } from "./TestRevertAccount"; +export type { TestSignatureAggregator } from "./TestSignatureAggregator"; +export type { TestToken } from "./TestToken"; +export type { TestUtil } from "./TestUtil"; +export type { TestWarmColdAccount } from "./TestWarmColdAccount"; diff --git a/src/contracts/src/backward_compatibility_helpers/Account.ts b/src/contracts/src/backward_compatibility_helpers/Account.ts new file mode 100644 index 00000000..a002607b --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/Account.ts @@ -0,0 +1,192 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface AccountInterface extends utils.Interface { + functions: { + "executeTransaction(address,uint256,bytes)": FunctionFragment; + "implementation()": FunctionFragment; + "registry()": FunctionFragment; + "setImplementation(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "executeTransaction" + | "implementation" + | "registry" + | "setImplementation" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "executeTransaction", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "implementation", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "setImplementation", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "executeTransaction", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "implementation", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setImplementation", + data: BytesLike + ): Result; + + events: {}; +} + +export interface Account extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + executeTransaction( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + implementation(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + setImplementation( + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + executeTransaction( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + implementation(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setImplementation( + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + executeTransaction( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + implementation(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setImplementation( + implementation_: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + executeTransaction( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + implementation(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setImplementation( + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + executeTransaction( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + implementation(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + setImplementation( + implementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/backward_compatibility_helpers/AccountController.ts b/src/contracts/src/backward_compatibility_helpers/AccountController.ts new file mode 100644 index 00000000..e003ec90 --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/AccountController.ts @@ -0,0 +1,235 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface AccountControllerInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "accountRegistry()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "accountImplementation" | "accountRegistry" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "accountRegistry", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "accountRegistry", + data: BytesLike + ): Result; + + events: { + "AccountDeployed(address,address)": EventFragment; + "AccountImplementationUpdated(address)": EventFragment; + "AccountRegistryUpdated(address)": EventFragment; + "AccountTransactionExecuted(address,address,uint256,bytes,bytes)": EventFragment; + "AccountUpgraded(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "AccountImplementationUpdated" + ): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountRegistryUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountTransactionExecuted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountUpgraded"): EventFragment; +} + +export interface AccountDeployedEventObject { + account: string; + accountImplementation: string; +} +export type AccountDeployedEvent = TypedEvent< + [string, string], + AccountDeployedEventObject +>; + +export type AccountDeployedEventFilter = TypedEventFilter; + +export interface AccountImplementationUpdatedEventObject { + accountImplementation: string; +} +export type AccountImplementationUpdatedEvent = TypedEvent< + [string], + AccountImplementationUpdatedEventObject +>; + +export type AccountImplementationUpdatedEventFilter = + TypedEventFilter; + +export interface AccountRegistryUpdatedEventObject { + accountRegistry: string; +} +export type AccountRegistryUpdatedEvent = TypedEvent< + [string], + AccountRegistryUpdatedEventObject +>; + +export type AccountRegistryUpdatedEventFilter = + TypedEventFilter; + +export interface AccountTransactionExecutedEventObject { + account: string; + to: string; + value: BigNumber; + data: string; + response: string; +} +export type AccountTransactionExecutedEvent = TypedEvent< + [string, string, BigNumber, string, string], + AccountTransactionExecutedEventObject +>; + +export type AccountTransactionExecutedEventFilter = + TypedEventFilter; + +export interface AccountUpgradedEventObject { + account: string; + accountImplementation: string; +} +export type AccountUpgradedEvent = TypedEvent< + [string, string], + AccountUpgradedEventObject +>; + +export type AccountUpgradedEventFilter = TypedEventFilter; + +export interface AccountController extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AccountControllerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + accountRegistry(overrides?: CallOverrides): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + }; + + filters: { + "AccountDeployed(address,address)"( + account?: null, + accountImplementation?: null + ): AccountDeployedEventFilter; + AccountDeployed( + account?: null, + accountImplementation?: null + ): AccountDeployedEventFilter; + + "AccountImplementationUpdated(address)"( + accountImplementation?: null + ): AccountImplementationUpdatedEventFilter; + AccountImplementationUpdated( + accountImplementation?: null + ): AccountImplementationUpdatedEventFilter; + + "AccountRegistryUpdated(address)"( + accountRegistry?: null + ): AccountRegistryUpdatedEventFilter; + AccountRegistryUpdated( + accountRegistry?: null + ): AccountRegistryUpdatedEventFilter; + + "AccountTransactionExecuted(address,address,uint256,bytes,bytes)"( + account?: null, + to?: null, + value?: null, + data?: null, + response?: null + ): AccountTransactionExecutedEventFilter; + AccountTransactionExecuted( + account?: null, + to?: null, + value?: null, + data?: null, + response?: null + ): AccountTransactionExecutedEventFilter; + + "AccountUpgraded(address,address)"( + account?: null, + accountImplementation?: null + ): AccountUpgradedEventFilter; + AccountUpgraded( + account?: null, + accountImplementation?: null + ): AccountUpgradedEventFilter; + }; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + }; +} diff --git a/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts b/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts new file mode 100644 index 00000000..5ea8f8f9 --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts @@ -0,0 +1,211 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface AccountRegistryMockInterface extends utils.Interface { + functions: { + "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; + "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; + "mockAccountOwners(address,address[])": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "isValidAccountSignature(address,bytes,bytes)" + | "isValidAccountSignature(address,bytes32,bytes)" + | "mockAccountOwners" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "mockAccountOwners", + values: [PromiseOrValue, PromiseOrValue[]] + ): string; + + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "mockAccountOwners", + data: BytesLike + ): Result; + + events: {}; +} + +export interface AccountRegistryMock extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AccountRegistryMockInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + mockAccountOwners( + account: PromiseOrValue, + owners: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mockAccountOwners( + account: PromiseOrValue, + owners: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mockAccountOwners( + account: PromiseOrValue, + owners: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mockAccountOwners( + account: PromiseOrValue, + owners: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mockAccountOwners( + account: PromiseOrValue, + owners: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts b/src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts new file mode 100644 index 00000000..9beadf80 --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts @@ -0,0 +1,82 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface GatewayRecipientInterface extends utils.Interface { + functions: { + "gateway()": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "gateway"): FunctionFragment; + + encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + + decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + + events: {}; +} + +export interface GatewayRecipient extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GatewayRecipientInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + gateway(overrides?: CallOverrides): Promise<[string]>; + }; + + gateway(overrides?: CallOverrides): Promise; + + callStatic: { + gateway(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + gateway(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + gateway(overrides?: CallOverrides): Promise; + }; +} diff --git a/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts b/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts new file mode 100644 index 00000000..71911fe5 --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts @@ -0,0 +1,921 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface PersonalAccountRegistryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "accountRegistry()": FunctionFragment; + "addAccountOwner(address,address)": FunctionFragment; + "computeAccountAddress(address)": FunctionFragment; + "deployAccount(address)": FunctionFragment; + "executeAccountTransaction(address,address,uint256,bytes)": FunctionFragment; + "gateway()": FunctionFragment; + "initialize(address,address)": FunctionFragment; + "isAccountDeployed(address)": FunctionFragment; + "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; + "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; + "refundAccountCall(address,address,uint256)": FunctionFragment; + "removeAccountOwner(address,address)": FunctionFragment; + "upgrade(address)": FunctionFragment; + "upgradeAccount(address)": FunctionFragment; + "verifyAccountOwner(address,address)": FunctionFragment; + "verifyAccountOwnerAtBlock(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "accountRegistry" + | "addAccountOwner" + | "computeAccountAddress" + | "deployAccount" + | "executeAccountTransaction" + | "gateway" + | "initialize" + | "isAccountDeployed" + | "isValidAccountSignature(address,bytes,bytes)" + | "isValidAccountSignature(address,bytes32,bytes)" + | "refundAccountCall" + | "removeAccountOwner" + | "upgrade" + | "upgradeAccount" + | "verifyAccountOwner" + | "verifyAccountOwnerAtBlock" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "accountRegistry", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "addAccountOwner", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "computeAccountAddress", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deployAccount", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "executeAccountTransaction", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "initialize", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isAccountDeployed", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "refundAccountCall", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "removeAccountOwner", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgrade", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeAccount", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "verifyAccountOwner", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "verifyAccountOwnerAtBlock", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "accountRegistry", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "addAccountOwner", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "computeAccountAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deployAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeAccountTransaction", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isAccountDeployed", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "refundAccountCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "removeAccountOwner", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgrade", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifyAccountOwner", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifyAccountOwnerAtBlock", + data: BytesLike + ): Result; + + events: { + "AccountCallRefunded(address,address,address,uint256)": EventFragment; + "AccountDeployed(address,address)": EventFragment; + "AccountImplementationUpdated(address)": EventFragment; + "AccountOwnerAdded(address,address)": EventFragment; + "AccountOwnerRemoved(address,address)": EventFragment; + "AccountRegistryUpdated(address)": EventFragment; + "AccountTransactionExecuted(address,address,uint256,bytes,bytes)": EventFragment; + "AccountUpgraded(address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountCallRefunded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "AccountImplementationUpdated" + ): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountOwnerAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountOwnerRemoved"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountRegistryUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountTransactionExecuted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AccountUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; +} + +export interface AccountCallRefundedEventObject { + account: string; + beneficiary: string; + token: string; + value: BigNumber; +} +export type AccountCallRefundedEvent = TypedEvent< + [string, string, string, BigNumber], + AccountCallRefundedEventObject +>; + +export type AccountCallRefundedEventFilter = + TypedEventFilter; + +export interface AccountDeployedEventObject { + account: string; + accountImplementation: string; +} +export type AccountDeployedEvent = TypedEvent< + [string, string], + AccountDeployedEventObject +>; + +export type AccountDeployedEventFilter = TypedEventFilter; + +export interface AccountImplementationUpdatedEventObject { + accountImplementation: string; +} +export type AccountImplementationUpdatedEvent = TypedEvent< + [string], + AccountImplementationUpdatedEventObject +>; + +export type AccountImplementationUpdatedEventFilter = + TypedEventFilter; + +export interface AccountOwnerAddedEventObject { + account: string; + owner: string; +} +export type AccountOwnerAddedEvent = TypedEvent< + [string, string], + AccountOwnerAddedEventObject +>; + +export type AccountOwnerAddedEventFilter = + TypedEventFilter; + +export interface AccountOwnerRemovedEventObject { + account: string; + owner: string; +} +export type AccountOwnerRemovedEvent = TypedEvent< + [string, string], + AccountOwnerRemovedEventObject +>; + +export type AccountOwnerRemovedEventFilter = + TypedEventFilter; + +export interface AccountRegistryUpdatedEventObject { + accountRegistry: string; +} +export type AccountRegistryUpdatedEvent = TypedEvent< + [string], + AccountRegistryUpdatedEventObject +>; + +export type AccountRegistryUpdatedEventFilter = + TypedEventFilter; + +export interface AccountTransactionExecutedEventObject { + account: string; + to: string; + value: BigNumber; + data: string; + response: string; +} +export type AccountTransactionExecutedEvent = TypedEvent< + [string, string, BigNumber, string, string], + AccountTransactionExecutedEventObject +>; + +export type AccountTransactionExecutedEventFilter = + TypedEventFilter; + +export interface AccountUpgradedEventObject { + account: string; + accountImplementation: string; +} +export type AccountUpgradedEvent = TypedEvent< + [string, string], + AccountUpgradedEventObject +>; + +export type AccountUpgradedEventFilter = TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface PersonalAccountRegistry extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: PersonalAccountRegistryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + accountRegistry(overrides?: CallOverrides): Promise<[string]>; + + addAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + computeAccountAddress( + saltOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + deployAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeAccountTransaction( + account: PromiseOrValue, + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + gateway(overrides?: CallOverrides): Promise<[string]>; + + initialize( + accountImplementation_: PromiseOrValue, + gateway_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isAccountDeployed( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + refundAccountCall( + account: PromiseOrValue, + token: PromiseOrValue, + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgrade( + accountImplementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + verifyAccountOwnerAtBlock( + account: PromiseOrValue, + owner: PromiseOrValue, + blockNumber: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + + addAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + computeAccountAddress( + saltOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeAccountTransaction( + account: PromiseOrValue, + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + gateway(overrides?: CallOverrides): Promise; + + initialize( + accountImplementation_: PromiseOrValue, + gateway_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isAccountDeployed( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + refundAccountCall( + account: PromiseOrValue, + token: PromiseOrValue, + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgrade( + accountImplementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + verifyAccountOwnerAtBlock( + account: PromiseOrValue, + owner: PromiseOrValue, + blockNumber: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + + addAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + computeAccountAddress( + saltOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployAccount( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeAccountTransaction( + account: PromiseOrValue, + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + gateway(overrides?: CallOverrides): Promise; + + initialize( + accountImplementation_: PromiseOrValue, + gateway_: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isAccountDeployed( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + refundAccountCall( + account: PromiseOrValue, + token: PromiseOrValue, + value: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgrade( + accountImplementation_: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeAccount( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + verifyAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + verifyAccountOwnerAtBlock( + account: PromiseOrValue, + owner: PromiseOrValue, + blockNumber: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AccountCallRefunded(address,address,address,uint256)"( + account?: null, + beneficiary?: null, + token?: null, + value?: null + ): AccountCallRefundedEventFilter; + AccountCallRefunded( + account?: null, + beneficiary?: null, + token?: null, + value?: null + ): AccountCallRefundedEventFilter; + + "AccountDeployed(address,address)"( + account?: null, + accountImplementation?: null + ): AccountDeployedEventFilter; + AccountDeployed( + account?: null, + accountImplementation?: null + ): AccountDeployedEventFilter; + + "AccountImplementationUpdated(address)"( + accountImplementation?: null + ): AccountImplementationUpdatedEventFilter; + AccountImplementationUpdated( + accountImplementation?: null + ): AccountImplementationUpdatedEventFilter; + + "AccountOwnerAdded(address,address)"( + account?: null, + owner?: null + ): AccountOwnerAddedEventFilter; + AccountOwnerAdded( + account?: null, + owner?: null + ): AccountOwnerAddedEventFilter; + + "AccountOwnerRemoved(address,address)"( + account?: null, + owner?: null + ): AccountOwnerRemovedEventFilter; + AccountOwnerRemoved( + account?: null, + owner?: null + ): AccountOwnerRemovedEventFilter; + + "AccountRegistryUpdated(address)"( + accountRegistry?: null + ): AccountRegistryUpdatedEventFilter; + AccountRegistryUpdated( + accountRegistry?: null + ): AccountRegistryUpdatedEventFilter; + + "AccountTransactionExecuted(address,address,uint256,bytes,bytes)"( + account?: null, + to?: null, + value?: null, + data?: null, + response?: null + ): AccountTransactionExecutedEventFilter; + AccountTransactionExecuted( + account?: null, + to?: null, + value?: null, + data?: null, + response?: null + ): AccountTransactionExecutedEventFilter; + + "AccountUpgraded(address,address)"( + account?: null, + accountImplementation?: null + ): AccountUpgradedEventFilter; + AccountUpgraded( + account?: null, + accountImplementation?: null + ): AccountUpgradedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + }; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + + addAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + computeAccountAddress( + saltOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeAccountTransaction( + account: PromiseOrValue, + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + gateway(overrides?: CallOverrides): Promise; + + initialize( + accountImplementation_: PromiseOrValue, + gateway_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isAccountDeployed( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + refundAccountCall( + account: PromiseOrValue, + token: PromiseOrValue, + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgrade( + accountImplementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + verifyAccountOwnerAtBlock( + account: PromiseOrValue, + owner: PromiseOrValue, + blockNumber: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + accountRegistry(overrides?: CallOverrides): Promise; + + addAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + computeAccountAddress( + saltOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeAccountTransaction( + account: PromiseOrValue, + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + gateway(overrides?: CallOverrides): Promise; + + initialize( + accountImplementation_: PromiseOrValue, + gateway_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isAccountDeployed( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + refundAccountCall( + account: PromiseOrValue, + token: PromiseOrValue, + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgrade( + accountImplementation_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeAccount( + account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + verifyAccountOwner( + account: PromiseOrValue, + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + verifyAccountOwnerAtBlock( + account: PromiseOrValue, + owner: PromiseOrValue, + blockNumber: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/backward_compatibility_helpers/index.ts b/src/contracts/src/backward_compatibility_helpers/index.ts new file mode 100644 index 00000000..64753414 --- /dev/null +++ b/src/contracts/src/backward_compatibility_helpers/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { Account } from "./Account"; +export type { AccountController } from "./AccountController"; +export type { AccountRegistryMock } from "./AccountRegistryMock"; +export type { GatewayRecipient } from "./GatewayRecipient"; +export type { PersonalAccountRegistry } from "./PersonalAccountRegistry"; diff --git a/src/contracts/src/index.ts b/src/contracts/src/index.ts new file mode 100644 index 00000000..86bafa2f --- /dev/null +++ b/src/contracts/src/index.ts @@ -0,0 +1,17 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as aa4337 from "./aa-4337"; +export type { aa4337 }; +import type * as backwardCompatibilityHelpers from "./backward_compatibility_helpers"; +export type { backwardCompatibilityHelpers }; +import type * as interfaces from "./interfaces"; +export type { interfaces }; +import type * as libs from "./libs"; +export type { libs }; +import type * as paymaster from "./paymaster"; +export type { paymaster }; +import type * as test from "./test"; +export type { test }; +import type * as wallet from "./wallet"; +export type { wallet }; diff --git a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts b/src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts new file mode 100644 index 00000000..0a403237 --- /dev/null +++ b/src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts @@ -0,0 +1,307 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface IPaymasterInterface extends utils.Interface { + functions: { + "checkSponsorFunds(address)": FunctionFragment; + "depositFunds()": FunctionFragment; + "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "postOp(uint8,bytes,uint256)": FunctionFragment; + "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "checkSponsorFunds" + | "depositFunds" + | "getHash" + | "postOp" + | "validatePaymasterUserOp" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "checkSponsorFunds", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositFunds", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getHash", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "postOp", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "validatePaymasterUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "checkSponsorFunds", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "depositFunds", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "validatePaymasterUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IPaymaster extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IPaymasterInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositFunds(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; + }; + + filters: {}; + + estimateGas: { + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts b/src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts new file mode 100644 index 00000000..38431b28 --- /dev/null +++ b/src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IPaymaster } from "./IPaymaster"; diff --git a/src/contracts/src/interfaces/IWhitelist.ts b/src/contracts/src/interfaces/IWhitelist.ts new file mode 100644 index 00000000..9eb860e4 --- /dev/null +++ b/src/contracts/src/interfaces/IWhitelist.ts @@ -0,0 +1,241 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface IWhitelistInterface extends utils.Interface { + functions: { + "add(address)": FunctionFragment; + "addBatch(address[])": FunctionFragment; + "check(address,address)": FunctionFragment; + "remove(address)": FunctionFragment; + "removeBatch(address[])": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "add" + | "addBatch" + | "check" + | "remove" + | "removeBatch" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "add", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "addBatch", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "check", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "remove", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "removeBatch", + values: [PromiseOrValue[]] + ): string; + + decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "removeBatch", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IWhitelist extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IWhitelistInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + add( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/interfaces/index.ts b/src/contracts/src/interfaces/index.ts new file mode 100644 index 00000000..24b5ed02 --- /dev/null +++ b/src/contracts/src/interfaces/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as iEtherspotPaymasterSol from "./IEtherspotPaymaster.sol"; +export type { iEtherspotPaymasterSol }; +export type { IWhitelist } from "./IWhitelist"; diff --git a/src/contracts/src/libs/ValidationConstants.ts b/src/contracts/src/libs/ValidationConstants.ts new file mode 100644 index 00000000..df4cd2b9 --- /dev/null +++ b/src/contracts/src/libs/ValidationConstants.ts @@ -0,0 +1,201 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface ValidationConstantsInterface extends utils.Interface { + functions: { + "ERC1271_INVALID_SIGNATURE()": FunctionFragment; + "ERC1271_VALID_MESSAGE_HASH_SIGNATURE()": FunctionFragment; + "ERC1271_VALID_MESSAGE_SIGNATURE()": FunctionFragment; + "ERC1820_ACCEPT_MAGIC()": FunctionFragment; + "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "ERC1271_INVALID_SIGNATURE" + | "ERC1271_VALID_MESSAGE_HASH_SIGNATURE" + | "ERC1271_VALID_MESSAGE_SIGNATURE" + | "ERC1820_ACCEPT_MAGIC" + | "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "ERC1271_INVALID_SIGNATURE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "ERC1271_VALID_MESSAGE_SIGNATURE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "ERC1820_ACCEPT_MAGIC", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "ERC1271_INVALID_SIGNATURE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ERC1271_VALID_MESSAGE_SIGNATURE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ERC1820_ACCEPT_MAGIC", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", + data: BytesLike + ): Result; + + events: {}; +} + +export interface ValidationConstants extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ValidationConstantsInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise<[string]>; + + ERC1271_VALID_MESSAGE_HASH_SIGNATURE( + overrides?: CallOverrides + ): Promise<[string]>; + + ERC1271_VALID_MESSAGE_SIGNATURE( + overrides?: CallOverrides + ): Promise<[string]>; + + ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise<[string]>; + + ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( + overrides?: CallOverrides + ): Promise<[string]>; + }; + + ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; + + ERC1271_VALID_MESSAGE_HASH_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1271_VALID_MESSAGE_SIGNATURE(overrides?: CallOverrides): Promise; + + ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; + + ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( + overrides?: CallOverrides + ): Promise; + + callStatic: { + ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; + + ERC1271_VALID_MESSAGE_HASH_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1271_VALID_MESSAGE_SIGNATURE(overrides?: CallOverrides): Promise; + + ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; + + ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; + + ERC1271_VALID_MESSAGE_HASH_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1271_VALID_MESSAGE_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; + + ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + ERC1271_INVALID_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1271_VALID_MESSAGE_HASH_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1271_VALID_MESSAGE_SIGNATURE( + overrides?: CallOverrides + ): Promise; + + ERC1820_ACCEPT_MAGIC( + overrides?: CallOverrides + ): Promise; + + ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/libs/index.ts b/src/contracts/src/libs/index.ts new file mode 100644 index 00000000..bb49b178 --- /dev/null +++ b/src/contracts/src/libs/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { ValidationConstants } from "./ValidationConstants"; diff --git a/src/contracts/src/paymaster/EtherspotPaymaster.ts b/src/contracts/src/paymaster/EtherspotPaymaster.ts new file mode 100644 index 00000000..c84d63c8 --- /dev/null +++ b/src/contracts/src/paymaster/EtherspotPaymaster.ts @@ -0,0 +1,1110 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface EtherspotPaymasterInterface extends utils.Interface { + functions: { + "add(address)": FunctionFragment; + "addBatch(address[])": FunctionFragment; + "addStake(uint32)": FunctionFragment; + "check(address,address)": FunctionFragment; + "checkSponsorFunds(address)": FunctionFragment; + "deposit()": FunctionFragment; + "depositFunds()": FunctionFragment; + "entryPoint()": FunctionFragment; + "getDeposit()": FunctionFragment; + "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)": FunctionFragment; + "owner()": FunctionFragment; + "parsePaymasterAndData(bytes)": FunctionFragment; + "postOp(uint8,bytes,uint256)": FunctionFragment; + "remove(address)": FunctionFragment; + "removeBatch(address[])": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "senderNonce(address)": FunctionFragment; + "sponsorFunds(address)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "unlockStake()": FunctionFragment; + "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "whitelist(address,address)": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "add" + | "addBatch" + | "addStake" + | "check" + | "checkSponsorFunds" + | "deposit" + | "depositFunds" + | "entryPoint" + | "getDeposit" + | "getHash" + | "owner" + | "parsePaymasterAndData" + | "postOp" + | "remove" + | "removeBatch" + | "renounceOwnership" + | "senderNonce" + | "sponsorFunds" + | "transferOwnership" + | "unlockStake" + | "validatePaymasterUserOp" + | "whitelist" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "add", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "addBatch", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "check", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "checkSponsorFunds", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData( + functionFragment: "depositFunds", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getHash", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "parsePaymasterAndData", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "postOp", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "remove", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "removeBatch", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "senderNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "sponsorFunds", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "validatePaymasterUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "whitelist", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "checkSponsorFunds", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "depositFunds", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "parsePaymasterAndData", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "removeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "senderNonce", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "sponsorFunds", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validatePaymasterUserOp", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "AddedBatchToWhitelist(address,address[])": EventFragment; + "AddedToWhitelist(address,address)": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + "RemovedBatchFromWhitelist(address,address[])": EventFragment; + "RemovedFromWhitelist(address,address)": EventFragment; + "SponsorSuccessful(address,address,bytes)": EventFragment; + "SponsorUnsuccessful(address,address,bytes)": EventFragment; + "WhitelistInitialized(address,string)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AddedBatchToWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AddedToWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RemovedBatchFromWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RemovedFromWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SponsorSuccessful"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SponsorUnsuccessful"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WhitelistInitialized"): EventFragment; +} + +export interface AddedBatchToWhitelistEventObject { + paymaster: string; + accounts: string[]; +} +export type AddedBatchToWhitelistEvent = TypedEvent< + [string, string[]], + AddedBatchToWhitelistEventObject +>; + +export type AddedBatchToWhitelistEventFilter = + TypedEventFilter; + +export interface AddedToWhitelistEventObject { + paymaster: string; + account: string; +} +export type AddedToWhitelistEvent = TypedEvent< + [string, string], + AddedToWhitelistEventObject +>; + +export type AddedToWhitelistEventFilter = + TypedEventFilter; + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface RemovedBatchFromWhitelistEventObject { + paymaster: string; + accounts: string[]; +} +export type RemovedBatchFromWhitelistEvent = TypedEvent< + [string, string[]], + RemovedBatchFromWhitelistEventObject +>; + +export type RemovedBatchFromWhitelistEventFilter = + TypedEventFilter; + +export interface RemovedFromWhitelistEventObject { + paymaster: string; + account: string; +} +export type RemovedFromWhitelistEvent = TypedEvent< + [string, string], + RemovedFromWhitelistEventObject +>; + +export type RemovedFromWhitelistEventFilter = + TypedEventFilter; + +export interface SponsorSuccessfulEventObject { + paymaster: string; + sender: string; + userOpHash: string; +} +export type SponsorSuccessfulEvent = TypedEvent< + [string, string, string], + SponsorSuccessfulEventObject +>; + +export type SponsorSuccessfulEventFilter = + TypedEventFilter; + +export interface SponsorUnsuccessfulEventObject { + paymaster: string; + sender: string; + userOpHash: string; +} +export type SponsorUnsuccessfulEvent = TypedEvent< + [string, string, string], + SponsorUnsuccessfulEventObject +>; + +export type SponsorUnsuccessfulEventFilter = + TypedEventFilter; + +export interface WhitelistInitializedEventObject { + owner: string; + version: string; +} +export type WhitelistInitializedEvent = TypedEvent< + [string, string], + WhitelistInitializedEventObject +>; + +export type WhitelistInitializedEventFilter = + TypedEventFilter; + +export interface EtherspotPaymaster extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EtherspotPaymasterInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + sponsorFunds( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + sponsorFunds( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + add( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit(overrides?: CallOverrides): Promise; + + depositFunds(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [number, number, string] & { + validUntil: number; + validAfter: number; + signature: string; + } + >; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + sponsorFunds( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, BigNumber] & { context: string; validationData: BigNumber } + >; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AddedBatchToWhitelist(address,address[])"( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): AddedBatchToWhitelistEventFilter; + AddedBatchToWhitelist( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): AddedBatchToWhitelistEventFilter; + + "AddedToWhitelist(address,address)"( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): AddedToWhitelistEventFilter; + AddedToWhitelist( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): AddedToWhitelistEventFilter; + + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + + "RemovedBatchFromWhitelist(address,address[])"( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): RemovedBatchFromWhitelistEventFilter; + RemovedBatchFromWhitelist( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): RemovedBatchFromWhitelistEventFilter; + + "RemovedFromWhitelist(address,address)"( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): RemovedFromWhitelistEventFilter; + RemovedFromWhitelist( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): RemovedFromWhitelistEventFilter; + + "SponsorSuccessful(address,address,bytes)"( + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorSuccessfulEventFilter; + SponsorSuccessful( + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorSuccessfulEventFilter; + + "SponsorUnsuccessful(address,address,bytes)"( + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorUnsuccessfulEventFilter; + SponsorUnsuccessful( + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorUnsuccessfulEventFilter; + + "WhitelistInitialized(address,string)"( + owner?: null, + version?: null + ): WhitelistInitializedEventFilter; + WhitelistInitialized( + owner?: null, + version?: null + ): WhitelistInitializedEventFilter; + }; + + estimateGas: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + sponsorFunds( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + checkSponsorFunds( + _sponsor: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + depositFunds( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getHash( + userOp: UserOperationStruct, + validUntil: PromiseOrValue, + validAfter: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + parsePaymasterAndData( + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + postOp( + mode: PromiseOrValue, + context: PromiseOrValue, + actualGasCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + senderNonce( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + sponsorFunds( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validatePaymasterUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + maxCost: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/paymaster/Whitelist.ts b/src/contracts/src/paymaster/Whitelist.ts new file mode 100644 index 00000000..6b832369 --- /dev/null +++ b/src/contracts/src/paymaster/Whitelist.ts @@ -0,0 +1,499 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface WhitelistInterface extends utils.Interface { + functions: { + "add(address)": FunctionFragment; + "addBatch(address[])": FunctionFragment; + "check(address,address)": FunctionFragment; + "owner()": FunctionFragment; + "remove(address)": FunctionFragment; + "removeBatch(address[])": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "whitelist(address,address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "add" + | "addBatch" + | "check" + | "owner" + | "remove" + | "removeBatch" + | "renounceOwnership" + | "transferOwnership" + | "whitelist" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "add", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "addBatch", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "check", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "remove", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "removeBatch", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "whitelist", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "removeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + + events: { + "AddedBatchToWhitelist(address,address[])": EventFragment; + "AddedToWhitelist(address,address)": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + "RemovedBatchFromWhitelist(address,address[])": EventFragment; + "RemovedFromWhitelist(address,address)": EventFragment; + "WhitelistInitialized(address,string)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AddedBatchToWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AddedToWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RemovedBatchFromWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RemovedFromWhitelist"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WhitelistInitialized"): EventFragment; +} + +export interface AddedBatchToWhitelistEventObject { + paymaster: string; + accounts: string[]; +} +export type AddedBatchToWhitelistEvent = TypedEvent< + [string, string[]], + AddedBatchToWhitelistEventObject +>; + +export type AddedBatchToWhitelistEventFilter = + TypedEventFilter; + +export interface AddedToWhitelistEventObject { + paymaster: string; + account: string; +} +export type AddedToWhitelistEvent = TypedEvent< + [string, string], + AddedToWhitelistEventObject +>; + +export type AddedToWhitelistEventFilter = + TypedEventFilter; + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface RemovedBatchFromWhitelistEventObject { + paymaster: string; + accounts: string[]; +} +export type RemovedBatchFromWhitelistEvent = TypedEvent< + [string, string[]], + RemovedBatchFromWhitelistEventObject +>; + +export type RemovedBatchFromWhitelistEventFilter = + TypedEventFilter; + +export interface RemovedFromWhitelistEventObject { + paymaster: string; + account: string; +} +export type RemovedFromWhitelistEvent = TypedEvent< + [string, string], + RemovedFromWhitelistEventObject +>; + +export type RemovedFromWhitelistEventFilter = + TypedEventFilter; + +export interface WhitelistInitializedEventObject { + owner: string; + version: string; +} +export type WhitelistInitializedEvent = TypedEvent< + [string, string], + WhitelistInitializedEventObject +>; + +export type WhitelistInitializedEventFilter = + TypedEventFilter; + +export interface Whitelist extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: WhitelistInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + add( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + remove( + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AddedBatchToWhitelist(address,address[])"( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): AddedBatchToWhitelistEventFilter; + AddedBatchToWhitelist( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): AddedBatchToWhitelistEventFilter; + + "AddedToWhitelist(address,address)"( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): AddedToWhitelistEventFilter; + AddedToWhitelist( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): AddedToWhitelistEventFilter; + + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + + "RemovedBatchFromWhitelist(address,address[])"( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): RemovedBatchFromWhitelistEventFilter; + RemovedBatchFromWhitelist( + paymaster?: PromiseOrValue | null, + accounts?: PromiseOrValue[] | null + ): RemovedBatchFromWhitelistEventFilter; + + "RemovedFromWhitelist(address,address)"( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): RemovedFromWhitelistEventFilter; + RemovedFromWhitelist( + paymaster?: PromiseOrValue | null, + account?: PromiseOrValue | null + ): RemovedFromWhitelistEventFilter; + + "WhitelistInitialized(address,string)"( + owner?: null, + version?: null + ): WhitelistInitializedEventFilter; + WhitelistInitialized( + owner?: null, + version?: null + ): WhitelistInitializedEventFilter; + }; + + estimateGas: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + add( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + check( + _sponsor: PromiseOrValue, + _account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + remove( + _account: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeBatch( + _accounts: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + whitelist( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/paymaster/index.ts b/src/contracts/src/paymaster/index.ts new file mode 100644 index 00000000..17b470b2 --- /dev/null +++ b/src/contracts/src/paymaster/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { EtherspotPaymaster } from "./EtherspotPaymaster"; +export type { Whitelist } from "./Whitelist"; diff --git a/src/contracts/src/test/TestEtherspotWallet.ts b/src/contracts/src/test/TestEtherspotWallet.ts new file mode 100644 index 00000000..ab4e275a --- /dev/null +++ b/src/contracts/src/test/TestEtherspotWallet.ts @@ -0,0 +1,1087 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface TestEtherspotWalletInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "initialize" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface TestEtherspotWallet extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestEtherspotWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/test/index.ts b/src/contracts/src/test/index.ts new file mode 100644 index 00000000..8f0b81fd --- /dev/null +++ b/src/contracts/src/test/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { TestEtherspotWallet } from "./TestEtherspotWallet"; diff --git a/src/contracts/src/wallet/EtherspotWallet.ts b/src/contracts/src/wallet/EtherspotWallet.ts new file mode 100644 index 00000000..74d4ab6b --- /dev/null +++ b/src/contracts/src/wallet/EtherspotWallet.ts @@ -0,0 +1,1087 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface EtherspotWalletInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "addDeposit()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "initialize(address,address,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "updateRegistry(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "addDeposit" + | "canImplementInterfaceForAddress" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "initialize" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "nonce" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "registry" + | "tokensReceived" + | "updateEntryPoint" + | "updateRegistry" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateRegistry", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateRegistry", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "ERC777Received(address,address,uint256)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address,address)": EventFragment; + "Initialized(uint8)": EventFragment; + "RegistryChanged(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + registry: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface RegistryChangedEventObject { + oldRegistry: string; + newRegistry: string; +} +export type RegistryChangedEvent = TypedEvent< + [string, string], + RegistryChangedEventObject +>; + +export type RegistryChangedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface EtherspotWallet extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EtherspotWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address,address)"( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + registry?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "RegistryChanged(address,address)"( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + RegistryChanged( + oldRegistry?: null, + newRegistry?: null + ): RegistryChangedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + initialize( + anEntryPoint: PromiseOrValue, + anRegistry: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateRegistry( + _newRegistry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/wallet/EtherspotWalletFactory.ts b/src/contracts/src/wallet/EtherspotWalletFactory.ts new file mode 100644 index 00000000..57ed3541 --- /dev/null +++ b/src/contracts/src/wallet/EtherspotWalletFactory.ts @@ -0,0 +1,203 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; + +export interface EtherspotWalletFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,address,address,uint256)": FunctionFragment; + "getAddress(address,address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface EtherspotWalletFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EtherspotWalletFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAddress( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddress( + _entryPoint: PromiseOrValue, + _registry: PromiseOrValue, + owner: PromiseOrValue, + salt: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/wallet/helpers/AccountRegistry.ts b/src/contracts/src/wallet/helpers/AccountRegistry.ts new file mode 100644 index 00000000..de8173a6 --- /dev/null +++ b/src/contracts/src/wallet/helpers/AccountRegistry.ts @@ -0,0 +1,169 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface AccountRegistryInterface extends utils.Interface { + functions: { + "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; + "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "isValidAccountSignature(address,bytes,bytes)" + | "isValidAccountSignature(address,bytes32,bytes)" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidAccountSignature(address,bytes32,bytes)", + data: BytesLike + ): Result; + + events: {}; +} + +export interface AccountRegistry extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AccountRegistryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + "isValidAccountSignature(address,bytes,bytes)"( + account: PromiseOrValue, + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidAccountSignature(address,bytes32,bytes)"( + account: PromiseOrValue, + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/wallet/helpers/WalletCompatability.ts b/src/contracts/src/wallet/helpers/WalletCompatability.ts new file mode 100644 index 00000000..3ddace95 --- /dev/null +++ b/src/contracts/src/wallet/helpers/WalletCompatability.ts @@ -0,0 +1,436 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface WalletCompatabilityInterface extends utils.Interface { + functions: { + "_registry()": FunctionFragment; + "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes,bytes)": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "registry()": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "_registry" + | "canImplementInterfaceForAddress" + | "isValidSignature(bytes32,bytes)" + | "isValidSignature(bytes,bytes)" + | "onERC1155Received" + | "onERC721Received" + | "registry" + | "tokensReceived" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "_registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "canImplementInterfaceForAddress", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes32,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature(bytes,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData(functionFragment: "registry", values?: undefined): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "canImplementInterfaceForAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes32,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature(bytes,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + + events: { + "ERC777Received(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; +} + +export interface ERC777ReceivedEventObject { + from: string; + to: string; + amount: BigNumber; +} +export type ERC777ReceivedEvent = TypedEvent< + [string, string, BigNumber], + ERC777ReceivedEventObject +>; + +export type ERC777ReceivedEventFilter = TypedEventFilter; + +export interface WalletCompatability extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: WalletCompatabilityInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + _registry(overrides?: CallOverrides): Promise<[string]>; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + registry(overrides?: CallOverrides): Promise<[string]>; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + _registry(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + _registry(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "ERC777Received(address,address,uint256)"( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + ERC777Received( + from?: null, + to?: null, + amount?: null + ): ERC777ReceivedEventFilter; + }; + + estimateGas: { + _registry(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + _registry(overrides?: CallOverrides): Promise; + + canImplementInterfaceForAddress( + interfaceHash: PromiseOrValue, + addr: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes32,bytes)"( + messageHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "isValidSignature(bytes,bytes)"( + message: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registry(overrides?: CallOverrides): Promise; + + tokensReceived( + arg0: PromiseOrValue, + _from: PromiseOrValue, + _to: PromiseOrValue, + _amount: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/wallet/helpers/index.ts b/src/contracts/src/wallet/helpers/index.ts new file mode 100644 index 00000000..384818c5 --- /dev/null +++ b/src/contracts/src/wallet/helpers/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { AccountRegistry } from "./AccountRegistry"; +export type { WalletCompatability } from "./WalletCompatability"; diff --git a/src/contracts/src/wallet/index.ts b/src/contracts/src/wallet/index.ts new file mode 100644 index 00000000..2bc9eebc --- /dev/null +++ b/src/contracts/src/wallet/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as helpers from "./helpers"; +export type { helpers }; +export type { EtherspotWallet } from "./EtherspotWallet"; +export type { EtherspotWalletFactory } from "./EtherspotWalletFactory"; diff --git a/src/sdk.ts b/src/sdk.ts index ccd4e27a..78f09fee 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,11 +1,11 @@ import { Wallet, providers } from 'ethers'; -import { EtherspotAccountAPI, HttpRpcClient } from './base'; +import { EtherspotWalletAPI, HttpRpcClient } from './base'; import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; -import { UserOperationStruct } from './contracts'; +import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { getGasFee } from './common'; export class LiteSdk { - private etherspotAccount: EtherspotAccountAPI; + private EtherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; constructor( @@ -13,52 +13,50 @@ export class LiteSdk { bundlerRpc: string, chainId: number, entryPoint: string, - accountFactory: string + registry: string, + accountFactory: string, ) { - this.etherspotAccount = new EtherspotAccountAPI({ + this.EtherspotWallet = new EtherspotWalletAPI({ provider: wallet.provider, owner: wallet, index: 0, entryPointAddress: entryPoint, - factoryAddress: accountFactory + registryAddress: registry, + factoryAddress: accountFactory, }); this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); } async getCounterFactualAddress(): Promise { - return this.etherspotAccount.getCounterFactualAddress(); + return this.EtherspotWallet.getCounterFactualAddress(); } - async getUserOpReceipt( - userOpHash: string, - timeout = 30000, - interval = 5000 - ): Promise { - const block = await this.wallet.provider.getBlock('latest') - const endtime = Date.now() + timeout + async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { + const block = await this.wallet.provider.getBlock('latest'); + const endtime = Date.now() + timeout; while (Date.now() < endtime) { - const events = await this.etherspotAccount.epView.queryFilter( - this.etherspotAccount.epView.filters.UserOperationEvent(userOpHash), - Math.max(100, block.number - 100) - ) + const events = await this.EtherspotWallet.epView.queryFilter( + this.EtherspotWallet.epView.filters.UserOperationEvent(userOpHash), + Math.max(100, block.number - 100), + ); if (events.length > 0) { - return events[0].transactionHash + return events[0].transactionHash; } - await new Promise((resolve) => setTimeout(resolve, interval)) + await new Promise((resolve) => setTimeout(resolve, interval)); } - return null + return null; } async sign(tx: TransactionDetailsForUserOp) { const gas = await this.getGasFee(); - return this.etherspotAccount.createSignedUserOp({ + return this.EtherspotWallet.createSignedUserOp({ ...tx, - ...gas + ...gas, }); } async getHash(userOp: UserOperationStruct) { - return this.etherspotAccount.getUserOpHash(userOp); + return this.EtherspotWallet.getUserOpHash(userOp); } async send(userOp: UserOperationStruct) { From 69c73367827019377d6a3b1d8e27e906f2bb96f2 Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:54:33 +0000 Subject: [PATCH 02/20] Removal of changes to UserOpType in ERC4337Utils.ts --- src/common/ERC4337Utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/ERC4337Utils.ts b/src/common/ERC4337Utils.ts index 242d75d2..62c7c2b0 100644 --- a/src/common/ERC4337Utils.ts +++ b/src/common/ERC4337Utils.ts @@ -11,7 +11,7 @@ if (UserOpType == null) { throw new Error( `unable to find method ${validateUserOpMethod} in EP ${entryPointAbi .filter((x) => x.type === 'function') - .map((x) => x[0].name) + .map((x) => x.name) .join(',')}`, ); } From 4927eb2ebacb1b6d5920e9b52924e26467b99cdb Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Mon, 20 Mar 2023 12:02:38 +0000 Subject: [PATCH 03/20] WIP - testing initcode example --- examples/00-test-initcode.ts | 54 +++++++ .../{1-get-address.ts => 01-get-address.ts} | 14 +- ...transfer-funds.ts => 02-transfer-funds.ts} | 19 ++- examples/03-batch-erc20-transfer.ts | 67 ++++++++ examples/04-batch-transfer.ts | 54 +++++++ package-lock.json | 152 ++++++++++++++++++ package.json | 13 +- src/base/BLSAccountAPI.ts | 140 ++++++++-------- src/base/BaseAccountAPI.ts | 2 + src/base/ClientConfig.ts | 14 +- src/base/EtherspotWalletAPI.ts | 15 ++ src/base/EtherspotWalletFactory.ts | 24 +++ src/base/HttpRpcClient.ts | 85 +++++----- src/base/PaymasterAPI.ts | 6 +- src/base/PersonalAccountRegistryAPI.ts | 49 ++++++ src/base/Provider.ts | 1 + src/base/VerifyingPaymasterAPI.ts | 63 ++++++++ src/base/index.ts | 1 + src/common/ERC4337Utils.ts | 7 +- src/common/OperationUtils.ts | 25 +++ src/common/getGasFee.ts | 33 ++-- src/common/getHttpRpcClient.ts | 7 + .../aa-4337/bls/BLSAccountFactory__factory.ts | 130 +++++++-------- src/helpers/ERC20_ABI.ts | 7 + src/sdk.ts | 28 +++- 25 files changed, 774 insertions(+), 236 deletions(-) create mode 100644 examples/00-test-initcode.ts rename examples/{1-get-address.ts => 01-get-address.ts} (54%) rename examples/{2-transfer-funds.ts => 02-transfer-funds.ts} (59%) create mode 100644 examples/03-batch-erc20-transfer.ts create mode 100644 examples/04-batch-transfer.ts create mode 100644 src/base/EtherspotWalletFactory.ts create mode 100644 src/base/PersonalAccountRegistryAPI.ts create mode 100644 src/base/VerifyingPaymasterAPI.ts create mode 100644 src/common/OperationUtils.ts create mode 100644 src/common/getHttpRpcClient.ts create mode 100644 src/helpers/ERC20_ABI.ts diff --git a/examples/00-test-initcode.ts b/examples/00-test-initcode.ts new file mode 100644 index 00000000..a2f560b9 --- /dev/null +++ b/examples/00-test-initcode.ts @@ -0,0 +1,54 @@ +import { Contract, Wallet, ethers, providers } from 'ethers'; +import { LiteSdk } from '../src'; +import { PersonalAccountRegistry__factory } from '../src/contracts'; +import { PersonalAccountRegistry } from '../src/contracts'; + +// mumbai contract addresses +const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; +const REGISTRY_ADDRESS = '0x7EB3A038F25B9F32f8e19A7F0De83D4916030eFa'; +// const ACCOUNT_FACTORY_ADDRESS = ''; + +async function main() { + // initializating sdk... + const provider = new providers.JsonRpcProvider('ALCHEMY_API_URL+KEY'); + const wallet = new Wallet('', provider); + const sdk = new LiteSdk( + wallet, // wallet + process.env.BUNDLER_URL, // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + REGISTRY_ADDRESS, // personal account registry + REGISTRY_ADDRESS, // personal account registry (wallet factory) + ); + + // sanity check for RPC provider + console.log(await provider.getSigner()); + console.log(`Wallet address: ${wallet.address}`); + + console.log('here 2'); + + // sanity check for init code + const initCode = await sdk.getAccountInitCodePAR(); + console.log(`initcode: ${initCode}`); + + console.log('here 3'); + + // creating and signing userOp... + const userOp = await sdk.sign({ + target: '0x3D8b4eE7a40d8dA040Ecd1D276219Ff7ec6B986a', // recipient + value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, + data: '0x', // calldata is empty since we just want to transfer ether + }); + userOp.initCode = sdk.getAccountInitCodePAR(); + console.log(`Signed userOp: ${userOp}`); + + console.log('here 4'); + + // sending to the bundler... + const txHash = await sdk.send(userOp); + console.log(`Transaction hash: ${txHash}`); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/1-get-address.ts b/examples/01-get-address.ts similarity index 54% rename from examples/1-get-address.ts rename to examples/01-get-address.ts index f9426ef6..91ac5fa0 100644 --- a/examples/1-get-address.ts +++ b/examples/01-get-address.ts @@ -2,15 +2,17 @@ import { Wallet, providers } from 'ethers'; import { LiteSdk } from '../src'; async function main() { + // initializating sdk... const provider = new providers.JsonRpcProvider(process.env.PROVIDER); const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + // const wallet = Wallet.createRandom(); const sdk = new LiteSdk( - wallet, - 'mumbai-aa.etherspot.dev', - 80001, - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', - '0xPeRs0Na1AcC0Un7R3g157ry01233444555666777', - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', + wallet, // wallet + 'mumbai-aa.etherspot.dev', // bundler rpc + 80001, // chain id + '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', // entry point + '', // personal account registry + '', // etherspot wallet factory ); const address = await sdk.getCounterFactualAddress(); console.log(`AA-Wallet address: ${address}`); diff --git a/examples/2-transfer-funds.ts b/examples/02-transfer-funds.ts similarity index 59% rename from examples/2-transfer-funds.ts rename to examples/02-transfer-funds.ts index 1db4ccc8..78f30cea 100644 --- a/examples/2-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,22 +1,27 @@ import { Wallet, ethers, providers } from 'ethers'; import { LiteSdk } from '../src'; +// mumbai contract addresses +const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; +const REGISTRY_ADDRESS = '0x'; // random for now, can update via contract +const ACCOUNT_FACTORY_ADDRESS = ''; + async function main() { // initializating sdk... const provider = new providers.JsonRpcProvider(process.env.PROVIDER); const wallet = new Wallet(process.env.PRIVATE_KEY, provider); const sdk = new LiteSdk( - wallet, - 'mumbai-aa.etherspot.dev', - 80001, - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', - '0xPeRs0Na1AcC0Un7R3g157ry01233444555666777', - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', + wallet, // wallet + process.env.BUNDLER_URL, // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + REGISTRY_ADDRESS, // personal account registry + ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory ); // creating and signing userOp... const userOp = await sdk.sign({ - target: '0x7220A66Ed094F0C7c04e221ff5b436bD304776A0', // recipient + target: '', // recipient value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, data: '0x', // calldata is empty since we just want to transfer ether }); diff --git a/examples/03-batch-erc20-transfer.ts b/examples/03-batch-erc20-transfer.ts new file mode 100644 index 00000000..ba6e39b1 --- /dev/null +++ b/examples/03-batch-erc20-transfer.ts @@ -0,0 +1,67 @@ +import { Wallet, ethers, providers } from 'ethers'; +import { getVerifyingPaymaster } from 'src/base/VerifyingPaymasterAPI'; +import { getGasFee } from 'src/common'; +import { ERC20_ABI } from 'src/helpers/ERC20_ABI'; +import { printOp } from 'src/common/OperationUtils'; +import { getHttpRpcClient } from 'src/common/getHttpRpcClient'; +import { LiteSdk } from '../src'; + +// mumbai contract addresses +const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; +const REGISTRY_ADDRESS = ''; +const ACCOUNT_FACTORY_ADDRESS = ''; + +const token = ''; // erc20 token address +const t = ['', '', '']; // recipient address array +const amount = '1'; // transfer amount +const paymaster = false; // use paymaster? + +async function main() { + // initializating sdk... + const provider = new providers.JsonRpcProvider(process.env.PROVIDER); + // logic for paymaster implementation + // const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; + const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + const sdk = new LiteSdk( + wallet, // wallet + process.env.BUNDLER_URL, // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + REGISTRY_ADDRESS, // personal account registry + ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory + ); + + const sender = await sdk.getCounterFactualAddress(); + const tkn = ethers.utils.getAddress(token); + const erc20 = new ethers.Contract(tkn, ERC20_ABI, provider); + const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); + const amt = ethers.utils.parseUnits(amount, dec); + + let dest: Array = []; + let data: Array = []; + t.map((addr) => addr.trim()).forEach((addr) => { + dest = [...dest, erc20.address]; + data = [...data, erc20.interface.encodeFunctionData('transfer', [ethers.utils.getAddress(addr), amt])]; + }); + console.log(`Batch transferring ${amount} ${sym} to ${dest.length} receipients... `); + + const ac = await sdk.getAccountContract(); + const op = await sdk.sign({ + target: sender, + data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), + ...(await getGasFee(provider)), + }); + console.log(`Signed UserOp: ${await printOp(op)}`); + + const client = await getHttpRpcClient(provider, process.env.BUNDLER_URL, ENTRYPOINT_ADDRESS); + const userOpHash = await client.sendUserOpToBundler(op); + console.log(`UserOperation hash: ${userOpHash}`); + + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(userOpHash); + console.log(`Transaction hash: ${txHash}`); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/04-batch-transfer.ts b/examples/04-batch-transfer.ts new file mode 100644 index 00000000..96df2522 --- /dev/null +++ b/examples/04-batch-transfer.ts @@ -0,0 +1,54 @@ +import { Wallet, ethers, providers } from 'ethers'; +import { getVerifyingPaymaster } from 'src/base/VerifyingPaymasterAPI'; +import { getGasFee } from '../src/common/getGasFee'; +import { printOp } from '../src/common/OperationUtils'; +import { getHttpRpcClient } from '../src/common/getHttpRpcClient'; +import { LiteSdk } from '../src'; + +// mumbai contract addresses +const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; +const REGISTRY_ADDRESS = ''; +const ACCOUNT_FACTORY_ADDRESS = ''; + +export default async function main() { + const t = ['', '', '']; // recipient address array + const amount = '1'; // transfer amount + const paymaster = false; // use paymaster? + const provider = new ethers.providers.JsonRpcProvider(process.env.PROVIDER); + // logic for paymaster implementation + // const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; + const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + const sdk = new LiteSdk( + wallet, // wallet + 'mumbai-aa.etherspot.dev', // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + REGISTRY_ADDRESS, // personal account registry + ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory + ); + const sender = await sdk.getCounterFactualAddress(); + + const ac = await sdk.getAccountContract(); + const value = ethers.utils.parseEther(amount); + let dest: Array = []; + let data: Array = []; + t.map((addr) => addr.trim()).forEach((addr) => { + dest = [...dest, sender]; + data = [...data, ac.interface.encodeFunctionData('execute', [ethers.utils.getAddress(addr), value, '0x'])]; + }); + + const op = await sdk.sign({ + target: sender, + data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), + ...(await getGasFee(provider)), + }); + console.log(`Signed UserOp: ${await printOp(op)}`); + + const client = await getHttpRpcClient(provider, process.env.BUNDLER_URL, ENTRYPOINT_ADDRESS); + const uoHash = await client.sendUserOpToBundler(op); + console.log(`UserOpHash: ${uoHash}`); + + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(uoHash); + console.log(`Transaction hash: ${txHash}`); +} diff --git a/package-lock.json b/package-lock.json index cb73e452..c201a633 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@thehubbleproject/bls": "^0.5.1", + "axios": "^1.3.4", "ethers": "^5.7.0" }, "devDependencies": { @@ -983,6 +984,21 @@ "node": ">=4" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1092,6 +1108,17 @@ "dev": true, "peer": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1149,6 +1176,14 @@ "dev": true, "peer": true }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1558,6 +1593,38 @@ "dev": true, "peer": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1961,6 +2028,25 @@ "node": ">=8.9.0" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -2148,6 +2234,11 @@ "node": ">=0.4.0" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -3238,6 +3329,21 @@ "dev": true, "peer": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3335,6 +3441,14 @@ "dev": true, "peer": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3380,6 +3494,11 @@ "dev": true, "peer": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -3705,6 +3824,21 @@ "dev": true, "peer": true }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4026,6 +4160,19 @@ "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.0.6.tgz", "integrity": "sha512-/KYSug255SQoOcrQBxkHeAub9qOcJD3B/n5livcsGKsbv4TOiefNmUAwpMP0Vea5AVBUApolr+iF0GqZixns1w==" }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4174,6 +4321,11 @@ "dev": true, "peer": true }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", diff --git a/package.json b/package.json index 154ec983..d503bdef 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "types": "./dist/index.d.ts", "scripts": { "start": "exit 1", - "01-get-address": "./node_modules/.bin/ts-node ./examples/1-get-address", + "00-test-initcode": "./node_modules/.bin/ts-node ./examples/00-test-initcode", + "01-get-address": "./node_modules/.bin/ts-node ./examples/01-get-address", + "02-transfer-funds": "./node_modules/.bin/ts-node ./examples/02-transfer-funds", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", @@ -36,14 +38,15 @@ "url": "https://github.com/etherspot/etherspot-lite-sdk/issues" }, "dependencies": { - "ethers": "^5.7.0", - "@thehubbleproject/bls": "^0.5.1" + "@thehubbleproject/bls": "^0.5.1", + "axios": "^1.3.4", + "ethers": "^5.7.0" }, "devDependencies": { "@types/node": "13.13.9", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", - "typescript": "4.5.2", - "ts-node": "8.10.2" + "ts-node": "8.10.2", + "typescript": "4.5.2" } } diff --git a/src/base/BLSAccountAPI.ts b/src/base/BLSAccountAPI.ts index 6747bdba..239f2873 100644 --- a/src/base/BLSAccountAPI.ts +++ b/src/base/BLSAccountAPI.ts @@ -1,124 +1,114 @@ -import { BigNumber, BigNumberish, ethers } from 'ethers' +import { BigNumber, BigNumberish, ethers } from 'ethers'; import { BLSAccount, BLSAccount__factory, BLSAccountFactory, BLSAccountFactory__factory, BLSSignatureAggregator__factory, - UserOperationStruct -} from '../contracts' + UserOperationStruct, +} from '../contracts'; -import { - BlsSignerFactory -} from '@thehubbleproject/bls/dist/signer' -import { arrayify, hexConcat, keccak256, resolveProperties } from 'ethers/lib/utils' -import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI' -import { solG2 } from '@thehubbleproject/bls/dist/mcl' +import { BlsSignerFactory } from '@thehubbleproject/bls/dist/signer'; +import { arrayify, hexConcat, keccak256, resolveProperties } from 'ethers/lib/utils'; +import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI'; +import { solG2 } from '@thehubbleproject/bls/dist/mcl'; -const BLS_DOMAIN = arrayify(keccak256(Buffer.from('eip4337.bls.domain'))) +const BLS_DOMAIN = arrayify(keccak256(Buffer.from('eip4337.bls.domain'))); export interface BLSAccountApiParams extends BaseApiParams { - owner: string - aggregatorAddress: string - factoryAddress: string - index?: number + owner: string; + aggregatorAddress: string; + factoryAddress: string; + index?: number; } -type Signer = ReturnType +type Signer = ReturnType; export class BLSAccountAPI extends BaseAccountAPI { - factory?: BLSAccountFactory - factoryAddress?: string - accountContract?: BLSAccount - blsSignerFactory?: BlsSignerFactory - owner: string - index: number - aggregatorAddress: string - signer?: Signer + factory?: BLSAccountFactory; + factoryAddress?: string; + accountContract?: BLSAccount; + blsSignerFactory?: BlsSignerFactory; + owner: string; + index: number; + aggregatorAddress: string; + signer?: Signer; - constructor (params: BLSAccountApiParams) { - super(params) - this.index = params.index ?? 0 - this.owner = params.owner - this.aggregatorAddress = params.aggregatorAddress - this.factoryAddress = params.factoryAddress + constructor(params: BLSAccountApiParams) { + super(params); + this.index = params.index ?? 0; + this.owner = params.owner; + this.aggregatorAddress = params.aggregatorAddress; + this.factoryAddress = params.factoryAddress; } - async _getAccountContract (): Promise { + async _getAccountContract(): Promise { if (this.accountContract == null) { - this.accountContract = BLSAccount__factory.connect(await this.getAccountAddress(), this.provider) + this.accountContract = BLSAccount__factory.connect(await this.getAccountAddress(), this.provider); } - return this.accountContract + return this.accountContract; } - async getAccountInitCode (): Promise { + async getAccountInitCode(): Promise { if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = BLSAccountFactory__factory.connect(this.factoryAddress, this.provider) + this.factory = BLSAccountFactory__factory.connect(this.factoryAddress, this.provider); } else { - throw new Error('no factory to get initCode') + throw new Error('no factory to get initCode'); } } if (this.factory === undefined) { - throw new Error('no factory') + throw new Error('no factory'); } return hexConcat([ this.factory.address, - this.factory.interface.encodeFunctionData( - 'createAccount', - [ - this.index, - await this.getPublicKey() - ] - ) - ]) + this.factory.interface.encodeFunctionData('createAccount', [ + this.entryPointAddress, + this.registryAddress, + this.index, + await this.getPublicKey(), + ]), + ]); } - async getNonce (): Promise { + async getNonce(): Promise { if (await this.checkAccountPhantom()) { - return BigNumber.from(0) + return BigNumber.from(0); } - const accountContract = await this._getAccountContract() - return await accountContract.nonce() + const accountContract = await this._getAccountContract(); + return await accountContract.nonce(); } - async encodeExecute (target: string, value: BigNumberish, data: string): Promise { - const accountContract = await this._getAccountContract() - return accountContract.interface.encodeFunctionData( - 'executeTransaction', - [ - target, - value, - data - ]) + async encodeExecute(target: string, value: BigNumberish, data: string): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData('execute', [target, value, data]); } - async getUserOpHash (userOp: UserOperationStruct): Promise { - const op = await resolveProperties(userOp) - op.signature = ethers.constants.HashZero - const aggContract = BLSSignatureAggregator__factory - .connect(this.aggregatorAddress, this.provider) - const userOpHash = await aggContract.callStatic.getUserOpHash(op) - return userOpHash + async getUserOpHash(userOp: UserOperationStruct): Promise { + const op = await resolveProperties(userOp); + op.signature = ethers.constants.HashZero; + const aggContract = BLSSignatureAggregator__factory.connect(this.aggregatorAddress, this.provider); + const userOpHash = await aggContract.callStatic.getUserOpHash(op); + return userOpHash; } - async signUserOpHash (userOpHash: string): Promise { - const signer = await this.getSigner() - const sign = hexConcat(signer.sign(userOpHash)) - return sign + async signUserOpHash(userOpHash: string): Promise { + const signer = await this.getSigner(); + const sign = hexConcat(signer.sign(userOpHash)); + return sign; } - async getPublicKey (): Promise { - const signer = await this.getSigner() - return signer.pubkey + async getPublicKey(): Promise { + const signer = await this.getSigner(); + return signer.pubkey; } - private async getSigner (): Promise { + private async getSigner(): Promise { if (this.blsSignerFactory == null) { - this.blsSignerFactory = await BlsSignerFactory.new() + this.blsSignerFactory = await BlsSignerFactory.new(); } if (this.signer == null) { - this.signer = this.blsSignerFactory.getSigner(arrayify(BLS_DOMAIN), this.owner) + this.signer = this.blsSignerFactory.getSigner(arrayify(BLS_DOMAIN), this.owner); } - return this.signer + return this.signer; } } diff --git a/src/base/BaseAccountAPI.ts b/src/base/BaseAccountAPI.ts index 935776df..c3e44131 100644 --- a/src/base/BaseAccountAPI.ts +++ b/src/base/BaseAccountAPI.ts @@ -7,6 +7,7 @@ import { resolveProperties } from 'ethers/lib/utils'; import { PaymasterAPI } from './PaymasterAPI'; import { getUserOpHash, packUserOp } from '../common'; import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; +import { Address } from 'cluster'; export interface BaseApiParams { provider: Provider; @@ -41,6 +42,7 @@ export abstract class BaseAccountAPI { // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) protected readonly entryPointView: EntryPoint; + protected readonly registryView: Address; provider: Provider; overheads?: Partial; diff --git a/src/base/ClientConfig.ts b/src/base/ClientConfig.ts index d90719a3..648c0daf 100644 --- a/src/base/ClientConfig.ts +++ b/src/base/ClientConfig.ts @@ -1,4 +1,4 @@ -import { PaymasterAPI } from './PaymasterAPI' +import { PaymasterAPI } from './PaymasterAPI'; /** * configuration params for wrapProvider @@ -7,19 +7,23 @@ export interface ClientConfig { /** * the entry point to use */ - entryPointAddress: string + entryPointAddress: string; + /** + * the personal account registry to use + */ + registryAddress: string; /** * url to the bundler */ - bundlerUrl: string + bundlerUrl: string; /** * if set, use this pre-deployed wallet. * (if not set, use getSigner().getAddress() to query the "counterfactual" address of wallet. * you may need to fund this address so the wallet can pay for its own creation) */ - walletAddres?: string + walletAddres?: string; /** * if set, call just before signing. */ - paymasterAPI?: PaymasterAPI + paymasterAPI?: PaymasterAPI; } diff --git a/src/base/EtherspotWalletAPI.ts b/src/base/EtherspotWalletAPI.ts index 833c3ee5..25976906 100644 --- a/src/base/EtherspotWalletAPI.ts +++ b/src/base/EtherspotWalletAPI.ts @@ -78,6 +78,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { } async getNonce(): Promise { + console.log('checking nonce...'); if (await this.checkAccountPhantom()) { return BigNumber.from(0); } @@ -100,7 +101,21 @@ export class EtherspotWalletAPI extends BaseAccountAPI { return await this.owner.signMessage(arrayify(userOpHash)); } + async updateEntryPoint(newEntryPoint: string) { + const accountContract = await this._getAccountContract(); + return accountContract.updateEntryPoint(newEntryPoint); + } + + async updateRegistry(newRegistry: string) { + const accountContract = await this._getAccountContract(); + return accountContract.updateRegistry(newRegistry); + } + get epView() { return this.entryPointView; } + + get regView() { + return this.registryView; + } } diff --git a/src/base/EtherspotWalletFactory.ts b/src/base/EtherspotWalletFactory.ts new file mode 100644 index 00000000..fd9d010e --- /dev/null +++ b/src/base/EtherspotWalletFactory.ts @@ -0,0 +1,24 @@ +import { Contract } from 'ethers'; +import { IEntryPoint } from 'src/contracts'; + +export class EtherspotWalletFactoryAPI { + static createAccount( + factoryAddress: string, + entryPoint: IEntryPoint, + registry: string, + owner: string, + salt: number, + ): string { + const walletFactory = new Contract(factoryAddress, [ + 'function createAccount(IEntryPoint _entryPoint, address, _registry, address owner, uint256 salt) returns(address)', + ]); + + const encodedData = walletFactory.interface.encodeFunctionData('createAccount', [ + entryPoint, + registry, + owner, + salt, + ]); + return encodedData; + } +} diff --git a/src/base/HttpRpcClient.ts b/src/base/HttpRpcClient.ts index 398ba488..c65b8122 100644 --- a/src/base/HttpRpcClient.ts +++ b/src/base/HttpRpcClient.ts @@ -1,49 +1,49 @@ -import { JsonRpcProvider } from '@ethersproject/providers' -import { ethers } from 'ethers' -import { hexValue } from 'ethers/lib/utils' -import { UserOperationStruct } from '../contracts' +import { JsonRpcProvider } from '@ethersproject/providers'; +import { ethers } from 'ethers'; +import { hexValue } from 'ethers/lib/utils'; +import { UserOperationStruct } from '../contracts'; export class HttpRpcClient { - private readonly userOpJsonRpcProvider: JsonRpcProvider + private readonly userOpJsonRpcProvider: JsonRpcProvider; - initializing: Promise + initializing: Promise; - constructor ( - readonly bundlerUrl: string, - readonly entryPointAddress: string, - readonly chainId: number - ) { + constructor(readonly bundlerUrl: string, readonly entryPointAddress: string, readonly chainId: number) { this.userOpJsonRpcProvider = new ethers.providers.JsonRpcProvider(this.bundlerUrl, { name: 'Connected bundler network', - chainId - }) - this.initializing = this.validateChainId() + chainId, + }); + this.initializing = this.validateChainId(); } - async validateChainId (): Promise { + async validateChainId(): Promise { // validate chainId is in sync with expected chainid - const chain = await this.userOpJsonRpcProvider.send('eth_chainId', []) - const bundlerChain = parseInt(chain) + const chain = await this.userOpJsonRpcProvider.send('eth_chainId', []); + const bundlerChain = parseInt(chain); if (bundlerChain !== this.chainId) { - throw new Error(`bundler ${this.bundlerUrl} is on chainId ${bundlerChain}, but provider is on chainId ${this.chainId}`) + throw new Error( + `bundler ${this.bundlerUrl} is on chainId ${bundlerChain}, but provider is on chainId ${this.chainId}`, + ); } } - private hexifyUserOp (userOp: UserOperationStruct): any { - const hexifiedUserOp: any = - Object.keys(userOp) - .map(key => { - let val = (userOp as any)[key] - if (typeof val !== 'string' || !val.startsWith('0x')) { - val = hexValue(val) - } - return [key, val] - }) - .reduce((set, [k, v]) => ({ + private hexifyUserOp(userOp: UserOperationStruct): any { + const hexifiedUserOp: any = Object.keys(userOp) + .map((key) => { + let val = (userOp as any)[key]; + if (typeof val !== 'string' || !val.startsWith('0x')) { + val = hexValue(val); + } + return [key, val]; + }) + .reduce( + (set, [k, v]) => ({ ...set, - [k]: v - }), {}) - return hexifiedUserOp + [k]: v, + }), + {}, + ); + return hexifiedUserOp; } /** @@ -51,18 +51,17 @@ export class HttpRpcClient { * @param userOp1 * @return userOpHash the id of this operation, for getUserOperationTransaction */ - async sendUserOpToBundler (userOp: UserOperationStruct): Promise { - await this.initializing - const hexifiedUserOp = this.hexifyUserOp(userOp) - return await this.userOpJsonRpcProvider - .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]) + async sendUserOpToBundler(userOp: UserOperationStruct): Promise { + await this.initializing; + const hexifiedUserOp = this.hexifyUserOp(userOp); + return await this.userOpJsonRpcProvider.send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]); } - async sendAggregatedOpsToBundler (userOps1: UserOperationStruct[]): Promise { - const hexifiedUserOps = await Promise.all( - userOps1.map(async userOp1 => await this.hexifyUserOp(userOp1)) - ) - return await this.userOpJsonRpcProvider - .send('eth_sendAggregatedUserOperation', [hexifiedUserOps, this.entryPointAddress]) + async sendAggregatedOpsToBundler(userOps1: UserOperationStruct[]): Promise { + const hexifiedUserOps = await Promise.all(userOps1.map(async (userOp1) => await this.hexifyUserOp(userOp1))); + return await this.userOpJsonRpcProvider.send('eth_sendAggregatedUserOperation', [ + hexifiedUserOps, + this.entryPointAddress, + ]); } } diff --git a/src/base/PaymasterAPI.ts b/src/base/PaymasterAPI.ts index 052b8b35..44c63d33 100644 --- a/src/base/PaymasterAPI.ts +++ b/src/base/PaymasterAPI.ts @@ -1,4 +1,4 @@ -import { UserOperationStruct } from '../contracts' +import { UserOperationStruct } from '../contracts'; /** * an API to external a UserOperation with paymaster info @@ -10,7 +10,7 @@ export class PaymasterAPI { * paymasterAndData value, which will only be returned by this method.. * @returns the value to put into the PaymasterAndData, undefined to leave it empty */ - async getPaymasterAndData (userOp: Partial): Promise { - return '0x' + async getPaymasterAndData(userOp: Partial): Promise { + return '0x'; } } diff --git a/src/base/PersonalAccountRegistryAPI.ts b/src/base/PersonalAccountRegistryAPI.ts new file mode 100644 index 00000000..00e594c8 --- /dev/null +++ b/src/base/PersonalAccountRegistryAPI.ts @@ -0,0 +1,49 @@ +import { Contract } from 'ethers'; +import { Provider } from '@ethersproject/providers'; +import { Signer } from '@ethersproject/abstract-signer'; +import { PersonalAccountRegistry, PersonalAccountRegistry__factory } from '../contracts'; +import { hexConcat } from 'ethers/lib/utils'; + +export interface PersonalAccountRegistryApiParams { + provider: Provider; + owner: Signer; + factoryAddress?: string; + index?: number; +} + +export class PersonalAccountRegistryAPI { + provider: Provider; + factoryAddress?: string; + owner: Signer; + + factory: PersonalAccountRegistry; + + constructor(params: PersonalAccountRegistryApiParams) { + this.provider = params.provider; + this.factoryAddress = params.factoryAddress; + this.owner = params.owner; + } + + static deployAccount(factoryAddress: string, owner: string): string { + const walletFactory = new Contract(factoryAddress, ['function deployAccount(address owner)']); + + const encodedData = walletFactory.interface.encodeFunctionData('deployAccount', [owner]); + return encodedData; + } + + async getAccountInitCode(): Promise { + if (this.factory == null) { + if (this.factoryAddress != null && this.factoryAddress !== '') { + this.factory = PersonalAccountRegistry__factory.connect(this.factoryAddress, this.provider); + } else { + throw new Error('no factory to get initCode'); + } + } + return hexConcat([ + this.factory.address, + `0x5fbfb9cf000000000000000000000000${(await this.owner.getAddress()).slice( + 2, + )}0000000000000000000000000000000000000000000000000000000000000000`, + ]); + } +} diff --git a/src/base/Provider.ts b/src/base/Provider.ts index 330cc8a2..860c3991 100644 --- a/src/base/Provider.ts +++ b/src/base/Provider.ts @@ -30,6 +30,7 @@ export async function wrapProvider( const smartAccountAPI = new EtherspotWalletAPI({ provider: originalProvider, entryPointAddress: entryPoint.address, + registryAddress: config.registryAddress, owner: originalSigner, factoryAddress: simpleAccountDeployer, paymasterAPI: config.paymasterAPI, diff --git a/src/base/VerifyingPaymasterAPI.ts b/src/base/VerifyingPaymasterAPI.ts new file mode 100644 index 00000000..8d09dae5 --- /dev/null +++ b/src/base/VerifyingPaymasterAPI.ts @@ -0,0 +1,63 @@ +import axios from 'axios'; +import { ethers, BytesLike } from 'ethers'; +import { calcPreVerificationGas } from './calcPreVerificationGas'; +import { PaymasterAPI } from './PaymasterAPI'; +import { UserOperationStruct } from '../contracts'; +import { toJSON } from '../common/OperationUtils'; + +const SIG_SIZE = 65; +const DUMMY_PAYMASTER_AND_DATA = + '0x0101010101010101010101010101010101010101000000000000000000000000000000000000000000000000000001010101010100000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101'; + +interface paymasterResponse { + jsonrpc: string; + id: number; + result: BytesLike; +} + +class VerifyingPaymasterAPI extends PaymasterAPI { + private paymasterUrl: string; + private entryPoint: string; + constructor(paymasterUrl: string, entryPoint: string) { + super(); + this.paymasterUrl = paymasterUrl; + this.entryPoint = entryPoint; + } + + async getPaymasterAndData(userOp: Partial): Promise { + // Hack: userOp includes empty paymasterAndData which calcPreVerificationGas requires. + try { + // userOp.preVerificationGas contains a promise that will resolve to an error. + await ethers.utils.resolveProperties(userOp); + // eslint-disable-next-line no-empty + } catch (_) {} + const pmOp: Partial = { + sender: userOp.sender, + nonce: userOp.nonce, + initCode: userOp.initCode, + callData: userOp.callData, + callGasLimit: userOp.callGasLimit, + verificationGasLimit: userOp.verificationGasLimit, + maxFeePerGas: userOp.maxFeePerGas, + maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, + // A dummy value here is required in order to calculate a correct preVerificationGas value. + paymasterAndData: DUMMY_PAYMASTER_AND_DATA, + signature: ethers.utils.hexlify(Buffer.alloc(SIG_SIZE, 1)), + }; + const op = await ethers.utils.resolveProperties(pmOp); + op.preVerificationGas = calcPreVerificationGas(op); + + // Ask the paymaster to sign the transaction and return a valid paymasterAndData value. + return axios + .post(this.paymasterUrl, { + jsonrpc: '2.0', + id: 1, + method: 'pm_sponsorUserOperation', + params: [await toJSON(op), this.entryPoint], + }) + .then((res) => res.data.result.toString()); + } +} + +export const getVerifyingPaymaster = (paymasterUrl: string, entryPoint: string) => + new VerifyingPaymasterAPI(paymasterUrl, entryPoint); diff --git a/src/base/index.ts b/src/base/index.ts index d669b7f6..7c317f83 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -7,4 +7,5 @@ export { ClientConfig } from './ClientConfig'; export { HttpRpcClient } from './HttpRpcClient'; export { DeterministicDeployer } from './DeterministicDeployer'; export { BLSAccountAPI } from './BLSAccountAPI'; +export { PersonalAccountRegistryAPI } from './PersonalAccountRegistryAPI'; export * from './calcPreVerificationGas'; diff --git a/src/common/ERC4337Utils.ts b/src/common/ERC4337Utils.ts index 62c7c2b0..09a3df0d 100644 --- a/src/common/ERC4337Utils.ts +++ b/src/common/ERC4337Utils.ts @@ -1,12 +1,13 @@ import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from 'ethers/lib/utils'; -import { EntryPoint__factory, UserOperationStruct } from '../contracts'; +import { EntryPoint__factory, PersonalAccountRegistry, UserOperationStruct } from '../contracts'; import { ethers } from 'ethers'; +import { BytesLike } from '@ethersproject/bytes'; -const entryPointAbi = EntryPoint__factory.abi; +const entryPointAbi: any = EntryPoint__factory.abi; // UserOperation is the first parameter of validateUseOp const validateUserOpMethod = 'simulateValidation'; -const UserOpType = entryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs; +const UserOpType = entryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs[0]; if (UserOpType == null) { throw new Error( `unable to find method ${validateUserOpMethod} in EP ${entryPointAbi diff --git a/src/common/OperationUtils.ts b/src/common/OperationUtils.ts new file mode 100644 index 00000000..93630947 --- /dev/null +++ b/src/common/OperationUtils.ts @@ -0,0 +1,25 @@ +import { ethers } from 'ethers'; +import { UserOperationStruct } from '../contracts'; + +export function toJSON(op: Partial): Promise { + return ethers.utils.resolveProperties(op).then((userOp) => + Object.keys(userOp) + .map((key) => { + let val = (userOp as any)[key]; + if (typeof val !== 'string' || !val.startsWith('0x')) { + val = ethers.utils.hexValue(val); + } + return [key, val]; + }) + .reduce( + (set, [k, v]) => ({ + ...set, + [k]: v, + }), + {}, + ), + ); +} +export async function printOp(op: Partial): Promise { + return toJSON(op).then((userOp) => JSON.stringify(userOp, null, 2)); +} diff --git a/src/common/getGasFee.ts b/src/common/getGasFee.ts index e8ee13cf..4f5631e2 100644 --- a/src/common/getGasFee.ts +++ b/src/common/getGasFee.ts @@ -1,23 +1,22 @@ -import { BigNumberish, ethers } from 'ethers' +import { BigNumberish, ethers } from 'ethers'; export interface Gas { - maxFeePerGas: BigNumberish - maxPriorityFeePerGas: BigNumberish + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; } -export async function getGasFee ( - provider: ethers.providers.JsonRpcProvider -): Promise { - const [fee, block] = await Promise.all([ - provider.send('eth_maxPriorityFeePerGas', []), - provider.getBlock('latest') - ]) - const tip = ethers.BigNumber.from(fee) - const buffer = tip.div(100).mul(13) - const maxPriorityFeePerGas = tip.add(buffer) - const maxFeePerGas = (block.baseFeePerGas != null) - ? block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas) - : maxPriorityFeePerGas +export async function getGasFee(provider: ethers.providers.JsonRpcProvider): Promise { + console.log(`getGasFee.ts:: before eth_masPriorityFeePerGas call`); - return { maxFeePerGas, maxPriorityFeePerGas } + const [fee, block] = await Promise.all([provider.send('eth_maxPriorityFeePerGas', []), provider.getBlock('latest')]); + console.log(`getGasFee.ts:: fee: ${fee}`); + console.log(`getGasFee.ts:: block: ${block}`); + + const tip = ethers.BigNumber.from(fee); + const buffer = tip.div(100).mul(13); + const maxPriorityFeePerGas = tip.add(buffer); + const maxFeePerGas = + block.baseFeePerGas != null ? block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas) : maxPriorityFeePerGas; + + return { maxFeePerGas, maxPriorityFeePerGas }; } diff --git a/src/common/getHttpRpcClient.ts b/src/common/getHttpRpcClient.ts new file mode 100644 index 00000000..c3014451 --- /dev/null +++ b/src/common/getHttpRpcClient.ts @@ -0,0 +1,7 @@ +import { HttpRpcClient } from '../base/HttpRpcClient'; +import { JsonRpcProvider } from '@ethersproject/providers'; + +export async function getHttpRpcClient(provider: JsonRpcProvider, bundlerUrl: string, entryPointAddress: string) { + const chainId = await provider.getNetwork().then((net) => net.chainId); + return new HttpRpcClient(bundlerUrl, entryPointAddress, chainId); +} diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts index b2230d82..e741a61e 100644 --- a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts @@ -1,119 +1,113 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../../common"; -import type { - BLSAccountFactory, - BLSAccountFactoryInterface, -} from "../../../../src/aa-4337/bls/BLSAccountFactory"; +import { Signer, utils, Contract, ContractFactory, Overrides } from 'ethers'; +import type { Provider, TransactionRequest } from '@ethersproject/providers'; +import type { PromiseOrValue } from '../../../../common'; +import type { BLSAccountFactory, BLSAccountFactoryInterface } from '../../../../src/aa-4337/bls/BLSAccountFactory'; const _abi = [ { inputs: [ { - internalType: "address", - name: "aggregator", - type: "address", + internalType: 'address', + name: 'aggregator', + type: 'address', }, ], - stateMutability: "nonpayable", - type: "constructor", + stateMutability: 'nonpayable', + type: 'constructor', }, { inputs: [], - name: "accountImplementation", + name: 'accountImplementation', outputs: [ { - internalType: "contract BLSAccount", - name: "", - type: "address", + internalType: 'contract BLSAccount', + name: '', + type: 'address', }, ], - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, { inputs: [ { - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", + internalType: 'contract IEntryPoint', + name: 'entryPoint', + type: 'address', }, { - internalType: "address", - name: "anRegistry", - type: "address", + internalType: 'address', + name: 'anRegistry', + type: 'address', }, { - internalType: "uint256", - name: "salt", - type: "uint256", + internalType: 'uint256', + name: 'salt', + type: 'uint256', }, { - internalType: "uint256[4]", - name: "aPublicKey", - type: "uint256[4]", + internalType: 'uint256[4]', + name: 'aPublicKey', + type: 'uint256[4]', }, ], - name: "createAccount", + name: 'createAccount', outputs: [ { - internalType: "contract BLSAccount", - name: "", - type: "address", + internalType: 'contract BLSAccount', + name: '', + type: 'address', }, ], - stateMutability: "nonpayable", - type: "function", + stateMutability: 'nonpayable', + type: 'function', }, { inputs: [ { - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", + internalType: 'contract IEntryPoint', + name: 'entryPoint', + type: 'address', }, { - internalType: "address", - name: "anRegistry", - type: "address", + internalType: 'address', + name: 'anRegistry', + type: 'address', }, { - internalType: "uint256", - name: "salt", - type: "uint256", + internalType: 'uint256', + name: 'salt', + type: 'uint256', }, { - internalType: "uint256[4]", - name: "aPublicKey", - type: "uint256[4]", + internalType: 'uint256[4]', + name: 'aPublicKey', + type: 'uint256[4]', }, ], - name: "getAddress", + name: 'getAddress', outputs: [ { - internalType: "address", - name: "", - type: "address", + internalType: 'address', + name: '', + type: 'address', }, ], - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162005c3138038062005c31833981810160405281019062000037919062000122565b806040516200004690620000aa565b62000052919062000165565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000182565b61422e8062001a0383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b620000fc81620000dd565b81146200010857600080fd5b50565b6000815190506200011c81620000f1565b92915050565b6000602082840312156200013b576200013a620000b8565b5b60006200014b848285016200010b565b91505092915050565b6200015f81620000dd565b82525050565b60006020820190506200017c600083018462000154565b92915050565b608051611858620001ab6000396000818160db0152818161012f01526102e301526118586000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b60405162000064919062000484565b60405180910390f35b6200008b6004803603810190620000859190620006d8565b620000fd565b6040516200009a91906200075b565b60405180910390f35b620000c16004803603810190620000bb91906200079d565b62000205565b604051620000d0919062000484565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b604051806020016200011990620003eb565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000888887604051602401620001659392919062000903565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620009d3565b604051602081830303815290604052604051602001620001df92919062000a49565b60405160208183030381529060405280519060200120620003a9565b9050949350505050565b600080829050608060003690506200021e919062000aa0565b811462000262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002599062000b3c565b60405180910390fd5b6000620002a9878787876004806020026040519081016040528092919082600460200280828437600081840152601f19601f820116905080830192505050505050620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002dd57819350505050620003a1565b8560001b7f0000000000000000000000000000000000000000000000000000000000000000898988604051602401620003199392919062000b7f565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200036c90620003eb565b62000379929190620009d3565b8190604051809103906000f59050801580156200039a573d6000803e3d6000fd5b5093505050505b949350505050565b6000620003b8838330620003c0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c668062000bbd83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004446200043e6200043884620003f9565b62000419565b620003f9565b9050919050565b6000620004588262000423565b9050919050565b60006200046c826200044b565b9050919050565b6200047e816200045f565b82525050565b60006020820190506200049b600083018462000473565b92915050565b6000604051905090565b600080fd5b6000620004bd82620003f9565b9050919050565b6000620004d182620004b0565b9050919050565b620004e381620004c4565b8114620004ef57600080fd5b50565b6000813590506200050381620004d8565b92915050565b6200051481620004b0565b81146200052057600080fd5b50565b600081359050620005348162000509565b92915050565b6000819050919050565b6200054f816200053a565b81146200055b57600080fd5b50565b6000813590506200056f8162000544565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c5826200057a565b810181811067ffffffffffffffff82111715620005e757620005e66200058b565b5b80604052505050565b6000620005fc620004a1565b90506200060a8282620005ba565b919050565b600067ffffffffffffffff8211156200062d576200062c6200058b565b5b602082029050919050565b600080fd5b6000620006546200064e846200060f565b620005f0565b9050806020840283018581111562000671576200067062000638565b5b835b818110156200069e57806200068988826200055e565b84526020840193505060208101905062000673565b5050509392505050565b600082601f830112620006c057620006bf62000575565b5b6004620006cf8482856200063d565b91505092915050565b60008060008060e08587031215620006f557620006f4620004ab565b5b60006200070587828801620004f2565b9450506020620007188782880162000523565b93505060406200072b878288016200055e565b92505060606200073e87828801620006a8565b91505092959194509250565b6200075581620004b0565b82525050565b60006020820190506200077260008301846200074a565b92915050565b60008190508260206004028201111562000797576200079662000638565b5b92915050565b60008060008060e08587031215620007ba57620007b9620004ab565b5b6000620007ca87828801620004f2565b9450506020620007dd8782880162000523565b9350506040620007f0878288016200055e565b9250506060620008038782880162000778565b91505092959194509250565b60006200081c8262000423565b9050919050565b600062000830826200080f565b9050919050565b620008428162000823565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b62000873816200053a565b82525050565b600062000887838362000868565b60208301905092915050565b6000602082019050919050565b620008ab8162000848565b620008b7818462000853565b9250620008c4826200085e565b8060005b83811015620008fb578151620008df878262000879565b9650620008ec8362000893565b925050600181019050620008c8565b505050505050565b600060c0820190506200091a600083018662000837565b6200092960208301856200074a565b620009386040830184620008a0565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200097c5780820151818401526020810190506200095f565b838111156200098c576000848401525b50505050565b60006200099f8262000940565b620009ab81856200094b565b9350620009bd8185602086016200095c565b620009c8816200057a565b840191505092915050565b6000604082019050620009ea60008301856200074a565b8181036020830152620009fe818462000992565b90509392505050565b600081905092915050565b600062000a1f8262000940565b62000a2b818562000a07565b935062000a3d8185602086016200095c565b80840191505092915050565b600062000a57828562000a12565b915062000a65828462000a12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aad826200053a565b915062000aba836200053a565b92508282101562000ad05762000acf62000a71565b5b828203905092915050565b600082825260208201905092915050565b7f77726f6e67207075626b6579206f666673657400000000000000000000000000600082015250565b600062000b2460138362000adb565b915062000b318262000aec565b602082019050919050565b6000602082019050818103600083015262000b578162000b15565b9050919050565b82818337600083830152505050565b62000b7b6080838362000b5e565b5050565b600060c08201905062000b96600083018662000837565b62000ba560208301856200074a565b62000bb4604083018462000b6d565b94935050505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122037cf3c56ad5cdd126919cfa2b5c296e2127e5787a897397dced6ad1c067b8b0264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033"; + '0x60a06040523480156200001157600080fd5b5060405162005c3138038062005c31833981810160405281019062000037919062000122565b806040516200004690620000aa565b62000052919062000165565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000182565b61422e8062001a0383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b620000fc81620000dd565b81146200010857600080fd5b50565b6000815190506200011c81620000f1565b92915050565b6000602082840312156200013b576200013a620000b8565b5b60006200014b848285016200010b565b91505092915050565b6200015f81620000dd565b82525050565b60006020820190506200017c600083018462000154565b92915050565b608051611858620001ab6000396000818160db0152818161012f01526102e301526118586000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b60405162000064919062000484565b60405180910390f35b6200008b6004803603810190620000859190620006d8565b620000fd565b6040516200009a91906200075b565b60405180910390f35b620000c16004803603810190620000bb91906200079d565b62000205565b604051620000d0919062000484565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b604051806020016200011990620003eb565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000888887604051602401620001659392919062000903565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620009d3565b604051602081830303815290604052604051602001620001df92919062000a49565b60405160208183030381529060405280519060200120620003a9565b9050949350505050565b600080829050608060003690506200021e919062000aa0565b811462000262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002599062000b3c565b60405180910390fd5b6000620002a9878787876004806020026040519081016040528092919082600460200280828437600081840152601f19601f820116905080830192505050505050620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002dd57819350505050620003a1565b8560001b7f0000000000000000000000000000000000000000000000000000000000000000898988604051602401620003199392919062000b7f565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200036c90620003eb565b62000379929190620009d3565b8190604051809103906000f59050801580156200039a573d6000803e3d6000fd5b5093505050505b949350505050565b6000620003b8838330620003c0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c668062000bbd83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004446200043e6200043884620003f9565b62000419565b620003f9565b9050919050565b6000620004588262000423565b9050919050565b60006200046c826200044b565b9050919050565b6200047e816200045f565b82525050565b60006020820190506200049b600083018462000473565b92915050565b6000604051905090565b600080fd5b6000620004bd82620003f9565b9050919050565b6000620004d182620004b0565b9050919050565b620004e381620004c4565b8114620004ef57600080fd5b50565b6000813590506200050381620004d8565b92915050565b6200051481620004b0565b81146200052057600080fd5b50565b600081359050620005348162000509565b92915050565b6000819050919050565b6200054f816200053a565b81146200055b57600080fd5b50565b6000813590506200056f8162000544565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c5826200057a565b810181811067ffffffffffffffff82111715620005e757620005e66200058b565b5b80604052505050565b6000620005fc620004a1565b90506200060a8282620005ba565b919050565b600067ffffffffffffffff8211156200062d576200062c6200058b565b5b602082029050919050565b600080fd5b6000620006546200064e846200060f565b620005f0565b9050806020840283018581111562000671576200067062000638565b5b835b818110156200069e57806200068988826200055e565b84526020840193505060208101905062000673565b5050509392505050565b600082601f830112620006c057620006bf62000575565b5b6004620006cf8482856200063d565b91505092915050565b60008060008060e08587031215620006f557620006f4620004ab565b5b60006200070587828801620004f2565b9450506020620007188782880162000523565b93505060406200072b878288016200055e565b92505060606200073e87828801620006a8565b91505092959194509250565b6200075581620004b0565b82525050565b60006020820190506200077260008301846200074a565b92915050565b60008190508260206004028201111562000797576200079662000638565b5b92915050565b60008060008060e08587031215620007ba57620007b9620004ab565b5b6000620007ca87828801620004f2565b9450506020620007dd8782880162000523565b9350506040620007f0878288016200055e565b9250506060620008038782880162000778565b91505092959194509250565b60006200081c8262000423565b9050919050565b600062000830826200080f565b9050919050565b620008428162000823565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b62000873816200053a565b82525050565b600062000887838362000868565b60208301905092915050565b6000602082019050919050565b620008ab8162000848565b620008b7818462000853565b9250620008c4826200085e565b8060005b83811015620008fb578151620008df878262000879565b9650620008ec8362000893565b925050600181019050620008c8565b505050505050565b600060c0820190506200091a600083018662000837565b6200092960208301856200074a565b620009386040830184620008a0565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200097c5780820151818401526020810190506200095f565b838111156200098c576000848401525b50505050565b60006200099f8262000940565b620009ab81856200094b565b9350620009bd8185602086016200095c565b620009c8816200057a565b840191505092915050565b6000604082019050620009ea60008301856200074a565b8181036020830152620009fe818462000992565b90509392505050565b600081905092915050565b600062000a1f8262000940565b62000a2b818562000a07565b935062000a3d8185602086016200095c565b80840191505092915050565b600062000a57828562000a12565b915062000a65828462000a12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aad826200053a565b915062000aba836200053a565b92508282101562000ad05762000acf62000a71565b5b828203905092915050565b600082825260208201905092915050565b7f77726f6e67207075626b6579206f666673657400000000000000000000000000600082015250565b600062000b2460138362000adb565b915062000b318262000aec565b602082019050919050565b6000602082019050818103600083015262000b578162000b15565b9050919050565b82818337600083830152505050565b62000b7b6080838362000b5e565b5050565b600060c08201905062000b96600083018662000837565b62000ba560208301856200074a565b62000bb4604083018462000b6d565b94935050505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122037cf3c56ad5cdd126919cfa2b5c296e2127e5787a897397dced6ad1c067b8b0264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033'; -type BLSAccountFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; +type BLSAccountFactoryConstructorParams = [signer?: Signer] | ConstructorParameters; -const isSuperArgs = ( - xs: BLSAccountFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; +const isSuperArgs = (xs: BLSAccountFactoryConstructorParams): xs is ConstructorParameters => + xs.length > 1; export class BLSAccountFactory__factory extends ContractFactory { constructor(...args: BLSAccountFactoryConstructorParams) { @@ -126,16 +120,13 @@ export class BLSAccountFactory__factory extends ContractFactory { override deploy( aggregator: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise { - return super.deploy( - aggregator, - overrides || {} - ) as Promise; + return super.deploy(aggregator, overrides || {}) as Promise; } override getDeployTransaction( aggregator: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): TransactionRequest { return super.getDeployTransaction(aggregator, overrides || {}); } @@ -151,10 +142,7 @@ export class BLSAccountFactory__factory extends ContractFactory { static createInterface(): BLSAccountFactoryInterface { return new utils.Interface(_abi) as BLSAccountFactoryInterface; } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BLSAccountFactory { + static connect(address: string, signerOrProvider: Signer | Provider): BLSAccountFactory { return new Contract(address, _abi, signerOrProvider) as BLSAccountFactory; } } diff --git a/src/helpers/ERC20_ABI.ts b/src/helpers/ERC20_ABI.ts new file mode 100644 index 00000000..337ddd7b --- /dev/null +++ b/src/helpers/ERC20_ABI.ts @@ -0,0 +1,7 @@ +export const ERC20_ABI = [ + 'function balanceOf(address owner) view returns (uint256)', + 'function decimals() view returns (uint8)', + 'function symbol() view returns (string)', + 'function transfer(address to, uint amount) returns (bool)', + 'event Transfer(address indexed from, address indexed to, uint amount)', +]; diff --git a/src/sdk.ts b/src/sdk.ts index 78f09fee..cfa33284 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,12 +1,15 @@ import { Wallet, providers } from 'ethers'; -import { EtherspotWalletAPI, HttpRpcClient } from './base'; +import { EtherspotWalletAPI, HttpRpcClient, PersonalAccountRegistryAPI } from './base'; import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { getGasFee } from './common'; +import { BytesLike, hexConcat } from 'ethers/lib/utils'; +import { PersonalAccountRegistry } from './contracts'; export class LiteSdk { private EtherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; + private PersonalAccountRegistry: PersonalAccountRegistryAPI; constructor( private wallet: Wallet, @@ -25,6 +28,11 @@ export class LiteSdk { factoryAddress: accountFactory, }); this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); + this.PersonalAccountRegistry = new PersonalAccountRegistryAPI({ + provider: wallet.provider, + factoryAddress: accountFactory, + owner: wallet, + }); } async getCounterFactualAddress(): Promise { @@ -66,4 +74,22 @@ export class LiteSdk { async getGasFee() { return getGasFee(this.wallet.provider as providers.JsonRpcProvider); } + + // added below + + async getAccountContract() { + return this.EtherspotWallet._getAccountContract(); + } + + get epView() { + return this.EtherspotWallet.epView; + } + + get regView() { + return this.EtherspotWallet.regView; + } + + async getAccountInitCodePAR(): Promise { + return this.PersonalAccountRegistry.getAccountInitCode(); + } } From 20e7afe433d7cbc40d56377b2e9fd4ae7dc6a7b2 Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Mon, 20 Mar 2023 18:35:32 +0000 Subject: [PATCH 04/20] WIP initcode example --- examples/00-test-initcode.ts | 12 ++++-------- src/base/PersonalAccountRegistryAPI.ts | 4 +--- src/common/getGasFee.ts | 5 ----- src/sdk.ts | 2 +- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/examples/00-test-initcode.ts b/examples/00-test-initcode.ts index a2f560b9..c7b1f67a 100644 --- a/examples/00-test-initcode.ts +++ b/examples/00-test-initcode.ts @@ -1,7 +1,5 @@ -import { Contract, Wallet, ethers, providers } from 'ethers'; +import { Wallet, ethers, providers } from 'ethers'; import { LiteSdk } from '../src'; -import { PersonalAccountRegistry__factory } from '../src/contracts'; -import { PersonalAccountRegistry } from '../src/contracts'; // mumbai contract addresses const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; @@ -10,19 +8,17 @@ const REGISTRY_ADDRESS = '0x7EB3A038F25B9F32f8e19A7F0De83D4916030eFa'; async function main() { // initializating sdk... - const provider = new providers.JsonRpcProvider('ALCHEMY_API_URL+KEY'); + const provider = new providers.JsonRpcProvider('https://polygon-mumbai.g.alchemy.com/v2/'); const wallet = new Wallet('', provider); const sdk = new LiteSdk( wallet, // wallet - process.env.BUNDLER_URL, // bundler rpc + 'https://mumbai-bundler.etherspot.io', // bundler rpc 80001, // chain id ENTRYPOINT_ADDRESS, // entry point REGISTRY_ADDRESS, // personal account registry REGISTRY_ADDRESS, // personal account registry (wallet factory) ); - // sanity check for RPC provider - console.log(await provider.getSigner()); console.log(`Wallet address: ${wallet.address}`); console.log('here 2'); @@ -39,7 +35,7 @@ async function main() { value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, data: '0x', // calldata is empty since we just want to transfer ether }); - userOp.initCode = sdk.getAccountInitCodePAR(); + userOp.initCode = await sdk.getAccountInitCodePAR(); console.log(`Signed userOp: ${userOp}`); console.log('here 4'); diff --git a/src/base/PersonalAccountRegistryAPI.ts b/src/base/PersonalAccountRegistryAPI.ts index 00e594c8..c30b4cf6 100644 --- a/src/base/PersonalAccountRegistryAPI.ts +++ b/src/base/PersonalAccountRegistryAPI.ts @@ -41,9 +41,7 @@ export class PersonalAccountRegistryAPI { } return hexConcat([ this.factory.address, - `0x5fbfb9cf000000000000000000000000${(await this.owner.getAddress()).slice( - 2, - )}0000000000000000000000000000000000000000000000000000000000000000`, + this.factory.interface.encodeFunctionData('deployAccount', [await this.owner.getAddress()]), ]); } } diff --git a/src/common/getGasFee.ts b/src/common/getGasFee.ts index 4f5631e2..c4077885 100644 --- a/src/common/getGasFee.ts +++ b/src/common/getGasFee.ts @@ -6,12 +6,7 @@ export interface Gas { } export async function getGasFee(provider: ethers.providers.JsonRpcProvider): Promise { - console.log(`getGasFee.ts:: before eth_masPriorityFeePerGas call`); - const [fee, block] = await Promise.all([provider.send('eth_maxPriorityFeePerGas', []), provider.getBlock('latest')]); - console.log(`getGasFee.ts:: fee: ${fee}`); - console.log(`getGasFee.ts:: block: ${block}`); - const tip = ethers.BigNumber.from(fee); const buffer = tip.div(100).mul(13); const maxPriorityFeePerGas = tip.add(buffer); diff --git a/src/sdk.ts b/src/sdk.ts index cfa33284..cbbff475 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -30,7 +30,7 @@ export class LiteSdk { this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); this.PersonalAccountRegistry = new PersonalAccountRegistryAPI({ provider: wallet.provider, - factoryAddress: accountFactory, + factoryAddress: registry, owner: wallet, }); } From df2f48cc1fa16f9cbe629a1c795b449a476505bc Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Thu, 6 Apr 2023 15:38:11 +0100 Subject: [PATCH 05/20] Updated and added new examples. Issue with 04 & 05 batching examples. --- examples/00-test-initcode.ts | 50 - examples/01-get-address.ts | 18 +- examples/02-transfer-funds.ts | 43 +- examples/03-batch-erc20-transfer.ts | 67 - examples/03-transfer-erc20.ts | 63 + examples/04-batch-transfer.ts | 58 +- examples/05-batch-erc20-transfer.ts | 89 ++ package-lock.json | 16 + package.json | 5 +- src/base/BLSAccountAPI.ts | 3 +- src/base/BaseAccountAPI.ts | 15 +- src/base/ERC4337EthersProvider.ts | 123 +- src/base/ERC4337EthersSigner.ts | 103 +- src/base/EtherspotWalletAPI.ts | 18 +- src/base/HttpRpcClient.ts | 52 +- src/base/PaymasterAPI.ts | 2 +- src/base/PersonalAccountRegistryAPI.ts | 47 - src/base/Provider.ts | 1 - src/base/VerifyingPaymasterAPI.ts | 2 +- src/base/calcPreVerificationGas.ts | 49 +- src/base/index.ts | 1 - src/common/ERC4337Utils.ts | 3 +- src/common/OperationUtils.ts | 2 +- src/common/getHttpRpcClient.ts | 7 - src/contracts/common.ts | 28 +- .../IERC1822Proxiable__factory.ts | 39 + .../proxy/ERC1967/ERC1967Upgrade__factory.ts | 71 ++ .../proxy/beacon/IBeacon__factory.ts | 39 + .../proxy/utils/Initializable__factory.ts | 39 + .../proxy/utils/UUPSUpgradeable__factory.ts | 115 ++ .../ERC1155/IERC1155Receiver__factory.ts | 123 ++ .../contracts/token/ERC20/IERC20__factory.ts | 206 ++++ .../token/ERC721/IERC721Receiver__factory.ts | 60 + .../token/ERC777/IERC777Recipient__factory.ts | 64 + .../utils/introspection/IERC165__factory.ts | 45 + .../aa-4337/bls/BLSAccountFactory__factory.ts | 128 +- .../src/aa-4337/bls/BLSAccount__factory.ts | 381 ++++-- .../bls/BLSSignatureAggregator__factory.ts | 2 +- .../src/aa-4337/bls/lib/BLSOpen__factory.ts | 2 +- ...PairingPrecompileCostEstimator__factory.ts | 2 +- .../callback/TokenCallbackHandler__factory.ts | 236 ++++ .../src/{libs => aa-4337/callback}/index.ts | 2 +- .../src/aa-4337/core/EntryPoint__factory.ts | 2 +- .../aa-4337/core/SenderCreator__factory.ts | 2 +- src/contracts/factories/src/aa-4337/index.ts | 1 + .../samples/DepositPaymaster__factory.ts | 2 +- .../samples/SimpleAccountFactory__factory.ts | 144 --- .../aa-4337/samples/SimpleAccount__factory.ts | 421 ------- .../TestAggregatedAccountFactory__factory.ts | 12 +- .../samples/TestAggregatedAccount__factory.ts | 352 ++++-- .../samples/TokenPaymaster__factory.ts | 2 +- .../samples/VerifyingPaymaster__factory.ts | 2 +- .../BrokenBLSAccountFactory__factory.ts | 12 +- .../BrokenBLSAccount__factory.ts | 379 ++++-- .../aa-4337/test/MaliciousAccount__factory.ts | 2 +- .../TestAggregatedAccountFactory__factory.ts | 12 +- .../test/TestAggregatedAccount__factory.ts | 352 ++++-- .../src/aa-4337/test/TestCounter__factory.ts | 2 +- .../test/TestExpirePaymaster__factory.ts | 2 +- .../test/TestExpiryAccount__factory.ts | 362 ++++-- .../src/aa-4337/test/TestHelpers__factory.ts | 2 +- .../src/aa-4337/test/TestOracle__factory.ts | 2 +- .../test/TestPaymasterAcceptAll__factory.ts | 2 +- .../test/TestRevertAccount__factory.ts | 2 +- .../test/TestSignatureAggregator__factory.ts | 2 +- .../src/aa-4337/test/TestToken__factory.ts | 2 +- .../src/aa-4337/test/TestUtil__factory.ts | 2 +- .../test/TestWarmColdAccount__factory.ts | 2 +- .../factories/src/access/Guarded__factory.ts | 105 ++ .../factories/src/access/Owned__factory.ts | 102 ++ src/contracts/factories/src/access/index.ts | 5 + .../AccountController__factory.ts | 195 --- .../AccountRegistryMock__factory.ts | 139 --- .../Account__factory.ts | 167 --- .../GatewayRecipient__factory.ts | 81 -- .../PersonalAccountRegistry__factory.ts | 587 --------- .../backward_compatibility_helpers/index.ts | 8 - .../IERC1271Wallet__factory.ts | 50 + .../UniversalSigValidator__factory.ts | 181 +++ .../ValidateSigOffchain__factory.ts | 107 ++ .../UniversalSignatureValidator.sol/index.ts | 6 + .../factories/src/{test => helpers}/index.ts | 2 +- src/contracts/factories/src/index.ts | 5 +- ...ory.ts => IEtherspotPaymaster__factory.ts} | 49 +- .../interfaces/IEtherspotWallet__factory.ts | 244 ++++ .../factories/src/interfaces/index.ts | 3 +- .../src/libs/ValidationConstants__factory.ts | 128 -- .../paymaster/EtherspotPaymaster__factory.ts | 2 +- .../src/paymaster/Whitelist__factory.ts | 2 +- .../src/test/TestEtherspotWallet__factory.ts | 719 ----------- .../src/wallet/AccountFactory__factory.ts | 139 +++ .../wallet/EtherspotWalletFactory__factory.ts | 12 +- .../src/wallet/EtherspotWallet__factory.ts | 355 ++++-- .../helpers/AccountRegistry__factory.ts | 84 -- .../helpers/WalletCompatability__factory.ts | 287 ----- .../factories/src/wallet/helpers/index.ts | 5 - src/contracts/factories/src/wallet/index.ts | 2 +- src/contracts/index.ts | 272 +++-- .../draft-IERC1822.sol/IERC1822Proxiable.ts | 88 ++ .../contracts/proxy/ERC1967/ERC1967Upgrade.ts | 115 ++ .../contracts/proxy/beacon/IBeacon.ts} | 32 +- .../contracts/proxy/utils/Initializable.ts | 70 ++ .../contracts/proxy/utils/UUPSUpgradeable.ts | 226 ++++ .../token/ERC1155/IERC1155Receiver.ts | 231 ++++ .../contracts/token/ERC20/IERC20.ts | 342 ++++++ .../contracts/token/ERC721/IERC721Receiver.ts | 126 ++ .../token/ERC777/IERC777Recipient.ts | 138 +++ .../contracts/utils/introspection/IERC165.ts | 103 ++ src/contracts/src/aa-4337/bls/BLSAccount.ts | 993 +++++++++------ .../src/aa-4337/bls/BLSAccountFactory.ts | 64 +- .../src/aa-4337/bls/BLSSignatureAggregator.ts | 88 +- src/contracts/src/aa-4337/bls/IBLSAccount.ts | 28 +- src/contracts/src/aa-4337/bls/lib/BLSOpen.ts | 40 +- .../libs/BNPairingPrecompileCostEstimator.ts | 34 +- .../aa-4337/callback/TokenCallbackHandler.ts | 351 ++++++ .../callback}/index.ts | 2 +- src/contracts/src/aa-4337/core/BaseAccount.ts | 28 +- .../src/aa-4337/core/BasePaymaster.ts | 110 +- src/contracts/src/aa-4337/core/EntryPoint.ts | 198 +-- .../src/aa-4337/core/SenderCreator.ts | 16 +- .../src/aa-4337/core/StakeManager.ts | 102 +- src/contracts/src/aa-4337/index.ts | 2 + .../src/aa-4337/interfaces/IAccount.ts | 16 +- .../aa-4337/interfaces/IAggregatedAccount.ts | 22 +- .../src/aa-4337/interfaces/IAggregator.ts | 32 +- .../aa-4337/interfaces/ICreate2Deployer.ts | 16 +- .../src/aa-4337/interfaces/IEntryPoint.ts | 166 +-- .../src/aa-4337/interfaces/IPaymaster.ts | 22 +- .../src/aa-4337/interfaces/IStakeManager.ts | 94 +- .../src/aa-4337/samples/DepositPaymaster.ts | 190 +-- src/contracts/src/aa-4337/samples/IOracle.ts | 16 +- .../src/aa-4337/samples/SimpleAccount.ts | 599 --------- .../aa-4337/samples/TestAggregatedAccount.ts | 909 +++++++++----- .../samples/TestAggregatedAccountFactory.ts | 44 +- .../src/aa-4337/samples/TokenPaymaster.ts | 234 ++-- .../src/aa-4337/samples/VerifyingPaymaster.ts | 142 +-- .../BrokenBlsAccount.sol/BrokenBLSAccount.ts | 985 +++++++++------ .../BrokenBLSAccountFactory.ts | 44 +- .../src/aa-4337/test/MaliciousAccount.ts | 16 +- .../src/aa-4337/test/TestAggregatedAccount.ts | 901 +++++++++----- .../test/TestAggregatedAccountFactory.ts | 44 +- src/contracts/src/aa-4337/test/TestCounter.ts | 70 +- .../src/aa-4337/test/TestExpirePaymaster.ts | 110 +- .../src/aa-4337/test/TestExpiryAccount.ts | 915 +++++++++----- src/contracts/src/aa-4337/test/TestHelpers.ts | 40 +- src/contracts/src/aa-4337/test/TestOracle.ts | 16 +- .../aa-4337/test/TestPaymasterAcceptAll.ts | 110 +- .../src/aa-4337/test/TestRevertAccount.ts | 22 +- .../aa-4337/test/TestSignatureAggregator.ts | 40 +- src/contracts/src/aa-4337/test/TestToken.ts | 116 +- src/contracts/src/aa-4337/test/TestUtil.ts | 16 +- .../src/aa-4337/test/TestWarmColdAccount.ts | 40 +- src/contracts/src/access/Guarded.ts | 135 ++ src/contracts/src/access/Owned.ts | 130 ++ .../access}/index.ts | 3 +- .../backward_compatibility_helpers/Account.ts | 192 --- .../AccountController.ts | 235 ---- .../AccountRegistryMock.ts | 211 ---- .../PersonalAccountRegistry.ts | 921 -------------- .../backward_compatibility_helpers/index.ts | 8 - .../IERC1271Wallet.ts | 108 ++ .../UniversalSigValidator.ts | 223 ++++ .../ValidateSigOffchain.ts | 56 + .../UniversalSignatureValidator.sol/index.ts | 6 + src/contracts/src/helpers/index.ts | 5 + src/contracts/src/index.ts | 10 +- .../IPaymaster.ts => IEtherspotPaymaster.ts} | 93 +- .../src/interfaces/IEtherspotWallet.ts | 417 +++++++ src/contracts/src/interfaces/IWhitelist.ts | 48 +- src/contracts/src/interfaces/index.ts | 4 +- src/contracts/src/libs/ValidationConstants.ts | 201 --- src/contracts/src/libs/index.ts | 4 - .../src/paymaster/EtherspotPaymaster.ts | 248 ++-- src/contracts/src/paymaster/Whitelist.ts | 116 +- src/contracts/src/test/TestEtherspotWallet.ts | 1087 ----------------- src/contracts/src/test/index.ts | 4 - .../AccountFactory.ts} | 60 +- src/contracts/src/wallet/EtherspotWallet.ts | 871 ++++++++----- .../src/wallet/EtherspotWalletFactory.ts | 44 +- .../src/wallet/helpers/AccountRegistry.ts | 169 --- .../src/wallet/helpers/WalletCompatability.ts | 436 ------- src/contracts/src/wallet/helpers/index.ts | 5 - src/contracts/src/wallet/index.ts | 3 +- src/sdk.ts | 32 +- 184 files changed, 12247 insertions(+), 11893 deletions(-) delete mode 100644 examples/00-test-initcode.ts delete mode 100644 examples/03-batch-erc20-transfer.ts create mode 100644 examples/03-transfer-erc20.ts create mode 100644 examples/05-batch-erc20-transfer.ts delete mode 100644 src/base/PersonalAccountRegistryAPI.ts delete mode 100644 src/common/getHttpRpcClient.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts create mode 100644 src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts create mode 100644 src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts rename src/contracts/factories/src/{libs => aa-4337/callback}/index.ts (52%) delete mode 100644 src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts delete mode 100644 src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts create mode 100644 src/contracts/factories/src/access/Guarded__factory.ts create mode 100644 src/contracts/factories/src/access/Owned__factory.ts create mode 100644 src/contracts/factories/src/access/index.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts delete mode 100644 src/contracts/factories/src/backward_compatibility_helpers/index.ts create mode 100644 src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts create mode 100644 src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts create mode 100644 src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts create mode 100644 src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts rename src/contracts/factories/src/{test => helpers}/index.ts (51%) rename src/contracts/factories/src/interfaces/{IEtherspotPaymaster.sol/IPaymaster__factory.ts => IEtherspotPaymaster__factory.ts} (82%) create mode 100644 src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts delete mode 100644 src/contracts/factories/src/libs/ValidationConstants__factory.ts delete mode 100644 src/contracts/factories/src/test/TestEtherspotWallet__factory.ts create mode 100644 src/contracts/factories/src/wallet/AccountFactory__factory.ts delete mode 100644 src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts delete mode 100644 src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts delete mode 100644 src/contracts/factories/src/wallet/helpers/index.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts rename src/contracts/src/{backward_compatibility_helpers/GatewayRecipient.ts => .deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts} (62%) create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts create mode 100644 src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts create mode 100644 src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts rename src/contracts/src/{interfaces/IEtherspotPaymaster.sol => aa-4337/callback}/index.ts (56%) delete mode 100644 src/contracts/src/aa-4337/samples/SimpleAccount.ts create mode 100644 src/contracts/src/access/Guarded.ts create mode 100644 src/contracts/src/access/Owned.ts rename src/contracts/{factories/src/interfaces/IEtherspotPaymaster.sol => src/access}/index.ts (52%) delete mode 100644 src/contracts/src/backward_compatibility_helpers/Account.ts delete mode 100644 src/contracts/src/backward_compatibility_helpers/AccountController.ts delete mode 100644 src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts delete mode 100644 src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts delete mode 100644 src/contracts/src/backward_compatibility_helpers/index.ts create mode 100644 src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts create mode 100644 src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts create mode 100644 src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts create mode 100644 src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts create mode 100644 src/contracts/src/helpers/index.ts rename src/contracts/src/interfaces/{IEtherspotPaymaster.sol/IPaymaster.ts => IEtherspotPaymaster.ts} (76%) create mode 100644 src/contracts/src/interfaces/IEtherspotWallet.ts delete mode 100644 src/contracts/src/libs/ValidationConstants.ts delete mode 100644 src/contracts/src/libs/index.ts delete mode 100644 src/contracts/src/test/TestEtherspotWallet.ts delete mode 100644 src/contracts/src/test/index.ts rename src/contracts/src/{aa-4337/samples/SimpleAccountFactory.ts => wallet/AccountFactory.ts} (70%) delete mode 100644 src/contracts/src/wallet/helpers/AccountRegistry.ts delete mode 100644 src/contracts/src/wallet/helpers/WalletCompatability.ts delete mode 100644 src/contracts/src/wallet/helpers/index.ts diff --git a/examples/00-test-initcode.ts b/examples/00-test-initcode.ts deleted file mode 100644 index c7b1f67a..00000000 --- a/examples/00-test-initcode.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Wallet, ethers, providers } from 'ethers'; -import { LiteSdk } from '../src'; - -// mumbai contract addresses -const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; -const REGISTRY_ADDRESS = '0x7EB3A038F25B9F32f8e19A7F0De83D4916030eFa'; -// const ACCOUNT_FACTORY_ADDRESS = ''; - -async function main() { - // initializating sdk... - const provider = new providers.JsonRpcProvider('https://polygon-mumbai.g.alchemy.com/v2/'); - const wallet = new Wallet('', provider); - const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - REGISTRY_ADDRESS, // personal account registry - REGISTRY_ADDRESS, // personal account registry (wallet factory) - ); - - console.log(`Wallet address: ${wallet.address}`); - - console.log('here 2'); - - // sanity check for init code - const initCode = await sdk.getAccountInitCodePAR(); - console.log(`initcode: ${initCode}`); - - console.log('here 3'); - - // creating and signing userOp... - const userOp = await sdk.sign({ - target: '0x3D8b4eE7a40d8dA040Ecd1D276219Ff7ec6B986a', // recipient - value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, - data: '0x', // calldata is empty since we just want to transfer ether - }); - userOp.initCode = await sdk.getAccountInitCodePAR(); - console.log(`Signed userOp: ${userOp}`); - - console.log('here 4'); - - // sending to the bundler... - const txHash = await sdk.send(userOp); - console.log(`Transaction hash: ${txHash}`); -} - -main() - .catch(console.error) - .finally(() => process.exit()); diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 91ac5fa0..7254dc05 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,21 +1,25 @@ import { Wallet, providers } from 'ethers'; import { LiteSdk } from '../src'; +const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; +const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; +const PROVIDER_URL: string = ''; +const PRIVATE_KEY: string = ''; + async function main() { // initializating sdk... - const provider = new providers.JsonRpcProvider(process.env.PROVIDER); - const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + const provider = new providers.JsonRpcProvider(PROVIDER_URL); + const wallet = new Wallet(PRIVATE_KEY, provider); // const wallet = Wallet.createRandom(); const sdk = new LiteSdk( wallet, // wallet - 'mumbai-aa.etherspot.dev', // bundler rpc + 'https://mumbai-bundler.etherspot.io', // bundler rpc 80001, // chain id - '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17', // entry point - '', // personal account registry - '', // etherspot wallet factory + ENTRYPOINT_ADDRESS, // entry point + WALLET_FACTORY_ADDRESS, // etherspot wallet factory ); const address = await sdk.getCounterFactualAddress(); - console.log(`AA-Wallet address: ${address}`); + console.log(`EtherspotWallet address: ${address}`); } main() diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 78f30cea..6895d1a8 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,34 +1,53 @@ -import { Wallet, ethers, providers } from 'ethers'; +import { BigNumber, Wallet, ethers, providers } from 'ethers'; import { LiteSdk } from '../src'; // mumbai contract addresses -const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; -const REGISTRY_ADDRESS = '0x'; // random for now, can update via contract -const ACCOUNT_FACTORY_ADDRESS = ''; +const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; +const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; +const PROVIDER_URL: string = ''; +const PRIVATE_KEY: string = ''; async function main() { // initializating sdk... - const provider = new providers.JsonRpcProvider(process.env.PROVIDER); - const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + const provider = new providers.JsonRpcProvider(PROVIDER_URL); + const wallet = new Wallet(PRIVATE_KEY, provider); const sdk = new LiteSdk( wallet, // wallet - process.env.BUNDLER_URL, // bundler rpc + 'https://mumbai-bundler.etherspot.io', // bundler rpc 80001, // chain id ENTRYPOINT_ADDRESS, // entry point - REGISTRY_ADDRESS, // personal account registry - ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory + WALLET_FACTORY_ADDRESS, // etherspot wallet factory ); + // get address of EtherspotWallet + const address = await sdk.getCounterFactualAddress(); + console.log('EtherspotWallet deployed at:', address); + + // check initial balance of EtherspotWallet + const balance = await provider.getBalance(address); + console.log('EtherspotWallet balance:', balance.toString()); + + // // send some funds to EtherspotWallet to prefund + // await wallet.sendTransaction({ + // to: address, // EtherspotWallet address + // data: '0x', // no data + // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC + // gasLimit: ethers.utils.hexlify(50000), + // gasPrice: await provider.getGasPrice(), + // }); + // creating and signing userOp... const userOp = await sdk.sign({ - target: '', // recipient + target: '', // recipient value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, data: '0x', // calldata is empty since we just want to transfer ether }); - console.log(`Signed userOp: ${userOp}`); // sending to the bundler... - const txHash = await sdk.send(userOp); + const uoHash = await sdk.send(userOp); + + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(uoHash); console.log(`Transaction hash: ${txHash}`); } diff --git a/examples/03-batch-erc20-transfer.ts b/examples/03-batch-erc20-transfer.ts deleted file mode 100644 index ba6e39b1..00000000 --- a/examples/03-batch-erc20-transfer.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Wallet, ethers, providers } from 'ethers'; -import { getVerifyingPaymaster } from 'src/base/VerifyingPaymasterAPI'; -import { getGasFee } from 'src/common'; -import { ERC20_ABI } from 'src/helpers/ERC20_ABI'; -import { printOp } from 'src/common/OperationUtils'; -import { getHttpRpcClient } from 'src/common/getHttpRpcClient'; -import { LiteSdk } from '../src'; - -// mumbai contract addresses -const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; -const REGISTRY_ADDRESS = ''; -const ACCOUNT_FACTORY_ADDRESS = ''; - -const token = ''; // erc20 token address -const t = ['', '', '']; // recipient address array -const amount = '1'; // transfer amount -const paymaster = false; // use paymaster? - -async function main() { - // initializating sdk... - const provider = new providers.JsonRpcProvider(process.env.PROVIDER); - // logic for paymaster implementation - // const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; - const wallet = new Wallet(process.env.PRIVATE_KEY, provider); - const sdk = new LiteSdk( - wallet, // wallet - process.env.BUNDLER_URL, // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - REGISTRY_ADDRESS, // personal account registry - ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory - ); - - const sender = await sdk.getCounterFactualAddress(); - const tkn = ethers.utils.getAddress(token); - const erc20 = new ethers.Contract(tkn, ERC20_ABI, provider); - const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); - const amt = ethers.utils.parseUnits(amount, dec); - - let dest: Array = []; - let data: Array = []; - t.map((addr) => addr.trim()).forEach((addr) => { - dest = [...dest, erc20.address]; - data = [...data, erc20.interface.encodeFunctionData('transfer', [ethers.utils.getAddress(addr), amt])]; - }); - console.log(`Batch transferring ${amount} ${sym} to ${dest.length} receipients... `); - - const ac = await sdk.getAccountContract(); - const op = await sdk.sign({ - target: sender, - data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), - ...(await getGasFee(provider)), - }); - console.log(`Signed UserOp: ${await printOp(op)}`); - - const client = await getHttpRpcClient(provider, process.env.BUNDLER_URL, ENTRYPOINT_ADDRESS); - const userOpHash = await client.sendUserOpToBundler(op); - console.log(`UserOperation hash: ${userOpHash}`); - - console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(userOpHash); - console.log(`Transaction hash: ${txHash}`); -} - -main() - .catch(console.error) - .finally(() => process.exit()); diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts new file mode 100644 index 00000000..0e65d402 --- /dev/null +++ b/examples/03-transfer-erc20.ts @@ -0,0 +1,63 @@ +import { Wallet, ethers, providers } from 'ethers'; +import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; +import { ERC20_ABI } from '../src/helpers/ERC20_ABI'; +import { getGasFee } from '../src/common'; +import { printOp } from '../src/common/OperationUtils'; +import { LiteSdk } from '../src'; + +// mumbai contract addresses +const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; +const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; +const PROVIDER_URL: string = ''; +const PRIVATE_KEY: string = ''; + +async function main() { + const tkn = '0x15805373121c549ACDDB43333c677CD5492BC5Bf'; // erc20 token address + const receiver = '0xf24133e601B4d0201510Fcfb975a419C5d2759Be'; + const amount = '0.01'; + const paymaster = false; // use paymaster? + const provider = new ethers.providers.JsonRpcProvider(PROVIDER_URL); + const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; + const wallet = new Wallet(PRIVATE_KEY, provider); + const sdk = new LiteSdk( + wallet, // wallet + 'https://mumbai-bundler.etherspot.io', // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + WALLET_FACTORY_ADDRESS, // etherspot wallet factory + ); + + // get address of EtherspotWallet + const address = await sdk.getCounterFactualAddress(); + console.log('EtherspotWallet deployed at:', address); + + const token = ethers.utils.getAddress(tkn); + const to = ethers.utils.getAddress(receiver); + const erc20 = new ethers.Contract(token, ERC20_ABI, wallet); + + // transfer some of the ERC20 token to the EtherspotWallet + // await erc20.transfer(address, ethers.utils.parseEther('5')); + console.log(`DummyToken balance of EtherspotWallet: ${await erc20.balanceOf(address)}`); + + const [symbol, decimals] = await Promise.all([erc20.symbol(), erc20.decimals()]); + const amt = ethers.utils.parseUnits(amount, decimals); + console.log(`Transferring ${amount} ${symbol}...`); + + const op = await sdk.sign({ + target: erc20.address, + data: erc20.interface.encodeFunctionData('transfer', [to, amt]), + ...(await getGasFee(provider)), + }); + console.log(`Signed UserOperation: ${await printOp(op)}`); + + const uoHash = await sdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(uoHash); + console.log(`Transaction hash: ${txHash}`); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/04-batch-transfer.ts b/examples/04-batch-transfer.ts index 96df2522..0c22baa8 100644 --- a/examples/04-batch-transfer.ts +++ b/examples/04-batch-transfer.ts @@ -1,54 +1,76 @@ import { Wallet, ethers, providers } from 'ethers'; -import { getVerifyingPaymaster } from 'src/base/VerifyingPaymasterAPI'; +import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; import { getGasFee } from '../src/common/getGasFee'; import { printOp } from '../src/common/OperationUtils'; -import { getHttpRpcClient } from '../src/common/getHttpRpcClient'; import { LiteSdk } from '../src'; // mumbai contract addresses -const ENTRYPOINT_ADDRESS = '0x1D9a2CB3638C2FC8bF9C01D088B79E75CD188b17'; -const REGISTRY_ADDRESS = ''; -const ACCOUNT_FACTORY_ADDRESS = ''; +const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; +const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; +const PROVIDER_URL: string = ''; +const PRIVATE_KEY: string = ''; export default async function main() { - const t = ['', '', '']; // recipient address array - const amount = '1'; // transfer amount + const t = [ + '0xf24133e601B4d0201510Fcfb975a419C5d2759Be', + '0xb52A8943B3Fe1ee3583bd98C8c88feBD99D41856', + '0x4Ab8aB3038056f20dB3159cBd4Ef1f607f1951C2', + ]; // recipient address array + const amount = '0.01'; // transfer amount const paymaster = false; // use paymaster? - const provider = new ethers.providers.JsonRpcProvider(process.env.PROVIDER); + const provider = new ethers.providers.JsonRpcProvider(PROVIDER_URL); // logic for paymaster implementation - // const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; - const wallet = new Wallet(process.env.PRIVATE_KEY, provider); + const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; + const wallet = new Wallet(PRIVATE_KEY, provider); const sdk = new LiteSdk( wallet, // wallet - 'mumbai-aa.etherspot.dev', // bundler rpc + 'https://mumbai-bundler.etherspot.io', // bundler rpc 80001, // chain id ENTRYPOINT_ADDRESS, // entry point - REGISTRY_ADDRESS, // personal account registry - ACCOUNT_FACTORY_ADDRESS, // etherspot wallet factory + WALLET_FACTORY_ADDRESS, // etherspot wallet factory ); + const sender = await sdk.getCounterFactualAddress(); + const balance = await provider.getBalance(sender); + console.log('EtherspotWallet balance:', balance.toString()); + + // // send some funds to EtherspotWallet to prefund + // await wallet.sendTransaction({ + // to: sender, // EtherspotWallet address + // data: '0x', // no data + // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC + // gasLimit: ethers.utils.hexlify(50000), + // gasPrice: await provider.getGasPrice(), + // }); + const ac = await sdk.getAccountContract(); const value = ethers.utils.parseEther(amount); + let dest: Array = []; let data: Array = []; - t.map((addr) => addr.trim()).forEach((addr) => { + t.map((addr) => addr.trim()).forEach(async (addr) => { dest = [...dest, sender]; - data = [...data, ac.interface.encodeFunctionData('execute', [ethers.utils.getAddress(addr), value, '0x'])]; + console.log(`dest: ${dest}`); + data = [...data, await sdk.encodeExecute(ethers.utils.getAddress(addr), value, '0x')]; }); + console.log(`Batch transferring ${amount} MATIC to ${dest.length} receipients... `); const op = await sdk.sign({ - target: sender, + target: '', data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), ...(await getGasFee(provider)), }); console.log(`Signed UserOp: ${await printOp(op)}`); - const client = await getHttpRpcClient(provider, process.env.BUNDLER_URL, ENTRYPOINT_ADDRESS); - const uoHash = await client.sendUserOpToBundler(op); + const uoHash = await sdk.send(op); console.log(`UserOpHash: ${uoHash}`); console.log('Waiting for transaction...'); const txHash = await sdk.getUserOpReceipt(uoHash); console.log(`Transaction hash: ${txHash}`); } + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/05-batch-erc20-transfer.ts b/examples/05-batch-erc20-transfer.ts new file mode 100644 index 00000000..15119ea7 --- /dev/null +++ b/examples/05-batch-erc20-transfer.ts @@ -0,0 +1,89 @@ +import { Wallet, ethers, providers } from 'ethers'; +import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; +import { getGasFee } from '../src/common'; +import { ERC20_ABI } from '../src/helpers/ERC20_ABI'; +import { printOp } from '../src/common/OperationUtils'; +import { LiteSdk } from '../src'; + +// mumbai contract addresses +const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; +const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; +const PROVIDER_URL: string = ''; +const PRIVATE_KEY: string = ''; + +const token = '0x15805373121c549ACDDB43333c677CD5492BC5Bf'; // erc20 token address +const t = [ + '0xf24133e601B4d0201510Fcfb975a419C5d2759Be', + '0xb52A8943B3Fe1ee3583bd98C8c88feBD99D41856', + '0x4Ab8aB3038056f20dB3159cBd4Ef1f607f1951C2', +]; // recipient address array +const amount = '0.01'; // transfer amount +const paymaster = false; // use paymaster? + +async function main() { + // initializating sdk... + const provider = new providers.JsonRpcProvider(PROVIDER_URL); + // logic for paymaster implementation + const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; + const wallet = new Wallet(PRIVATE_KEY, provider); + const sdk = new LiteSdk( + wallet, // wallet + 'https://mumbai-bundler.etherspot.io', // bundler rpc + 80001, // chain id + ENTRYPOINT_ADDRESS, // entry point + WALLET_FACTORY_ADDRESS, // etherspot wallet factory + ); + + const sender = await sdk.getCounterFactualAddress(); + + // check initial balance of EtherspotWallet + const balance = await provider.getBalance(sender); + console.log('EtherspotWallet balance:', balance.toString()); + + // send some funds to EtherspotWallet to prefund + // await wallet.sendTransaction({ + // to: sender, // EtherspotWallet address + // data: '0x', // no data + // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC + // gasLimit: ethers.utils.hexlify(50000), + // gasPrice: await provider.getGasPrice(), + // }); + + const tkn = ethers.utils.getAddress(token); + const erc20 = new ethers.Contract(tkn, ERC20_ABI, provider); + + // await erc20.transfer(sender, ethers.utils.parseEther('5')); + + const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); + const amt = ethers.utils.parseUnits(amount, dec); + + let dest: Array = []; + let data: Array = []; + t.map((addr) => addr.trim()).forEach((addr) => { + dest = [...dest, erc20.address]; + data = [...data, erc20.interface.encodeFunctionData('transfer', [ethers.utils.getAddress(addr), amt])]; + }); + console.log(dest); + console.log(data); + console.log(`Batch transferring ${amount} ${sym} to ${dest.length} receipients... `); + + const ac = await sdk.getAccountContract(); + + const op = await sdk.sign({ + target: '', + data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), + ...(await getGasFee(provider)), + }); + console.log(`Signed UserOp: ${await printOp(op)}`); + + const userOpHash = await sdk.send(op); + console.log(`UserOperation hash: ${userOpHash}`); + + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(userOpHash); + console.log(`Transaction hash: ${txHash}`); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/package-lock.json b/package-lock.json index c201a633..91d243c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@types/node": "13.13.9", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", + "dotenv": "^16.0.3", "ts-node": "8.10.2", "typescript": "4.5.2" } @@ -1206,6 +1207,15 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -3515,6 +3525,12 @@ "esutils": "^2.0.2" } }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true + }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", diff --git a/package.json b/package.json index d503bdef..8cc7426d 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,11 @@ "types": "./dist/index.d.ts", "scripts": { "start": "exit 1", - "00-test-initcode": "./node_modules/.bin/ts-node ./examples/00-test-initcode", "01-get-address": "./node_modules/.bin/ts-node ./examples/01-get-address", "02-transfer-funds": "./node_modules/.bin/ts-node ./examples/02-transfer-funds", + "03-transfer-erc20": "./node_modules/.bin/ts-node ./examples/03-transfer-erc20", + "04-batch-transfer": "./node_modules/.bin/ts-node ./examples/04-batch-transfer", + "05-batch-erc20-transfer": "./node_modules/.bin/ts-node ./examples/05-batch-erc20-transfer", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", @@ -46,6 +48,7 @@ "@types/node": "13.13.9", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", + "dotenv": "^16.0.3", "ts-node": "8.10.2", "typescript": "4.5.2" } diff --git a/src/base/BLSAccountAPI.ts b/src/base/BLSAccountAPI.ts index 239f2873..257b7e40 100644 --- a/src/base/BLSAccountAPI.ts +++ b/src/base/BLSAccountAPI.ts @@ -5,8 +5,8 @@ import { BLSAccountFactory, BLSAccountFactory__factory, BLSSignatureAggregator__factory, - UserOperationStruct, } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { BlsSignerFactory } from '@thehubbleproject/bls/dist/signer'; import { arrayify, hexConcat, keccak256, resolveProperties } from 'ethers/lib/utils'; @@ -63,7 +63,6 @@ export class BLSAccountAPI extends BaseAccountAPI { this.factory.address, this.factory.interface.encodeFunctionData('createAccount', [ this.entryPointAddress, - this.registryAddress, this.index, await this.getPublicKey(), ]), diff --git a/src/base/BaseAccountAPI.ts b/src/base/BaseAccountAPI.ts index c3e44131..c12e9852 100644 --- a/src/base/BaseAccountAPI.ts +++ b/src/base/BaseAccountAPI.ts @@ -1,18 +1,16 @@ import { ethers, BigNumber, BigNumberish } from 'ethers'; import { Provider } from '@ethersproject/providers'; -import { EntryPoint, EntryPoint__factory, UserOperationStruct } from '../contracts'; - +import { EntryPoint, EntryPoint__factory } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; import { resolveProperties } from 'ethers/lib/utils'; import { PaymasterAPI } from './PaymasterAPI'; import { getUserOpHash, packUserOp } from '../common'; import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; -import { Address } from 'cluster'; export interface BaseApiParams { provider: Provider; entryPointAddress: string; - registryAddress: string; accountAddress?: string; overheads?: Partial; paymasterAPI?: PaymasterAPI; @@ -42,12 +40,10 @@ export abstract class BaseAccountAPI { // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) protected readonly entryPointView: EntryPoint; - protected readonly registryView: Address; provider: Provider; overheads?: Partial; entryPointAddress: string; - registryAddress: string; accountAddress?: string; paymasterAPI?: PaymasterAPI; @@ -59,7 +55,6 @@ export abstract class BaseAccountAPI { this.provider = params.provider; this.overheads = params.overheads; this.entryPointAddress = params.entryPointAddress; - this.registryAddress = params.registryAddress; this.accountAddress = params.accountAddress; this.paymasterAPI = params.paymasterAPI; @@ -75,11 +70,6 @@ export abstract class BaseAccountAPI { throw new Error(`entryPoint not deployed at ${this.entryPointAddress}`); } - // check PersonalAccountRegistry is deployed at given address - if ((await this.provider.getCode(this.registryAddress)) === '0x') { - throw new Error(`registry not deployed at ${this.registryAddress}`); - } - await this.getAccountAddress(); return this; } @@ -137,6 +127,7 @@ export abstract class BaseAccountAPI { try { await this.entryPointView.callStatic.getSenderAddress(initCode); } catch (e: any) { + console.log(e); return e.errorArgs.sender; } throw new Error('must handle revert'); diff --git a/src/base/ERC4337EthersProvider.ts b/src/base/ERC4337EthersProvider.ts index 89e078cf..527b6c05 100644 --- a/src/base/ERC4337EthersProvider.ts +++ b/src/base/ERC4337EthersProvider.ts @@ -1,99 +1,108 @@ -import { BaseProvider, TransactionReceipt, TransactionResponse } from '@ethersproject/providers' -import { BigNumber, Signer } from 'ethers' -import { Network } from '@ethersproject/networks' -import { hexValue, resolveProperties } from 'ethers/lib/utils' +import { BaseProvider, TransactionReceipt, TransactionResponse } from '@ethersproject/providers'; +import { BigNumber, Signer } from 'ethers'; +import { Network } from '@ethersproject/networks'; +import { hexValue, resolveProperties } from 'ethers/lib/utils'; -import { ClientConfig } from './ClientConfig' -import { ERC4337EthersSigner } from './ERC4337EthersSigner' -import { UserOperationEventListener } from './UserOperationEventListener' -import { HttpRpcClient } from './HttpRpcClient' -import { EntryPoint, UserOperationStruct } from '../contracts' -import { getUserOpHash } from '../common' -import { BaseAccountAPI } from './BaseAccountAPI' +import { ClientConfig } from './ClientConfig'; +import { ERC4337EthersSigner } from './ERC4337EthersSigner'; +import { UserOperationEventListener } from './UserOperationEventListener'; +import { HttpRpcClient } from './HttpRpcClient'; +import { EntryPoint } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; +import { getUserOpHash } from '../common'; +import { BaseAccountAPI } from './BaseAccountAPI'; export class ERC4337EthersProvider extends BaseProvider { - initializedBlockNumber!: number + initializedBlockNumber!: number; - readonly signer: ERC4337EthersSigner + readonly signer: ERC4337EthersSigner; - constructor ( + constructor( readonly chainId: number, readonly config: ClientConfig, readonly originalSigner: Signer, readonly originalProvider: BaseProvider, readonly httpRpcClient: HttpRpcClient, readonly entryPoint: EntryPoint, - readonly smartAccountAPI: BaseAccountAPI + readonly smartAccountAPI: BaseAccountAPI, ) { super({ name: 'ERC-4337 Custom Network', - chainId - }) - this.signer = new ERC4337EthersSigner(config, originalSigner, this, httpRpcClient, smartAccountAPI) + chainId, + }); + this.signer = new ERC4337EthersSigner(config, originalSigner, this, httpRpcClient, smartAccountAPI); } /** * finish intializing the provider. * MUST be called after construction, before using the provider. */ - async init (): Promise { + async init(): Promise { // await this.httpRpcClient.validateChainId() - this.initializedBlockNumber = await this.originalProvider.getBlockNumber() - await this.smartAccountAPI.init() + this.initializedBlockNumber = await this.originalProvider.getBlockNumber(); + await this.smartAccountAPI.init(); // await this.signer.init() - return this + return this; } - getSigner (): ERC4337EthersSigner { - return this.signer + getSigner(): ERC4337EthersSigner { + return this.signer; } - async perform (method: string, params: any): Promise { + async perform(method: string, params: any): Promise { if (method === 'sendTransaction' || method === 'getTransactionReceipt') { // TODO: do we need 'perform' method to be available at all? // there is nobody out there to use it for ERC-4337 methods yet, we have nothing to override in fact. - throw new Error('Should not get here. Investigate.') + throw new Error('Should not get here. Investigate.'); } - return await this.originalProvider.perform(method, params) + return await this.originalProvider.perform(method, params); } - async getTransaction (transactionHash: string | Promise): Promise { + async getTransaction(transactionHash: string | Promise): Promise { // TODO - return await super.getTransaction(transactionHash) + return await super.getTransaction(transactionHash); } - async getTransactionReceipt (transactionHash: string | Promise): Promise { - const userOpHash = await transactionHash - const sender = await this.getSenderAccountAddress() + async getTransactionReceipt(transactionHash: string | Promise): Promise { + const userOpHash = await transactionHash; + const sender = await this.getSenderAccountAddress(); return await new Promise((resolve, reject) => { - new UserOperationEventListener( - resolve, reject, this.entryPoint, sender, userOpHash - ).start() - }) + new UserOperationEventListener(resolve, reject, this.entryPoint, sender, userOpHash).start(); + }); } - async getSenderAccountAddress (): Promise { - return await this.smartAccountAPI.getAccountAddress() + async getSenderAccountAddress(): Promise { + return await this.smartAccountAPI.getAccountAddress(); } - async waitForTransaction (transactionHash: string, confirmations?: number, timeout?: number): Promise { - const sender = await this.getSenderAccountAddress() + async waitForTransaction( + transactionHash: string, + confirmations?: number, + timeout?: number, + ): Promise { + const sender = await this.getSenderAccountAddress(); return await new Promise((resolve, reject) => { - const listener = new UserOperationEventListener(resolve, reject, this.entryPoint, sender, transactionHash, undefined, timeout) - listener.start() - }) + const listener = new UserOperationEventListener( + resolve, + reject, + this.entryPoint, + sender, + transactionHash, + undefined, + timeout, + ); + listener.start(); + }); } // fabricate a response in a format usable by ethers users... - async constructUserOpTransactionResponse (userOp1: UserOperationStruct): Promise { - const userOp = await resolveProperties(userOp1) - const userOpHash = getUserOpHash(userOp, this.config.entryPointAddress, this.chainId) + async constructUserOpTransactionResponse(userOp1: UserOperationStruct): Promise { + const userOp = await resolveProperties(userOp1); + const userOpHash = getUserOpHash(userOp, this.config.entryPointAddress, this.chainId); const waitPromise = new Promise((resolve, reject) => { - new UserOperationEventListener( - resolve, reject, this.entryPoint, userOp.sender, userOpHash, userOp.nonce - ).start() - }) + new UserOperationEventListener(resolve, reject, this.entryPoint, userOp.sender, userOpHash, userOp.nonce).start(); + }); return { hash: userOpHash, confirmations: 0, @@ -104,17 +113,17 @@ export class ERC4337EthersProvider extends BaseProvider { data: hexValue(userOp.callData), // should extract the actual called method from this "execFromEntryPoint()" call chainId: this.chainId, wait: async (confirmations?: number): Promise => { - const transactionReceipt = await waitPromise + const transactionReceipt = await waitPromise; if (userOp.initCode.length !== 0) { // checking if the wallet has been deployed by the transaction; it must be if we are here - await this.smartAccountAPI.checkAccountPhantom() + await this.smartAccountAPI.checkAccountPhantom(); } - return transactionReceipt - } - } + return transactionReceipt; + }, + }; } - async detectNetwork (): Promise { - return (this.originalProvider as any).detectNetwork() + async detectNetwork(): Promise { + return (this.originalProvider as any).detectNetwork(); } } diff --git a/src/base/ERC4337EthersSigner.ts b/src/base/ERC4337EthersSigner.ts index 1c24e35b..6034fef7 100644 --- a/src/base/ERC4337EthersSigner.ts +++ b/src/base/ERC4337EthersSigner.ts @@ -1,101 +1,104 @@ -import { Deferrable, defineReadOnly } from '@ethersproject/properties' -import { Provider, TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import { Signer } from '@ethersproject/abstract-signer' +import { Deferrable, defineReadOnly } from '@ethersproject/properties'; +import { Provider, TransactionRequest, TransactionResponse } from '@ethersproject/providers'; +import { Signer } from '@ethersproject/abstract-signer'; -import { Bytes } from 'ethers' -import { ERC4337EthersProvider } from './ERC4337EthersProvider' -import { ClientConfig } from './ClientConfig' -import { HttpRpcClient } from './HttpRpcClient' -import { UserOperationStruct } from '../contracts' -import { BaseAccountAPI } from './BaseAccountAPI' +import { Bytes } from 'ethers'; +import { ERC4337EthersProvider } from './ERC4337EthersProvider'; +import { ClientConfig } from './ClientConfig'; +import { HttpRpcClient } from './HttpRpcClient'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; +import { BaseAccountAPI } from './BaseAccountAPI'; export class ERC4337EthersSigner extends Signer { // TODO: we have 'erc4337provider', remove shared dependencies or avoid two-way reference - constructor ( + constructor( readonly config: ClientConfig, readonly originalSigner: Signer, readonly erc4337provider: ERC4337EthersProvider, readonly httpRpcClient: HttpRpcClient, - readonly smartAccountAPI: BaseAccountAPI) { - super() - defineReadOnly(this, 'provider', erc4337provider) + readonly smartAccountAPI: BaseAccountAPI, + ) { + super(); + defineReadOnly(this, 'provider', erc4337provider); } - address?: string + address?: string; // This one is called by Contract. It signs the request and passes in to Provider to be sent. - async sendTransaction (transaction: Deferrable): Promise { - const tx: TransactionRequest = await this.populateTransaction(transaction) - await this.verifyAllNecessaryFields(tx) + async sendTransaction(transaction: Deferrable): Promise { + const tx: TransactionRequest = await this.populateTransaction(transaction); + await this.verifyAllNecessaryFields(tx); const userOperation = await this.smartAccountAPI.createSignedUserOp({ target: tx.to ?? '', data: tx.data?.toString() ?? '', value: tx.value, - gasLimit: tx.gasLimit - }) - const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) + gasLimit: tx.gasLimit, + }); + const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation); try { - await this.httpRpcClient.sendUserOpToBundler(userOperation) + await this.httpRpcClient.sendUserOpToBundler(userOperation); } catch (error: any) { // console.error('sendUserOpToBundler failed', error) - throw this.unwrapError(error) + throw this.unwrapError(error); } // TODO: handle errors - transaction that is "rejected" by bundler is _not likely_ to ever resolve its "wait()" - return transactionResponse + return transactionResponse; } - unwrapError (errorIn: any): Error { + unwrapError(errorIn: any): Error { if (errorIn.body != null) { - const errorBody = JSON.parse(errorIn.body) - let paymasterInfo: string = '' - let failedOpMessage: string | undefined = errorBody?.error?.message + const errorBody = JSON.parse(errorIn.body); + let paymasterInfo: string = ''; + let failedOpMessage: string | undefined = errorBody?.error?.message; if (failedOpMessage?.includes('FailedOp') === true) { // TODO: better error extraction methods will be needed - const matched = failedOpMessage.match(/FailedOp\((.*)\)/) + const matched = failedOpMessage.match(/FailedOp\((.*)\)/); if (matched != null) { - const split = matched[1].split(',') - paymasterInfo = `(paymaster address: ${split[1]})` - failedOpMessage = split[2] + const split = matched[1].split(','); + paymasterInfo = `(paymaster address: ${split[1]})`; + failedOpMessage = split[2]; } } - const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo})`) - error.stack = errorIn.stack - return error + const error = new Error( + `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo})`, + ); + error.stack = errorIn.stack; + return error; } - return errorIn + return errorIn; } - async verifyAllNecessaryFields (transactionRequest: TransactionRequest): Promise { + async verifyAllNecessaryFields(transactionRequest: TransactionRequest): Promise { if (transactionRequest.to == null) { - throw new Error('Missing call target') + throw new Error('Missing call target'); } if (transactionRequest.data == null && transactionRequest.value == null) { // TBD: banning no-op UserOps seems to make sense on provider level - throw new Error('Missing call data or value') + throw new Error('Missing call data or value'); } } - connect (provider: Provider): Signer { - throw new Error('changing providers is not supported') + connect(provider: Provider): Signer { + throw new Error('changing providers is not supported'); } - async getAddress (): Promise { + async getAddress(): Promise { if (this.address == null) { - this.address = await this.erc4337provider.getSenderAccountAddress() + this.address = await this.erc4337provider.getSenderAccountAddress(); } - return this.address + return this.address; } - async signMessage (message: Bytes | string): Promise { - return await this.originalSigner.signMessage(message) + async signMessage(message: Bytes | string): Promise { + return await this.originalSigner.signMessage(message); } - async signTransaction (transaction: Deferrable): Promise { - throw new Error('not implemented') + async signTransaction(transaction: Deferrable): Promise { + throw new Error('not implemented'); } - async signUserOperation (userOperation: UserOperationStruct): Promise { - const message = await this.smartAccountAPI.getUserOpHash(userOperation) - return await this.originalSigner.signMessage(message) + async signUserOperation(userOperation: UserOperationStruct): Promise { + const message = await this.smartAccountAPI.getUserOpHash(userOperation); + return await this.originalSigner.signMessage(message); } } diff --git a/src/base/EtherspotWalletAPI.ts b/src/base/EtherspotWalletAPI.ts index 25976906..2b397afd 100644 --- a/src/base/EtherspotWalletAPI.ts +++ b/src/base/EtherspotWalletAPI.ts @@ -4,7 +4,6 @@ import { EtherspotWallet__factory, EtherspotWalletFactory, EtherspotWalletFactory__factory, - UserOperationStruct, } from '../contracts'; import { arrayify, hexConcat } from 'ethers/lib/utils'; import { Signer } from '@ethersproject/abstract-signer'; @@ -71,9 +70,11 @@ export class EtherspotWalletAPI extends BaseAccountAPI { } return hexConcat([ this.factory.address, - `0x5fbfb9cf000000000000000000000000${(await this.owner.getAddress()).slice( - 2, - )}0000000000000000000000000000000000000000000000000000000000000000`, + this.factory.interface.encodeFunctionData('createAccount', [ + await this.entryPointAddress, + await this.owner.getAddress(), + this.index, + ]), ]); } @@ -106,16 +107,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { return accountContract.updateEntryPoint(newEntryPoint); } - async updateRegistry(newRegistry: string) { - const accountContract = await this._getAccountContract(); - return accountContract.updateRegistry(newRegistry); - } - get epView() { return this.entryPointView; } - - get regView() { - return this.registryView; - } } diff --git a/src/base/HttpRpcClient.ts b/src/base/HttpRpcClient.ts index c65b8122..78466b45 100644 --- a/src/base/HttpRpcClient.ts +++ b/src/base/HttpRpcClient.ts @@ -1,7 +1,11 @@ import { JsonRpcProvider } from '@ethersproject/providers'; import { ethers } from 'ethers'; -import { hexValue } from 'ethers/lib/utils'; -import { UserOperationStruct } from '../contracts'; +import { resolveProperties } from 'ethers/lib/utils'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; +import Debug from 'debug'; +import { deepHexlify } from '../common/ERC4337Utils'; + +const debug = Debug('aa.rpc'); export class HttpRpcClient { private readonly userOpJsonRpcProvider: JsonRpcProvider; @@ -27,41 +31,41 @@ export class HttpRpcClient { } } - private hexifyUserOp(userOp: UserOperationStruct): any { - const hexifiedUserOp: any = Object.keys(userOp) - .map((key) => { - let val = (userOp as any)[key]; - if (typeof val !== 'string' || !val.startsWith('0x')) { - val = hexValue(val); - } - return [key, val]; - }) - .reduce( - (set, [k, v]) => ({ - ...set, - [k]: v, - }), - {}, - ); - return hexifiedUserOp; - } - /** * send a UserOperation to the bundler * @param userOp1 * @return userOpHash the id of this operation, for getUserOperationTransaction */ - async sendUserOpToBundler(userOp: UserOperationStruct): Promise { + async sendUserOpToBundler(userOp1: UserOperationStruct): Promise { await this.initializing; - const hexifiedUserOp = this.hexifyUserOp(userOp); + const hexifiedUserOp = deepHexlify(await resolveProperties(userOp1)); + const jsonRequestData: [UserOperationStruct, string] = [hexifiedUserOp, this.entryPointAddress]; + await this.printUserOperation('eth_sendUserOperation', jsonRequestData); return await this.userOpJsonRpcProvider.send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]); } async sendAggregatedOpsToBundler(userOps1: UserOperationStruct[]): Promise { - const hexifiedUserOps = await Promise.all(userOps1.map(async (userOp1) => await this.hexifyUserOp(userOp1))); + const hexifiedUserOps = await Promise.all(userOps1.map(async (userOp1) => await resolveProperties(userOp1))); return await this.userOpJsonRpcProvider.send('eth_sendAggregatedUserOperation', [ hexifiedUserOps, this.entryPointAddress, ]); } + + private async printUserOperation( + method: string, + [userOp1, entryPointAddress]: [UserOperationStruct, string], + ): Promise { + const userOp = await resolveProperties(userOp1); + debug( + 'sending', + method, + { + ...userOp, + // initCode: (userOp.initCode ?? '').length, + // callData: (userOp.callData ?? '').length + }, + entryPointAddress, + ); + } } diff --git a/src/base/PaymasterAPI.ts b/src/base/PaymasterAPI.ts index 44c63d33..118464b1 100644 --- a/src/base/PaymasterAPI.ts +++ b/src/base/PaymasterAPI.ts @@ -1,4 +1,4 @@ -import { UserOperationStruct } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; /** * an API to external a UserOperation with paymaster info diff --git a/src/base/PersonalAccountRegistryAPI.ts b/src/base/PersonalAccountRegistryAPI.ts deleted file mode 100644 index c30b4cf6..00000000 --- a/src/base/PersonalAccountRegistryAPI.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Contract } from 'ethers'; -import { Provider } from '@ethersproject/providers'; -import { Signer } from '@ethersproject/abstract-signer'; -import { PersonalAccountRegistry, PersonalAccountRegistry__factory } from '../contracts'; -import { hexConcat } from 'ethers/lib/utils'; - -export interface PersonalAccountRegistryApiParams { - provider: Provider; - owner: Signer; - factoryAddress?: string; - index?: number; -} - -export class PersonalAccountRegistryAPI { - provider: Provider; - factoryAddress?: string; - owner: Signer; - - factory: PersonalAccountRegistry; - - constructor(params: PersonalAccountRegistryApiParams) { - this.provider = params.provider; - this.factoryAddress = params.factoryAddress; - this.owner = params.owner; - } - - static deployAccount(factoryAddress: string, owner: string): string { - const walletFactory = new Contract(factoryAddress, ['function deployAccount(address owner)']); - - const encodedData = walletFactory.interface.encodeFunctionData('deployAccount', [owner]); - return encodedData; - } - - async getAccountInitCode(): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = PersonalAccountRegistry__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error('no factory to get initCode'); - } - } - return hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData('deployAccount', [await this.owner.getAddress()]), - ]); - } -} diff --git a/src/base/Provider.ts b/src/base/Provider.ts index 860c3991..330cc8a2 100644 --- a/src/base/Provider.ts +++ b/src/base/Provider.ts @@ -30,7 +30,6 @@ export async function wrapProvider( const smartAccountAPI = new EtherspotWalletAPI({ provider: originalProvider, entryPointAddress: entryPoint.address, - registryAddress: config.registryAddress, owner: originalSigner, factoryAddress: simpleAccountDeployer, paymasterAPI: config.paymasterAPI, diff --git a/src/base/VerifyingPaymasterAPI.ts b/src/base/VerifyingPaymasterAPI.ts index 8d09dae5..0da7e659 100644 --- a/src/base/VerifyingPaymasterAPI.ts +++ b/src/base/VerifyingPaymasterAPI.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { ethers, BytesLike } from 'ethers'; import { calcPreVerificationGas } from './calcPreVerificationGas'; import { PaymasterAPI } from './PaymasterAPI'; -import { UserOperationStruct } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { toJSON } from '../common/OperationUtils'; const SIG_SIZE = 65; diff --git a/src/base/calcPreVerificationGas.ts b/src/base/calcPreVerificationGas.ts index 23a225c3..3cadf5f2 100644 --- a/src/base/calcPreVerificationGas.ts +++ b/src/base/calcPreVerificationGas.ts @@ -1,44 +1,45 @@ -import { UserOperationStruct } from '../contracts' -import { packUserOp } from '../common' -import { arrayify, hexlify } from 'ethers/lib/utils' +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; + +import { packUserOp } from '../common'; +import { arrayify, hexlify } from 'ethers/lib/utils'; export interface GasOverheads { /** * fixed overhead for entire handleOp bundle. */ - fixed: number + fixed: number; /** * per userOp overhead, added on top of the above fixed per-bundle. */ - perUserOp: number + perUserOp: number; /** * overhead for userOp word (32 bytes) block */ - perUserOpWord: number + perUserOpWord: number; // perCallDataWord: number /** * zero byte cost, for calldata gas cost calculations */ - zeroByte: number + zeroByte: number; /** * non-zero byte cost, for calldata gas cost calculations */ - nonZeroByte: number + nonZeroByte: number; /** * expected bundle size, to split per-bundle overhead between all ops. */ - bundleSize: number + bundleSize: number; /** * expected length of the userOp signature. */ - sigSize: number + sigSize: number; } export const DefaultGasOverheads: GasOverheads = { @@ -48,8 +49,8 @@ export const DefaultGasOverheads: GasOverheads = { zeroByte: 4, nonZeroByte: 16, bundleSize: 1, - sigSize: 65 -} + sigSize: 65, +}; /** * calculate the preVerificationGas of the given UserOperation @@ -58,22 +59,20 @@ export const DefaultGasOverheads: GasOverheads = { * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself * @param overheads gas overheads to use, to override the default values */ -export function calcPreVerificationGas (userOp: Partial, overheads?: Partial): number { - const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) } +export function calcPreVerificationGas( + userOp: Partial, + overheads?: Partial, +): number { + const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) }; const p: UserOperationStruct = { // dummy values, in case the UserOp is incomplete. preVerificationGas: 21000, // dummy value, just for calldata cost signature: hexlify(Buffer.alloc(ov.sigSize, 1)), // dummy signature - ...userOp - } as any + ...userOp, + } as any; - const packed = arrayify(packUserOp(p, false)) - const callDataCost = packed.map(x => x === 0 ? ov.zeroByte : ov.nonZeroByte).reduce((sum, x) => sum + x) - const ret = Math.round( - callDataCost + - ov.fixed / ov.bundleSize + - ov.perUserOp + - ov.perUserOpWord * packed.length - ) - return ret + const packed = arrayify(packUserOp(p, false)); + const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); + const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * packed.length); + return ret; } diff --git a/src/base/index.ts b/src/base/index.ts index 7c317f83..d669b7f6 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -7,5 +7,4 @@ export { ClientConfig } from './ClientConfig'; export { HttpRpcClient } from './HttpRpcClient'; export { DeterministicDeployer } from './DeterministicDeployer'; export { BLSAccountAPI } from './BLSAccountAPI'; -export { PersonalAccountRegistryAPI } from './PersonalAccountRegistryAPI'; export * from './calcPreVerificationGas'; diff --git a/src/common/ERC4337Utils.ts b/src/common/ERC4337Utils.ts index 09a3df0d..153fd19e 100644 --- a/src/common/ERC4337Utils.ts +++ b/src/common/ERC4337Utils.ts @@ -1,5 +1,6 @@ import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from 'ethers/lib/utils'; -import { EntryPoint__factory, PersonalAccountRegistry, UserOperationStruct } from '../contracts'; +import { EntryPoint__factory } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { ethers } from 'ethers'; import { BytesLike } from '@ethersproject/bytes'; diff --git a/src/common/OperationUtils.ts b/src/common/OperationUtils.ts index 93630947..da775389 100644 --- a/src/common/OperationUtils.ts +++ b/src/common/OperationUtils.ts @@ -1,5 +1,5 @@ import { ethers } from 'ethers'; -import { UserOperationStruct } from '../contracts'; +import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; export function toJSON(op: Partial): Promise { return ethers.utils.resolveProperties(op).then((userOp) => diff --git a/src/common/getHttpRpcClient.ts b/src/common/getHttpRpcClient.ts deleted file mode 100644 index c3014451..00000000 --- a/src/common/getHttpRpcClient.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { HttpRpcClient } from '../base/HttpRpcClient'; -import { JsonRpcProvider } from '@ethersproject/providers'; - -export async function getHttpRpcClient(provider: JsonRpcProvider, bundlerUrl: string, entryPointAddress: string) { - const chainId = await provider.getNetwork().then((net) => net.chainId); - return new HttpRpcClient(bundlerUrl, entryPointAddress, chainId); -} diff --git a/src/contracts/common.ts b/src/contracts/common.ts index 35f31be9..4c90b08b 100644 --- a/src/contracts/common.ts +++ b/src/contracts/common.ts @@ -1,14 +1,18 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { Listener } from '@ethersproject/providers'; -import type { Event, EventFilter } from 'ethers'; +import type { Listener } from "@ethersproject/providers"; +import type { Event, EventFilter } from "ethers"; -export interface TypedEvent = any, TArgsObject = any> extends Event { +export interface TypedEvent< + TArgsArray extends Array = any, + TArgsObject = any +> extends Event { args: TArgsArray & TArgsObject; } -export interface TypedEventFilter<_TEvent extends TypedEvent> extends EventFilter {} +export interface TypedEventFilter<_TEvent extends TypedEvent> + extends EventFilter {} export interface TypedListener { (...listenerArg: [...__TypechainArgsArray, TEvent]): void; @@ -17,7 +21,10 @@ export interface TypedListener { type __TypechainArgsArray = T extends TypedEvent ? U : never; export interface OnEvent { - (eventFilter: TypedEventFilter, listener: TypedListener): TRes; + ( + eventFilter: TypedEventFilter, + listener: TypedListener + ): TRes; (eventName: string, listener: Listener): TRes; } @@ -25,8 +32,15 @@ export type MinEthersFactory = { deploy(...a: ARGS[]): Promise; }; -export type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; -export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; export type PromiseOrValue = T | Promise; diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts new file mode 100644 index 00000000..4c59c2f3 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC1822Proxiable, + IERC1822ProxiableInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable"; + +const _abi = [ + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC1822Proxiable__factory { + static readonly abi = _abi; + static createInterface(): IERC1822ProxiableInterface { + return new utils.Interface(_abi) as IERC1822ProxiableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC1822Proxiable { + return new Contract(address, _abi, signerOrProvider) as IERC1822Proxiable; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts new file mode 100644 index 00000000..bf69dc9c --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts @@ -0,0 +1,71 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + ERC1967Upgrade, + ERC1967UpgradeInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, +] as const; + +export class ERC1967Upgrade__factory { + static readonly abi = _abi; + static createInterface(): ERC1967UpgradeInterface { + return new utils.Interface(_abi) as ERC1967UpgradeInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ERC1967Upgrade { + return new Contract(address, _abi, signerOrProvider) as ERC1967Upgrade; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts new file mode 100644 index 00000000..eb7664a0 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IBeacon, + IBeaconInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon"; + +const _abi = [ + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IBeacon__factory { + static readonly abi = _abi; + static createInterface(): IBeaconInterface { + return new utils.Interface(_abi) as IBeaconInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IBeacon { + return new Contract(address, _abi, signerOrProvider) as IBeacon; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts new file mode 100644 index 00000000..e43ab322 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + Initializable, + InitializableInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, +] as const; + +export class Initializable__factory { + static readonly abi = _abi; + static createInterface(): InitializableInterface { + return new utils.Interface(_abi) as InitializableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Initializable { + return new Contract(address, _abi, signerOrProvider) as Initializable; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts new file mode 100644 index 00000000..f7ff6f07 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts @@ -0,0 +1,115 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + UUPSUpgradeable, + UUPSUpgradeableInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; + +export class UUPSUpgradeable__factory { + static readonly abi = _abi; + static createInterface(): UUPSUpgradeableInterface { + return new utils.Interface(_abi) as UUPSUpgradeableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): UUPSUpgradeable { + return new Contract(address, _abi, signerOrProvider) as UUPSUpgradeable; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts new file mode 100644 index 00000000..4f61b5e7 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts @@ -0,0 +1,123 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC1155Receiver, + IERC1155ReceiverInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256[]", + name: "ids", + type: "uint256[]", + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC1155BatchReceived", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256", + name: "id", + type: "uint256", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC1155Receiver__factory { + static readonly abi = _abi; + static createInterface(): IERC1155ReceiverInterface { + return new utils.Interface(_abi) as IERC1155ReceiverInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC1155Receiver { + return new Contract(address, _abi, signerOrProvider) as IERC1155Receiver; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts new file mode 100644 index 00000000..1dc0546c --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts @@ -0,0 +1,206 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20, + IERC20Interface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20"; + +const _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: "amount", + 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: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC20__factory { + static readonly abi = _abi; + static createInterface(): IERC20Interface { + return new utils.Interface(_abi) as IERC20Interface; + } + static connect(address: string, signerOrProvider: Signer | Provider): IERC20 { + return new Contract(address, _abi, signerOrProvider) as IERC20; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts new file mode 100644 index 00000000..124ccd27 --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts @@ -0,0 +1,60 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC721Receiver, + IERC721ReceiverInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC721Receiver__factory { + static readonly abi = _abi; + static createInterface(): IERC721ReceiverInterface { + return new utils.Interface(_abi) as IERC721ReceiverInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC721Receiver { + return new Contract(address, _abi, signerOrProvider) as IERC721Receiver; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts new file mode 100644 index 00000000..b58c8c2e --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts @@ -0,0 +1,64 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC777Recipient, + IERC777RecipientInterface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "userData", + type: "bytes", + }, + { + internalType: "bytes", + name: "operatorData", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC777Recipient__factory { + static readonly abi = _abi; + static createInterface(): IERC777RecipientInterface { + return new utils.Interface(_abi) as IERC777RecipientInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC777Recipient { + return new Contract(address, _abi, signerOrProvider) as IERC777Recipient; + } +} diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts new file mode 100644 index 00000000..7598938c --- /dev/null +++ b/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts @@ -0,0 +1,45 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC165, + IERC165Interface, +} from "../../../../../../../../src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC165__factory { + static readonly abi = _abi; + static createInterface(): IERC165Interface { + return new utils.Interface(_abi) as IERC165Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC165 { + return new Contract(address, _abi, signerOrProvider) as IERC165; + } +} diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts index e741a61e..f7c57e9f 100644 --- a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts @@ -1,113 +1,109 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from 'ethers'; -import type { Provider, TransactionRequest } from '@ethersproject/providers'; -import type { PromiseOrValue } from '../../../../common'; -import type { BLSAccountFactory, BLSAccountFactoryInterface } from '../../../../src/aa-4337/bls/BLSAccountFactory'; +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + BLSAccountFactory, + BLSAccountFactoryInterface, +} from "../../../../src/aa-4337/bls/BLSAccountFactory"; const _abi = [ { inputs: [ { - internalType: 'address', - name: 'aggregator', - type: 'address', + internalType: "address", + name: "aggregator", + type: "address", }, ], - stateMutability: 'nonpayable', - type: 'constructor', + stateMutability: "nonpayable", + type: "constructor", }, { inputs: [], - name: 'accountImplementation', + name: "accountImplementation", outputs: [ { - internalType: 'contract BLSAccount', - name: '', - type: 'address', + internalType: "contract BLSAccount", + name: "", + type: "address", }, ], - stateMutability: 'view', - type: 'function', + stateMutability: "view", + type: "function", }, { inputs: [ { - internalType: 'contract IEntryPoint', - name: 'entryPoint', - type: 'address', + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", }, { - internalType: 'address', - name: 'anRegistry', - type: 'address', + internalType: "uint256", + name: "salt", + type: "uint256", }, { - internalType: 'uint256', - name: 'salt', - type: 'uint256', - }, - { - internalType: 'uint256[4]', - name: 'aPublicKey', - type: 'uint256[4]', + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", }, ], - name: 'createAccount', + name: "createAccount", outputs: [ { - internalType: 'contract BLSAccount', - name: '', - type: 'address', + internalType: "contract BLSAccount", + name: "", + type: "address", }, ], - stateMutability: 'nonpayable', - type: 'function', + stateMutability: "nonpayable", + type: "function", }, { inputs: [ { - internalType: 'contract IEntryPoint', - name: 'entryPoint', - type: 'address', - }, - { - internalType: 'address', - name: 'anRegistry', - type: 'address', + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", }, { - internalType: 'uint256', - name: 'salt', - type: 'uint256', + internalType: "uint256", + name: "salt", + type: "uint256", }, { - internalType: 'uint256[4]', - name: 'aPublicKey', - type: 'uint256[4]', + internalType: "uint256[4]", + name: "aPublicKey", + type: "uint256[4]", }, ], - name: 'getAddress', + name: "getAddress", outputs: [ { - internalType: 'address', - name: '', - type: 'address', + internalType: "address", + name: "", + type: "address", }, ], - stateMutability: 'view', - type: 'function', + stateMutability: "view", + type: "function", }, ] as const; const _bytecode = - '0x60a06040523480156200001157600080fd5b5060405162005c3138038062005c31833981810160405281019062000037919062000122565b806040516200004690620000aa565b62000052919062000165565b604051809103906000f0801580156200006f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000182565b61422e8062001a0383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ea82620000bd565b9050919050565b620000fc81620000dd565b81146200010857600080fd5b50565b6000815190506200011c81620000f1565b92915050565b6000602082840312156200013b576200013a620000b8565b5b60006200014b848285016200010b565b91505092915050565b6200015f81620000dd565b82525050565b60006020820190506200017c600083018462000154565b92915050565b608051611858620001ab6000396000818160db0152818161012f01526102e301526118586000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b60405162000064919062000484565b60405180910390f35b6200008b6004803603810190620000859190620006d8565b620000fd565b6040516200009a91906200075b565b60405180910390f35b620000c16004803603810190620000bb91906200079d565b62000205565b604051620000d0919062000484565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b604051806020016200011990620003eb565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000888887604051602401620001659392919062000903565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620009d3565b604051602081830303815290604052604051602001620001df92919062000a49565b60405160208183030381529060405280519060200120620003a9565b9050949350505050565b600080829050608060003690506200021e919062000aa0565b811462000262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002599062000b3c565b60405180910390fd5b6000620002a9878787876004806020026040519081016040528092919082600460200280828437600081840152601f19601f820116905080830192505050505050620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002dd57819350505050620003a1565b8560001b7f0000000000000000000000000000000000000000000000000000000000000000898988604051602401620003199392919062000b7f565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200036c90620003eb565b62000379929190620009d3565b8190604051809103906000f59050801580156200039a573d6000803e3d6000fd5b5093505050505b949350505050565b6000620003b8838330620003c0565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c668062000bbd83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004446200043e6200043884620003f9565b62000419565b620003f9565b9050919050565b6000620004588262000423565b9050919050565b60006200046c826200044b565b9050919050565b6200047e816200045f565b82525050565b60006020820190506200049b600083018462000473565b92915050565b6000604051905090565b600080fd5b6000620004bd82620003f9565b9050919050565b6000620004d182620004b0565b9050919050565b620004e381620004c4565b8114620004ef57600080fd5b50565b6000813590506200050381620004d8565b92915050565b6200051481620004b0565b81146200052057600080fd5b50565b600081359050620005348162000509565b92915050565b6000819050919050565b6200054f816200053a565b81146200055b57600080fd5b50565b6000813590506200056f8162000544565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c5826200057a565b810181811067ffffffffffffffff82111715620005e757620005e66200058b565b5b80604052505050565b6000620005fc620004a1565b90506200060a8282620005ba565b919050565b600067ffffffffffffffff8211156200062d576200062c6200058b565b5b602082029050919050565b600080fd5b6000620006546200064e846200060f565b620005f0565b9050806020840283018581111562000671576200067062000638565b5b835b818110156200069e57806200068988826200055e565b84526020840193505060208101905062000673565b5050509392505050565b600082601f830112620006c057620006bf62000575565b5b6004620006cf8482856200063d565b91505092915050565b60008060008060e08587031215620006f557620006f4620004ab565b5b60006200070587828801620004f2565b9450506020620007188782880162000523565b93505060406200072b878288016200055e565b92505060606200073e87828801620006a8565b91505092959194509250565b6200075581620004b0565b82525050565b60006020820190506200077260008301846200074a565b92915050565b60008190508260206004028201111562000797576200079662000638565b5b92915050565b60008060008060e08587031215620007ba57620007b9620004ab565b5b6000620007ca87828801620004f2565b9450506020620007dd8782880162000523565b9350506040620007f0878288016200055e565b9250506060620008038782880162000778565b91505092959194509250565b60006200081c8262000423565b9050919050565b600062000830826200080f565b9050919050565b620008428162000823565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b62000873816200053a565b82525050565b600062000887838362000868565b60208301905092915050565b6000602082019050919050565b620008ab8162000848565b620008b7818462000853565b9250620008c4826200085e565b8060005b83811015620008fb578151620008df878262000879565b9650620008ec8362000893565b925050600181019050620008c8565b505050505050565b600060c0820190506200091a600083018662000837565b6200092960208301856200074a565b620009386040830184620008a0565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200097c5780820151818401526020810190506200095f565b838111156200098c576000848401525b50505050565b60006200099f8262000940565b620009ab81856200094b565b9350620009bd8185602086016200095c565b620009c8816200057a565b840191505092915050565b6000604082019050620009ea60008301856200074a565b8181036020830152620009fe818462000992565b90509392505050565b600081905092915050565b600062000a1f8262000940565b62000a2b818562000a07565b935062000a3d8185602086016200095c565b80840191505092915050565b600062000a57828562000a12565b915062000a65828462000a12565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000aad826200053a565b915062000aba836200053a565b92508282101562000ad05762000acf62000a71565b5b828203905092915050565b600082825260208201905092915050565b7f77726f6e67207075626b6579206f666673657400000000000000000000000000600082015250565b600062000b2460138362000adb565b915062000b318262000aec565b602082019050919050565b6000602082019050818103600083015262000b578162000b15565b9050919050565b82818337600083830152505050565b62000b7b6080838362000b5e565b5050565b600060c08201905062000b96600083018662000837565b62000ba560208301856200074a565b62000bb4604083018462000b6d565b94935050505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122037cf3c56ad5cdd126919cfa2b5c296e2127e5787a897397dced6ad1c067b8b0264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033'; + "0x60a06040523480156200001157600080fd5b5060405162008c2338038062008c2383398181016040528101906200003791906200015d565b62000053672c0cab3fa2fdacd760c01b620000e260201b60201c565b6200006f67366550da7bdcf0ff60c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a9190620001a0565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001bd565b50565b6170908062001b9383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b620001378162000118565b81146200014357600080fd5b50565b60008151905062000157816200012c565b92915050565b600060208284031215620001765762000175620000f3565b5b6000620001868482850162000146565b91505092915050565b6200019a8162000118565b82525050565b6000602082019050620001b760008301846200018f565b92915050565b6080516119ad620001e66000396000818160db0152818161039301526104ca01526119ad6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063d6752d2f146200006d578063e4f8289814620000a3575b600080fd5b62000055620000d9565b6040516200006491906200067b565b60405180910390f35b6200008b600480360381019062000085919062000765565b620000fd565b6040516200009a91906200067b565b60405180910390f35b620000c16004803603810190620000bb91906200091f565b62000456565b604051620000d091906200098c565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b600062000115677b3573b436e01c9f60c01b6200059d565b6200012b675368338029ac11d460c01b6200059d565b62000141670f57b057c8131a7060c01b6200059d565b60006200015967b87ba084fe74c7e360c01b6200059d565b8290506200017267d4a8cfa04c73302560c01b6200059d565b62000188670659402d0fc6024660c01b6200059d565b6200019e672ecf810266d3fc7160c01b6200059d565b60806000369050620001b19190620009d8565b8114620001f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ec9062000a74565b60405180910390fd5b6200020b67dd89557752bdc76e60c01b6200059d565b6200022167d73d8053d996960560c01b6200059d565b62000237671f37e4fbcac9344d60c01b6200059d565b60006200027d8686866004806020026040519081016040528092919082600460200280828437600081840152601f19601f82011690508083019250505050505062000456565b90506200029567888405c33e71695960c01b6200059d565b620002ab67c9c5e00a2cbed67760c01b6200059d565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620002dd6728e4e8e412ab1eea60c01b6200059d565b620002f367596e5b920445f87a60c01b6200059d565b60008111156200034b5762000313672a92893204078e3f60c01b6200059d565b620003296710c12da87038d0d860c01b6200059d565b6200033f67f495819f82299f0360c01b6200059d565b8193505050506200044f565b62000361674e84be33ea36d1d460c01b6200059d565b6200037767f43428063621224860c01b6200059d565b6200038d67bf8232f5991365e560c01b6200059d565b8560001b7f00000000000000000000000000000000000000000000000000000000000000008887604051602401620003c792919062000aea565b60405160208183030381529060405263a345a29c60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200041a90620005e2565b6200042792919062000ba0565b8190604051809103906000f590508015801562000448573d6000803e3d6000fd5b5093505050505b9392505050565b60006200046e67156dcd0b7146adcc60c01b6200059d565b62000484679b729a16dfe8d8e760c01b6200059d565b6200049a673e3647448ee19e5360c01b6200059d565b620005948360001b60405180602001620004b490620005e2565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008786604051602401620004fe92919062000c8f565b60405160208183030381529060405263a345a29c60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516020016200055692919062000ba0565b6040516020818303038152906040526040516020016200057892919062000cfe565b60405160208183030381529060405280519060200120620005a0565b90509392505050565b50565b6000620005af838330620005b7565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c518062000d2783390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200063b620006356200062f84620005f0565b62000610565b620005f0565b9050919050565b60006200064f826200061a565b9050919050565b6000620006638262000642565b9050919050565b620006758162000656565b82525050565b60006020820190506200069260008301846200066a565b92915050565b6000604051905090565b600080fd5b6000620006b482620005f0565b9050919050565b6000620006c882620006a7565b9050919050565b620006da81620006bb565b8114620006e657600080fd5b50565b600081359050620006fa81620006cf565b92915050565b6000819050919050565b620007158162000700565b81146200072157600080fd5b50565b60008135905062000735816200070a565b92915050565b600080fd5b6000819050826020600402820111156200075f576200075e6200073b565b5b92915050565b600080600060c08486031215620007815762000780620006a2565b5b60006200079186828701620006e9565b9350506020620007a48682870162000724565b9250506040620007b78682870162000740565b9150509250925092565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200081182620007c6565b810181811067ffffffffffffffff82111715620008335762000832620007d7565b5b80604052505050565b60006200084862000698565b905062000856828262000806565b919050565b600067ffffffffffffffff821115620008795762000878620007d7565b5b602082029050919050565b60006200089b62000895846200085b565b6200083c565b90508060208402830185811115620008b857620008b76200073b565b5b835b81811015620008e55780620008d0888262000724565b845260208401935050602081019050620008ba565b5050509392505050565b600082601f830112620009075762000906620007c1565b5b60046200091684828562000884565b91505092915050565b600080600060c084860312156200093b576200093a620006a2565b5b60006200094b86828701620006e9565b93505060206200095e8682870162000724565b92505060406200097186828701620008ef565b9150509250925092565b6200098681620006a7565b82525050565b6000602082019050620009a360008301846200097b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009e58262000700565b9150620009f28362000700565b925082820390508181111562000a0d5762000a0c620009a9565b5b92915050565b600082825260208201905092915050565b7f77726f6e67207075626b6579206f666673657400000000000000000000000000600082015250565b600062000a5c60138362000a13565b915062000a698262000a24565b602082019050919050565b6000602082019050818103600083015262000a8f8162000a4d565b9050919050565b600062000aa3826200061a565b9050919050565b600062000ab78262000a96565b9050919050565b62000ac98162000aaa565b82525050565b82818337505050565b62000ae66080838362000acf565b5050565b600060a08201905062000b01600083018562000abe565b62000b10602083018462000ad8565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000b5357808201518184015260208101905062000b36565b60008484015250505050565b600062000b6c8262000b17565b62000b78818562000b22565b935062000b8a81856020860162000b33565b62000b9581620007c6565b840191505092915050565b600060408201905062000bb760008301856200097b565b818103602083015262000bcb818462000b5f565b90509392505050565b600060049050919050565b600081905092915050565b6000819050919050565b62000bff8162000700565b82525050565b600062000c13838362000bf4565b60208301905092915050565b6000602082019050919050565b62000c378162000bd4565b62000c43818462000bdf565b925062000c508262000bea565b8060005b8381101562000c8757815162000c6b878262000c05565b965062000c788362000c1f565b92505060018101905062000c54565b505050505050565b600060a08201905062000ca6600083018562000abe565b62000cb5602083018462000c2c565b9392505050565b600081905092915050565b600062000cd48262000b17565b62000ce0818562000cbc565b935062000cf281856020860162000b33565b80840191505092915050565b600062000d0c828562000cc7565b915062000d1a828462000cc7565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206b089fb9fa01e721ff55f7a2ff20b37d3abca414e12751e067443f782ef755b164736f6c6343000811003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620070903803806200709083398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea67150ecc8052331aee60c01b6200020b60201b60201c565b62000106674eae69ced524a67560c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616cb9620003d760003960008181611a4d0152613b56015260008181611b0301528181611b9101528181612154015281816121e201526122920152616cb96000f3fe6080604052600436106101db5760003560e01c80634d44560d11610102578063a526d83b11610095578063bc197c8111610064578063bc197c811461070e578063c399ec881461074b578063e02afbae14610776578063f23a6e61146107a15761023a565b8063a526d83b14610666578063affed0e01461068f578063b0d691fe146106ba578063b61d27f6146106e55761023a565b806371404156116100d1578063714041561461059a5780638f068430146105c357806398ef1ed814610600578063a345a29c1461063d5761023a565b80634d44560d146105015780634f1ef2861461052a57806352d1902d146105465780637065cb48146105715761023a565b806318fc5c441161017a5780633659cfe6116101495780633659cfe6146104685780633a871cdd14610491578063485cc955146104ce5780634a58db19146104f75761023a565b806318fc5c44146103ae5780631b71bb6e146103d7578063245a7bfc146104005780632f54bf6e1461042b5761023a565b8063150b7a02116101b6578063150b7a02146102e257806316d434011461031f578063173825d91461035c57806318dfb3c7146103855761023a565b806223de291461023f57806301ffc9a7146102685780630c68ba21146102a55761023a565b3661023a576101f467290bbd319612162360c01b6107de565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561024b57600080fd5b5061026660048036038101906102619190614a49565b6107e1565b005b34801561027457600080fd5b5061028f600480360381019061028a9190614b70565b6107ff565b60405161029c9190614bb8565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190614bd3565b6109e4565b6040516102d99190614bb8565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614c00565b610a76565b6040516103169190614c97565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190614d14565b610ac6565b6040516103539190614bb8565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614bd3565b61149f565b005b34801561039157600080fd5b506103ac60048036038101906103a79190614e48565b611567565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190615006565b6117a5565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190614bd3565b61186d565b005b34801561040c57600080fd5b50610415611a4b565b6040516104229190615042565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190614bd3565b611a6f565b60405161045f9190614bb8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190614bd3565b611b01565b005b34801561049d57600080fd5b506104b860048036038101906104b39190615082565b611c89565b6040516104c59190615100565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190615159565b611dc7565b005b6104ff611f6d565b005b34801561050d57600080fd5b50610528600480360381019061052391906151d7565b61201e565b005b610544600480360381019061053f91906152cc565b612152565b005b34801561055257600080fd5b5061055b61228e565b6040516105689190615337565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190614bd3565b612347565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614bd3565b61240f565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190615352565b6124d7565b6040516105f79190614bb8565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190615352565b6125a4565b6040516106349190614bb8565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f91906153c6565b6127cd565b005b34801561067257600080fd5b5061068d60048036038101906106889190614bd3565b6129a5565b005b34801561069b57600080fd5b506106a4612a6d565b6040516106b19190615100565b60405180910390f35b3480156106c657600080fd5b506106cf612ad9565b6040516106dc9190615465565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190615480565b612b3f565b005b34801561071a57600080fd5b506107356004803603810190610730919061554a565b612c50565b6040516107429190614c97565b60405180910390f35b34801561075757600080fd5b50610760612ca4565b60405161076d9190615100565b60405180910390f35b34801561078257600080fd5b5061078b612d68565b60405161079891906156d1565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c391906156ec565b612def565b6040516107d59190614c97565b60405180910390f35b50565b6107f5671278753381487ed660c01b612e41565b5050505050505050565b600061081567f20d647ea02d480060c01b612e41565b61082967ffb589296d687db060c01b612e41565b61083d6727ecf9b318901df560c01b612e41565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108ba57506108b9675d4be9b73183ad3f60c01b612e44565b5b8061095a57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561093d575061093c674cb5733a4ebd736b60c01b612e44565b5b8015610959575061095867927753031b1e765d60c01b612e44565b5b5b806109dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109dc57506109db66bc16169e90631c60c01b612e44565b5b5b9050919050565b60006109fa679a530c869daa649060c01b612e4f565b610a0e677819779a5121f4ad60c01b612e4f565b610a2267dcc814792f5595a060c01b612e4f565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a8b6642558288c0c26a60c01b612e41565b610a9f670cd59c881166cff460c01b612e41565b610ab367d8d160ce8c3ef4cc60c01b612e41565b63150b7a0260e01b905095945050505050565b6000610adc6777258f39a67c0acd60c01b612e52565b610af067c9d3460cf31b367060c01b612e52565b610b0467301450deda14998860c01b612e52565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610b3467ec35fa0e327aba3360c01b612e52565b610b486757c603851350fa0960c01b612e52565b6060610b5e67ed7102d9c731614b60c01b612e52565b610b7267260c95324dc5522a60c01b612e52565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610baa91906157b5565b908a8a905092610bbc939291906157f3565b90610bc79190615846565b149050610bde67adb0f8e971c6f00460c01b612e52565b610bf26775ac95bff94d832360c01b612e52565b8015610e3f57610c0c67b7ce1fa3f7f6604d60c01b612e52565b610c20679fc1490a6707ce8260c01b612e52565b610c34679cbd4322f03dcb3060c01b612e52565b6000610c4a677c50636fd0d78e6e60c01b612e52565b610c5e67b6c96f6498872fdd60c01b612e52565b6060610c7467d225012c278bc14960c01b612e52565b888860009060208c8c9050610c8991906157b5565b92610c96939291906157f3565b810190610ca391906158a5565b809650819350829450505050610cc367414eafbc10d5dfd460c01b612e52565b610cd7679735072f1875e8c560c01b612e52565b60008503610e2357610cf367ece2f114e83cba5460c01b612e52565b610d0767bb4b7709950fab6560c01b612e52565b610d1b67e556fd7ed728116b60c01b612e52565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d4391906159a1565b6000604051808303816000865af19150503d8060008114610d80576040519150601f19603f3d011682016040523d82523d6000602084013e610d85565b606091505b5091509150610d9e675bb7adbcacc27af760c01b612e52565b610db267925a11ac41b1a62f60c01b612e52565b81610e0857610dcb674b9b350a0c4e240d60c01b612e52565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610dff9190615a02565b60405180910390fd5b610e1c67270a9300cfb5deb160c01b612e52565b5050610e38565b610e376719ddea40eb9c9d5e60c01b612e52565b5b5050610eaf565b610e53671617c5f7b544c15460c01b612e52565b610e6767152cf4f885c3c7bd60c01b612e52565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ec3678968ba2400116cd160c01b612e52565b610ed767d26f37fb13c4702060c01b612e52565b808015610ef45750610ef367e672c6829c01435e60c01b612e55565b5b80610f1b5750600083118015610f1a5750610f19672f1034641526e8e560c01b612e55565b5b5b1561118b57610f346787b8bb2f9d833b2360c01b612e52565b610f486748ed04b5790955de60c01b612e52565b610f5c67c07d3098ed811b0e60c01b612e52565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f97929190615a24565b602060405180830381865afa925050508015610fd157506040513d601f19601f82011682018060405250810190610fce9190615a69565b60015b611058573d8060008114611001576040519150601f19603f3d011682016040523d82523d6000602084013e611006565b606091505b5061101b672c516c89798db2e060c01b612e52565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161104f9190615a02565b60405180910390fd5b61106c677a7dc9015ade993760c01b612e52565b611080676bd30bd513db1c1260c01b612e52565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506110e067f77b76e97cdda63e60c01b612e52565b6110f467f2ac3b0c93d4d96060c01b612e52565b6000851480156111015750825b801561110b575086155b15611142576111246732203bac67e9a5c660c01b612e52565b61113867bacd05270bf834fa60c01b612e52565b806000526001601ffd5b61115667db508d98998fd4cb60c01b612e52565b61116a67bd809f1f7297a39860c01b612e52565b61117e671166c1324f0a4d4360c01b612e52565b8095505050505050611496565b61119f67fb73a16ec6f828a360c01b612e52565b6111b367124b4f67fba3948f60c01b612e52565b6111c767a72081e2c67a966a60c01b612e52565b6111db670ab810c1358d671760c01b612e52565b60418787905014611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890615b19565b60405180910390fd5b61123567c0b4b2b739bdbc3e60c01b612e52565b611249670f81a533fa5be34e60c01b612e52565b61125d67657c1339b273a74660c01b612e52565b60008787600090602092611273939291906157f3565b9061127e9190615846565b905061129467dc3d3b49fc92cadb60c01b612e52565b6112a86752ae34fa8263b21b60c01b612e52565b600088886020906040926112be939291906157f3565b906112c99190615846565b90506112df67301232fd22fb824c60c01b612e52565b6112f367f519c889a1cef68c60c01b612e52565b60008989604081811061130957611308615b39565b5b9050013560f81c60f81b60f81c905061132c679a20c64fb3f7324360c01b612e52565b611340678a031af26ced764160c01b612e52565b601b8160ff16141580156113585750601c8160ff1614155b156113d45761137167cd922db48d204f9b60c01b612e52565b61138567833a8605e20290ce60c01b612e52565b61139967b3da6c39eac2834e60c01b612e52565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90615bda565b60405180910390fd5b6113e8675514297355562d4860c01b612e52565b6113fc6757b333f889b6e2b360c01b612e52565b611410676603fc4d7122128560c01b612e52565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c8386866040516000815260200160405260405161144a9493929190615c16565b6020604051602081039080840390855afa15801561146c573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6114b36706cea3225e159afe60c01b6107de565b6114c767768e02f4b4fe93d060c01b6107de565b6114db67bcb43f0f61fb5a1260c01b6107de565b6114ef6705112cc091d04b2260c01b6107de565b6114f7612e60565b61150b677b6146229717de8560c01b6107de565b61151f671a91445bcd7d6a3660c01b6107de565b61153367087786fe3118ce4560c01b6107de565b6115476712ac3ecdf13b356f60c01b6107de565b61155b676a822ec913ef224160c01b6107de565b61156481612fc4565b50565b61157b670b312c177376d2f160c01b6107de565b61158f67526a718f37dbef7960c01b6107de565b6115a367bc0095b6ec842fe060c01b6107de565b6115b76765a7b825dc91e38260c01b6107de565b6115bf613240565b6115d367e65dfa654e10de0360c01b6107de565b6115e76738751a29e4bbac9a60c01b6107de565b6115fb6764a3e3565274624260c01b6107de565b61160f67e3532f2d278ffcc460c01b6107de565b61162367b28c9cc66aedc63960c01b6107de565b611637674c0d2e74d59320d660c01b6107de565b81819050848490501461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690615ccd565b60405180910390fd5b6116936733f49bcf3f677de260c01b6107de565b6116a767fda055a3194df47960c01b6107de565b6116bb670ca2693ca40a9c3d60c01b6107de565b60005b8484905081101561179e576116dd67e45fe9f7a89384cd60c01b6107de565b6116f1677885f77483c8c7a360c01b6107de565b61178b85858381811061170757611706615b39565b5b905060200201602081019061171c9190614bd3565b600085858581811061173157611730615b39565b5b90506020028101906117439190615cfc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613363565b808061179690615d5f565b9150506116be565b5050505050565b6117b967ed21d103c5ec2f5c60c01b613487565b6117cd67bee35484a90cfd2660c01b6107de565b6117e1673ceb9bb2daab856d60c01b6107de565b6117f56791fab911752e5b5c60c01b6107de565b6117fd61348a565b611811672877b8446bdb5f0060c01b6107de565b61182567b6308655670077ff60c01b613487565b61183967d26510995b69f70260c01b613487565b61184d67b279c2aefa06138660c01b613487565b611861672340f032c5d3807160c01b613487565b61186a816135a6565b50565b61188167b0e8e7fc3aed8bf060c01b6107de565b611895671246157b9919312560c01b6107de565b6118a967cbfddca365f5dede60c01b6107de565b6118b161348a565b6118c567ab4f446b15a2b75360c01b6107de565b6118d967140f31a12b03a20160c01b6107de565b6118ed67c2cd95be620e67ae60c01b6107de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390615e19565b60405180910390fd5b611970674b99dae5f525e91060c01b6107de565b61198467897f79a11a9b512360c01b6107de565b61199867f01df9d5178d9e0460c01b6107de565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516119eb929190615e39565b60405180910390a1611a076705fb80e775388d3f60c01b6107de565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611a856784c34e023fb786f860c01b613645565b611a99670d806432bac21d3b60c01b613645565b611aad679da5a6f8cf654dc360c01b613645565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690615ed4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bce613648565b73ffffffffffffffffffffffffffffffffffffffff1614611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90615f66565b60405180910390fd5b611c2d8161369f565b611c8681600067ffffffffffffffff811115611c4c57611c4b614eda565b5b6040519080825280601f01601f191660200182016040528015611c7e5781602001600182028036833780820191505090505b5060006136fa565b50565b6000611c9f674a0b745640aaacbe60c01b613868565b611cb3673643bc4d265e004d60c01b613868565b611cc767be21e9c3510eef0760c01b613868565b611ccf61386b565b611ce3670d9ae78f9ca6bca160c01b613868565b611ced8484613946565b9050611d0367bac743df019f783060c01b613868565b611d17674633441562cbb38260c01b613868565b6000848060400190611d299190615cfc565b905003611d7a57611d4467b9f604ce3adf50f460c01b613868565b611d586740dc8d2be550a2ae60c01b613868565b611d6c678d7f5bf9351f5d3760c01b613868565b611d7584613bb9565b611d8f565b611d8e67493644fd2e2f359760c01b613868565b5b611da367f86dd1b6eddb849360c01b613868565b611db767e338ec934ff31c9e60c01b613868565b611dc082613ccb565b9392505050565b611ddb67c8d7dd5c6ec287ee60c01b6107de565b60008060019054906101000a900460ff16159050808015611e0c5750600160008054906101000a900460ff1660ff16105b80611e395750611e1b30613e0c565b158015611e385750600160008054906101000a900460ff1660ff16145b5b611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f90615ff8565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611eb5576001600060016101000a81548160ff0219169083151502179055505b611ec967e0a1587b9fff733460c01b6107de565b611edd6799f49c2236f581d560c01b6107de565b611ef16713255a13306bce2760c01b6107de565b611f05679103bdf53b9e3db060c01b6107de565b611f0f8383613e2f565b8015611f685760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f5f9190616053565b60405180910390a15b505050565b611f8167a987bf12f6bf98ab60c01b6107de565b611f95671fbaaa4dbb3f884d60c01b6107de565b611fa967e797a3f7fa46660c60c01b6107de565b611fb1612ad9565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611fea9190615042565b6000604051808303818588803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b5050505050565b61203267fbabf181d33082b660c01b6107de565b61204667bee35484a90cfd2660c01b6107de565b61205a673ceb9bb2daab856d60c01b6107de565b61206e6791fab911752e5b5c60c01b6107de565b61207661348a565b61208a672877b8446bdb5f0060c01b6107de565b61209e676c6fc7cbb8b3b97860c01b6107de565b6120b267eb87ca9da684e3db60c01b6107de565b6120c6673d9d17fec85dda7860c01b6107de565b6120da675017b987e5f4e1e060c01b6107de565b6120e2612ad9565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161211c92919061607d565b600060405180830381600087803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790615ed4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661221f613648565b73ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90615f66565b60405180910390fd5b61227e8261369f565b61228a828260016136fa565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590616118565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61235b67b4c2b632b250bc6360c01b6107de565b61236f67768e02f4b4fe93d060c01b6107de565b61238367bcb43f0f61fb5a1260c01b6107de565b6123976705112cc091d04b2260c01b6107de565b61239f612e60565b6123b3677b6146229717de8560c01b6107de565b6123c76732bce9776427685f60c01b6107de565b6123db675c4d3c86a9602c6f60c01b6107de565b6123ef670877748d77ec420260c01b6107de565b6124036732ccb44361bec49260c01b6107de565b61240c81613f71565b50565b612423676bacc25ce52307dd60c01b6107de565b61243767bee35484a90cfd2660c01b6107de565b61244b673ceb9bb2daab856d60c01b6107de565b61245f6791fab911752e5b5c60c01b6107de565b61246761348a565b61247b672877b8446bdb5f0060c01b6107de565b61248f67edec01844939018360c01b6107de565b6124a3672d1676c1874371c960c01b6107de565b6124b76767895a735b76188060c01b6107de565b6124cb6762377381d2b1f71460c01b6107de565b6124d48161412f565b50565b60006124ed67a69e23ef0cf0d80560c01b612e52565b6125016789508a17c1e5baf860c01b612e52565b61251567f0e90fa9dac9b5a260c01b612e52565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612557959493929190616165565b6020604051808303816000875af1158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a91906161c8565b9050949350505050565b60006125ba678cc395c88e3ae24060c01b612e52565b6125ce670e6cd08ae62d699160c01b612e52565b6125e2671a6d203d14bbeb3560c01b612e52565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612624959493929190616165565b6020604051808303816000875af192505050801561266057506040513d601f19601f8201168201806040525081019061265d91906161c8565b60015b612798573d8060008114612690576040519150601f19603f3d011682016040523d82523d6000602084013e612695565b606091505b506126aa6763fa3d4afb8cd55b60c01b612e52565b6126be67c78e77a5e38dc67760c01b612e52565b6000815190506126d867a2319ac582c5f8b960c01b612e52565b6126ec679d791f94f379b3d460c01b612e52565b6001810361276c57612708674b6df8afb2c0610f60c01b612e52565b61271c671241dc8732fa093a60c01b612e52565b600160f81b8260008151811061273557612734615b39565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506127c5565b61278067fb87cb9c02294f9f60c01b612e52565b6127946773311759eab4f85760c01b612e52565b8082fd5b6127ac672f68b0ad8fd39c0a60c01b612e52565b6127c067ba867e4ef348d1a360c01b612e52565b809150505b949350505050565b6127e167e66a0a48020b18bd60c01b613487565b60008060019054906101000a900460ff161590508080156128125750600160008054906101000a900460ff1660ff16105b8061283f575061282130613e0c565b15801561283e5750600160008054906101000a900460ff1660ff16145b5b61287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615ff8565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156128bb576001600060016101000a81548160ff0219169083151502179055505b6128cf67ae6a72f91e70874b60c01b613487565b6128e367ee0821205d8159cd60c01b613487565b6128f767978d75b14d8f5fd160c01b613487565b61290b67c4585b825a1b006560c01b613487565b612916836000613e2f565b61292a677eddea53352c6bc060c01b613487565b61293e67aa84a389c68e565d60c01b613487565b612947826135a6565b80156129a05760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516129979190616053565b60405180910390a15b505050565b6129b9675a98b12456966aba60c01b6107de565b6129cd67bee35484a90cfd2660c01b6107de565b6129e1673ceb9bb2daab856d60c01b6107de565b6129f56791fab911752e5b5c60c01b6107de565b6129fd61348a565b612a11672877b8446bdb5f0060c01b6107de565b612a2567915d8b16ac69ed9860c01b6107de565b612a39671f5e91ee5a02596360c01b6107de565b612a4d674b8e9096393c06f860c01b6107de565b612a6167301fc09d047c18d960c01b6107de565b612a6a816142ed565b50565b6000612a8367e6997cbe175ef33460c01b6107de565b612a97677a25fccec1173dd960c01b6107de565b612aab67431301e0e2e31e9060c01b6107de565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000612aef67f561f09cfc8827bd60c01b6107de565b612b03673350b6d208da79ee60c01b6107de565b612b17671896327d0b3f375a60c01b6107de565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612b5367e2dda3667fd3757160c01b6107de565b612b6767526a718f37dbef7960c01b6107de565b612b7b67bc0095b6ec842fe060c01b6107de565b612b8f6765a7b825dc91e38260c01b6107de565b612b97613240565b612bab67e65dfa654e10de0360c01b6107de565b612bbf67aeaf6d5fe58842a960c01b6107de565b612bd367370ad7169464cc0060c01b6107de565b612be76739a00ff772ffbf9060c01b6107de565b612bfb6792e03ae1c25d108960c01b6107de565b612c4a848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613363565b50505050565b6000612c6667f6036d4dbbf1553b60c01b612e41565b612c7a67e574cfd0134a53a360c01b612e41565b612c8e67481cad8a93626dbc60c01b612e41565b63bc197c8160e01b905098975050505050505050565b6000612cba673908573a227c011760c01b6107de565b612cce67f95a3d25f4a4d56660c01b6107de565b612ce26701732dbf20a7ffe360c01b6107de565b612cea612ad9565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d229190615042565b602060405180830381865afa158015612d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d63919061620a565b905090565b612d706148bd565b612d8467c7b52116630378c860c01b613487565b612d98678e2ff3fdf4acaf5960c01b613487565b612dac67c2828d743e276c4760c01b613487565b6006600480602002604051908101604052809291908260048015612de5576020028201915b815481526020019060010190808311612dd1575b5050505050905090565b6000612e0567d55e6083e458695760c01b612e41565b612e1967229756682a8526f660c01b612e41565b612e2d672d0f5a7f66d6c2a060c01b612e41565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612e7467216671dc6f7d651060c01b6107de565b612e8867fc696b44f549a3bd60c01b6107de565b612e9c677d2f775bb38d794b60c01b6107de565b612eb0672c1b7774324d16e460c01b6107de565b612eb933611a6f565b8015612ed55750612ed4679d6b1a88bd04a29560c01b61456b565b5b80612f4357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612f265750612f2567c1169fb68056496660c01b61456b565b5b8015612f425750612f4167290c2b81e499218360c01b61456b565b5b5b80612f6f5750612f52336109e4565b8015612f6e5750612f6d6777d0513cc85b13d160c01b61456b565b5b5b612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa5906162a9565b60405180910390fd5b612fc267023020f196fe710560c01b6107de565b565b612fd867595c0e9f3251c28760c01b613645565b612fec676c9e8facf275455460c01b613645565b613000675fd1ba867bad8d9060c01b613645565b613014675d4405176a4c718660c01b613645565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990616315565b60405180910390fd5b613096678d884950e2a04aa760c01b613645565b6130aa672dca0c18590376fc60c01b613645565b6130be67a4f7a20d65860e4d60c01b613645565b6130d2675167170fc48a61af60c01b613645565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590616381565b60405180910390fd5b61317267d711364ae0826ec060c01b613645565b613186670a57bd871732b8ad60c01b613645565b61319a675d1d32267273ab9260c01b613645565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da816040516131c99190615042565b60405180910390a16131e567dcc232605f03b59860c01b613645565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6132546731b64f8837124c3160c01b6107de565b61326867648db564106906a760c01b6107de565b61327c67c4dbbfd60bd1214960c01b6107de565b6132906701512b58157c381b60c01b6107de565b613298612ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156132e257506132e16747f66328b063331a60c01b61456b565b5b8061330e57506132f133611a6f565b801561330d575061330c67e429b1ab88ceb31060c01b61456b565b5b5b61334d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334490616413565b60405180910390fd5b6133616762f06635bf7b4acd60c01b6107de565b565b61337767bdfd46f0589b81c760c01b6107de565b61338b67b0457063cebd82a360c01b6107de565b61339f675b626d0fcf3aa6ce60c01b6107de565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516133c891906159a1565b60006040518083038185875af1925050503d8060008114613405576040519150601f19603f3d011682016040523d82523d6000602084013e61340a565b606091505b5091509150613423672fb56cccf4f3b66560c01b6107de565b6134376747166df0733c52e860c01b6107de565b8161346c576134506719461c9227bd654a60c01b6107de565b6134646767b989a4f1f2a8f560c01b6107de565b805160208201fd5b61348067c859f4ceb5b7418760c01b6107de565b5050505050565b50565b61349e67851edf0db3fe6a8060c01b6107de565b6134b267765412b7902e3abf60c01b6107de565b6134c667151d6c3106b9e49760c01b6107de565b6134da671b070d07d4380e9a60c01b6107de565b6134e333611a6f565b80156134ff57506134fe67d5ef82e5a5d379e060c01b61456b565b5b8061355157503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015613550575061354f670cc2ae0862027a8c60c01b61456b565b5b5b613590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135879061647f565b60405180910390fd5b6135a467362a52eb7781e15260c01b6107de565b565b6135ba670f79f3b2c545621060c01b613487565b6135ce679177f749dac7402160c01b613487565b6135e267a8f29135febb5d1860c01b613487565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a83600682604051613614929190616563565b60405180910390a161363067140dc646a738010260c01b613487565b8060069060046136419291906148df565b5050565b50565b60006136767f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614576565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6136b3675b243153b1324c8660c01b6107de565b6136c767703050f3f8cbae0160c01b6107de565b6136db67096f3ba87c8df4a960c01b6107de565b6136ef67360d12c388c6eb2e60c01b6107de565b6136f761348a565b50565b6137267f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b614580565b60000160009054906101000a900460ff161561374a576137458361458a565b613863565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137b257506040513d601f19601f820116820180604052508101906137af91906165a2565b60015b6137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e890616641565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384d906166d3565b60405180910390fd5b50613862838383614643565b5b505050565b50565b61387f67e67927338dfde90a60c01b613868565b613893670e51b57b7e9b4da560c01b613868565b6138a767e3f66e826ec687ff60c01b613868565b6138bb6792d1df458e7acb7960c01b613868565b6138c3612ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392790616765565b60405180910390fd5b61394467f59af56761c9812d60c01b613868565b565b600061395c67fff61328a92497df60c01b613487565b6139706760e89b5edc9bd94360c01b613487565b6139846732f74a56e68a4f6c60c01b613487565b6139986785158bcad646a9c260c01b613487565b60008380604001906139aa9190615cfc565b905014613b09576139c56792beb61f921a246760c01b613487565b6139d967a730cb2679763e5060c01b613487565b6139ed670b94c44d430369ca60c01b613487565b60006139f7612d68565b604051602001613a0791906156d1565b604051602081830303815290604052805190602001209050613a336743c039253391c72660c01b613487565b613a47676d2b3941d00abe4f60c01b613487565b613a5b6702d8abfe47c24cfe60c01b613487565b80848060400190613a6c9190615cfc565b6080878060400190613a7e9190615cfc565b9050613a8a91906157b5565b908092613a99939291906157f3565b604051613aa79291906167aa565b604051809103902014613aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae69061680f565b60405180910390fd5b613b0367c5f15b669edf4bda60c01b613487565b50613b1e565b613b1d67c90b083341ee32d360c01b613487565b5b613b32677453c8b4de1dcfb460c01b613487565b613b46670a02821452c9573060c01b613487565b613bb160405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525061466f565b905092915050565b613bcd67f347b6eb768867bd60c01b6107de565b613be167e4b8fad4d2d1902a60c01b6107de565b613bf56722ce8514c24b563d60c01b6107de565b613c09676bd35fd711427f6d60c01b6107de565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613c3890616847565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614613cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cab906168c7565b60405180910390fd5b613cc8675143066244fa845f60c01b6107de565b50565b613cdf67cc5c47196db5bd6160c01b613868565b613cf3678b55e749b3c352ab60c01b613868565b613d0767e6442311764077fa60c01b613868565b60008114613df457613d23671589e0478f7a186060c01b613868565b613d3767d37e8b3807985e7360c01b613868565b613d4b67c2c62d2bb50a980360c01b613868565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051613d939061690d565b600060405180830381858888f193505050503d8060008114613dd1576040519150601f19603f3d011682016040523d82523d6000602084013e613dd6565b606091505b50509050613dee6714643eaa19656f6660c01b613868565b50613e09565b613e0867cc382f158ab6697a60c01b613868565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613e436703748e24ba0bf9ec60c01b6107de565b613e57670bc8db960be8c07860c01b6107de565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613eac67019acf8eca98742f60c01b6107de565b613ec067ffb0ee9b4a9774fe60c01b6107de565b613ec981613f71565b613edd675b78c5bf4202c90360c01b6107de565b613ef16725b6d74483d24a8260c01b6107de565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613f856717c7d6a68a08773960c01b613645565b613f9967cc8de6b882acb1a360c01b613645565b613fad671ec2242cb4213daf60c01b613645565b613fc167e7bfe4742339224760c01b613645565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561404e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140459061696e565b60405180910390fd5b614062676270d7427db14f5b60c01b613645565b6140766704aa357520b4416d60c01b613645565b61408a672b9382deb815da6060c01b613645565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3816040516140b99190615042565b60405180910390a16140d567c36c72a8ecc3a90660c01b613645565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61414367c36ba9a4464b6ea960c01b612e4f565b61415767dbc59bf60721ec3760c01b612e4f565b61416b67a9b899a25d7f84f360c01b612e4f565b61417f676ccf2b04ef43fe2c60c01b612e4f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661420b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614202906169da565b60405180910390fd5b61421f677f234f21a7a7167460c01b612e4f565b614233675dad748d723fc1a560c01b612e4f565b61424767bcc423d1b918455e60c01b612e4f565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52816040516142769190615042565b60405180910390a161429267ea5e8a43da197a0d60c01b612e4f565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61430167473271421f468fd260c01b612e4f565b6143156792976a0e8d69a1f860c01b612e4f565b6143296722fdc4cd5a73662060c01b612e4f565b61433d677f1705d0822221e360c01b612e4f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036143ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143a390616a6c565b60405180910390fd5b6143c067d29ec12c81e5975160c01b612e4f565b6143d4675ce58ff31b29be9c60c01b612e4f565b6143e867e300c4231196178660c01b612e4f565b6143fc6756d066aad6d03b2860c01b612e4f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448090616ad8565b60405180910390fd5b61449d67ceace18cb99efb4860c01b612e4f565b6144b167b298b03df19232ce60c01b612e4f565b6144c56771c3a697a02cf77360c01b612e4f565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969816040516144f49190615042565b60405180910390a1614510673094a602565cca5360c01b612e4f565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b61459381613e0c565b6145d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145c990616b6a565b60405180910390fd5b806145ff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614576565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61464c836146f3565b6000825111806146595750805b1561466a576146688383614742565b505b505050565b60006146856717718d3268584e5860c01b61476f565b6146996719e6416798285bdf60c01b61476f565b6146ad67a626d76b40db563f60c01b61476f565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6146fc8161458a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606147678383604051806060016040528060278152602001616c5d60279139614772565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161479c91906159a1565b600060405180830381855af49150503d80600081146147d7576040519150601f19603f3d011682016040523d82523d6000602084013e6147dc565b606091505b50915091506147ed868383876147f8565b925050509392505050565b6060831561485a5760008351036148525761481285613e0c565b614851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161484890616bd6565b60405180910390fd5b5b829050614865565b614864838361486d565b5b949350505050565b6000825111156148805781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148b49190616c3a565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b826004810192821561490e579160200282015b8281111561490d5782518255916020019190600101906148f2565b5b50905061491b919061491f565b5090565b5b80821115614938576000816000905550600101614920565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061497b82614950565b9050919050565b61498b81614970565b811461499657600080fd5b50565b6000813590506149a881614982565b92915050565b6000819050919050565b6149c1816149ae565b81146149cc57600080fd5b50565b6000813590506149de816149b8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614a0957614a086149e4565b5b8235905067ffffffffffffffff811115614a2657614a256149e9565b5b602083019150836001820283011115614a4257614a416149ee565b5b9250929050565b60008060008060008060008060c0898b031215614a6957614a68614946565b5b6000614a778b828c01614999565b9850506020614a888b828c01614999565b9750506040614a998b828c01614999565b9650506060614aaa8b828c016149cf565b955050608089013567ffffffffffffffff811115614acb57614aca61494b565b5b614ad78b828c016149f3565b945094505060a089013567ffffffffffffffff811115614afa57614af961494b565b5b614b068b828c016149f3565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614b4d81614b18565b8114614b5857600080fd5b50565b600081359050614b6a81614b44565b92915050565b600060208284031215614b8657614b85614946565b5b6000614b9484828501614b5b565b91505092915050565b60008115159050919050565b614bb281614b9d565b82525050565b6000602082019050614bcd6000830184614ba9565b92915050565b600060208284031215614be957614be8614946565b5b6000614bf784828501614999565b91505092915050565b600080600080600060808688031215614c1c57614c1b614946565b5b6000614c2a88828901614999565b9550506020614c3b88828901614999565b9450506040614c4c888289016149cf565b935050606086013567ffffffffffffffff811115614c6d57614c6c61494b565b5b614c79888289016149f3565b92509250509295509295909350565b614c9181614b18565b82525050565b6000602082019050614cac6000830184614c88565b92915050565b6000819050919050565b614cc581614cb2565b8114614cd057600080fd5b50565b600081359050614ce281614cbc565b92915050565b614cf181614b9d565b8114614cfc57600080fd5b50565b600081359050614d0e81614ce8565b92915050565b600080600080600060808688031215614d3057614d2f614946565b5b6000614d3e88828901614999565b9550506020614d4f88828901614cd3565b945050604086013567ffffffffffffffff811115614d7057614d6f61494b565b5b614d7c888289016149f3565b93509350506060614d8f88828901614cff565b9150509295509295909350565b60008083601f840112614db257614db16149e4565b5b8235905067ffffffffffffffff811115614dcf57614dce6149e9565b5b602083019150836020820283011115614deb57614dea6149ee565b5b9250929050565b60008083601f840112614e0857614e076149e4565b5b8235905067ffffffffffffffff811115614e2557614e246149e9565b5b602083019150836020820283011115614e4157614e406149ee565b5b9250929050565b60008060008060408587031215614e6257614e61614946565b5b600085013567ffffffffffffffff811115614e8057614e7f61494b565b5b614e8c87828801614d9c565b9450945050602085013567ffffffffffffffff811115614eaf57614eae61494b565b5b614ebb87828801614df2565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614f1282614ec9565b810181811067ffffffffffffffff82111715614f3157614f30614eda565b5b80604052505050565b6000614f4461493c565b9050614f508282614f09565b919050565b600067ffffffffffffffff821115614f7057614f6f614eda565b5b602082029050919050565b6000614f8e614f8984614f55565b614f3a565b90508060208402830185811115614fa857614fa76149ee565b5b835b81811015614fd15780614fbd88826149cf565b845260208401935050602081019050614faa565b5050509392505050565b600082601f830112614ff057614fef6149e4565b5b6004614ffd848285614f7b565b91505092915050565b60006080828403121561501c5761501b614946565b5b600061502a84828501614fdb565b91505092915050565b61503c81614970565b82525050565b60006020820190506150576000830184615033565b92915050565b600080fd5b600061016082840312156150795761507861505d565b5b81905092915050565b60008060006060848603121561509b5761509a614946565b5b600084013567ffffffffffffffff8111156150b9576150b861494b565b5b6150c586828701615062565b93505060206150d686828701614cd3565b92505060406150e7868287016149cf565b9150509250925092565b6150fa816149ae565b82525050565b600060208201905061511560008301846150f1565b92915050565b600061512682614970565b9050919050565b6151368161511b565b811461514157600080fd5b50565b6000813590506151538161512d565b92915050565b600080604083850312156151705761516f614946565b5b600061517e85828601615144565b925050602061518f85828601614999565b9150509250929050565b60006151a482614950565b9050919050565b6151b481615199565b81146151bf57600080fd5b50565b6000813590506151d1816151ab565b92915050565b600080604083850312156151ee576151ed614946565b5b60006151fc858286016151c2565b925050602061520d858286016149cf565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561523757615236614eda565b5b61524082614ec9565b9050602081019050919050565b82818337600083830152505050565b600061526f61526a8461521c565b614f3a565b90508281526020810184848401111561528b5761528a615217565b5b61529684828561524d565b509392505050565b600082601f8301126152b3576152b26149e4565b5b81356152c384826020860161525c565b91505092915050565b600080604083850312156152e3576152e2614946565b5b60006152f185828601614999565b925050602083013567ffffffffffffffff8111156153125761531161494b565b5b61531e8582860161529e565b9150509250929050565b61533181614cb2565b82525050565b600060208201905061534c6000830184615328565b92915050565b6000806000806060858703121561536c5761536b614946565b5b600061537a87828801614999565b945050602061538b87828801614cd3565b935050604085013567ffffffffffffffff8111156153ac576153ab61494b565b5b6153b8878288016149f3565b925092505092959194509250565b60008060a083850312156153dd576153dc614946565b5b60006153eb85828601615144565b92505060206153fc85828601614fdb565b9150509250929050565b6000819050919050565b600061542b61542661542184614950565b615406565b614950565b9050919050565b600061543d82615410565b9050919050565b600061544f82615432565b9050919050565b61545f81615444565b82525050565b600060208201905061547a6000830184615456565b92915050565b6000806000806060858703121561549a57615499614946565b5b60006154a887828801614999565b94505060206154b9878288016149cf565b935050604085013567ffffffffffffffff8111156154da576154d961494b565b5b6154e6878288016149f3565b925092505092959194509250565b60008083601f84011261550a576155096149e4565b5b8235905067ffffffffffffffff811115615527576155266149e9565b5b602083019150836020820283011115615543576155426149ee565b5b9250929050565b60008060008060008060008060a0898b03121561556a57615569614946565b5b60006155788b828c01614999565b98505060206155898b828c01614999565b975050604089013567ffffffffffffffff8111156155aa576155a961494b565b5b6155b68b828c016154f4565b9650965050606089013567ffffffffffffffff8111156155d9576155d861494b565b5b6155e58b828c016154f4565b9450945050608089013567ffffffffffffffff8111156156085761560761494b565b5b6156148b828c016149f3565b92509250509295985092959890939650565b600060049050919050565b600081905092915050565b6000819050919050565b61564f816149ae565b82525050565b60006156618383615646565b60208301905092915050565b6000602082019050919050565b61568381615626565b61568d8184615631565b92506156988261563c565b8060005b838110156156c95781516156b08782615655565b96506156bb8361566d565b92505060018101905061569c565b505050505050565b60006080820190506156e6600083018461567a565b92915050565b60008060008060008060a0878903121561570957615708614946565b5b600061571789828a01614999565b965050602061572889828a01614999565b955050604061573989828a016149cf565b945050606061574a89828a016149cf565b935050608087013567ffffffffffffffff81111561576b5761576a61494b565b5b61577789828a016149f3565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157c0826149ae565b91506157cb836149ae565b92508282039050818111156157e3576157e2615786565b5b92915050565b600080fd5b600080fd5b60008085851115615807576158066157e9565b5b83861115615818576158176157ee565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000615852838361582e565b8261585d8135614cb2565b9250602082101561589d576158987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615839565b831692505b505092915050565b6000806000606084860312156158be576158bd614946565b5b60006158cc868287016151c2565b935050602084013567ffffffffffffffff8111156158ed576158ec61494b565b5b6158f98682870161529e565b925050604084013567ffffffffffffffff81111561591a5761591961494b565b5b6159268682870161529e565b9150509250925092565b600081519050919050565b600081905092915050565b60005b83811015615964578082015181840152602081019050615949565b60008484015250505050565b600061597b82615930565b615985818561593b565b9350615995818560208601615946565b80840191505092915050565b60006159ad8284615970565b915081905092915050565b600082825260208201905092915050565b60006159d482615930565b6159de81856159b8565b93506159ee818560208601615946565b6159f781614ec9565b840191505092915050565b60006020820190508181036000830152615a1c81846159c9565b905092915050565b6000604082019050615a396000830185615328565b8181036020830152615a4b81846159c9565b90509392505050565b600081519050615a6381614b44565b92915050565b600060208284031215615a7f57615a7e614946565b5b6000615a8d84828501615a54565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615b03603a83615a96565b9150615b0e82615aa7565b604082019050919050565b60006020820190508181036000830152615b3281615af6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615bc4602d83615a96565b9150615bcf82615b68565b604082019050919050565b60006020820190508181036000830152615bf381615bb7565b9050919050565b600060ff82169050919050565b615c1081615bfa565b82525050565b6000608082019050615c2b6000830187615328565b615c386020830186615c07565b615c456040830185615328565b615c526060830184615328565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000615cb7603383615a96565b9150615cc282615c5b565b604082019050919050565b60006020820190508181036000830152615ce681615caa565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615d1957615d18615ced565b5b80840192508235915067ffffffffffffffff821115615d3b57615d3a615cf2565b5b602083019250600182023603831315615d5757615d56615cf7565b5b509250929050565b6000615d6a826149ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d9c57615d9b615786565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000615e03603383615a96565b9150615e0e82615da7565b604082019050919050565b60006020820190508181036000830152615e3281615df6565b9050919050565b6000604082019050615e4e6000830185615033565b615e5b6020830184615033565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000615ebe602c83615a96565b9150615ec982615e62565b604082019050919050565b60006020820190508181036000830152615eed81615eb1565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615f50602c83615a96565b9150615f5b82615ef4565b604082019050919050565b60006020820190508181036000830152615f7f81615f43565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615fe2602e83615a96565b9150615fed82615f86565b604082019050919050565b6000602082019050818103600083015261601181615fd5565b9050919050565b6000819050919050565b600061603d61603861603384616018565b615406565b615bfa565b9050919050565b61604d81616022565b82525050565b60006020820190506160686000830184616044565b92915050565b61607781615199565b82525050565b6000604082019050616092600083018561606e565b61609f60208301846150f1565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000616102603883615a96565b915061610d826160a6565b604082019050919050565b60006020820190508181036000830152616131816160f5565b9050919050565b600061614483856159b8565b935061615183858461524d565b61615a83614ec9565b840190509392505050565b600060808201905061617a6000830188615033565b6161876020830187615328565b818103604083015261619a818587616138565b90506161a96060830184614ba9565b9695505050505050565b6000815190506161c281614ce8565b92915050565b6000602082840312156161de576161dd614946565b5b60006161ec848285016161b3565b91505092915050565b600081519050616204816149b8565b92915050565b6000602082840312156162205761621f614946565b5b600061622e848285016161f5565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000616293602883615a96565b915061629e82616237565b604082019050919050565b600060208201905081810360008301526162c281616286565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b60006162ff601a83615a96565b915061630a826162c9565b602082019050919050565b6000602082019050818103600083015261632e816162f2565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b600061636b601b83615a96565b915061637682616335565b602082019050919050565b6000602082019050818103600083015261639a8161635e565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006163fd602983615a96565b9150616408826163a1565b604082019050919050565b6000602082019050818103600083015261642c816163f0565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000616469601c83615a96565b915061647482616433565b602082019050919050565b600060208201905081810360008301526164988161645c565b9050919050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006164de6164d9836164b4565b6164c1565b9050919050565b60006164f182546164cb565b9050919050565b6000600182019050919050565b61650e8161649f565b6165188184615631565b9250616523826164aa565b8060005b8381101561655b57616538826164e5565b6165428782615655565b965061654d836164f8565b925050600181019050616527565b505050505050565b6000610100820190506165796000830185616505565b616586608083018461567a565b9392505050565b60008151905061659c81614cbc565b92915050565b6000602082840312156165b8576165b7614946565b5b60006165c68482850161658d565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061662b602e83615a96565b9150616636826165cf565b604082019050919050565b6000602082019050818103600083015261665a8161661e565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006166bd602983615a96565b91506166c882616661565b604082019050919050565b600060208201905081810360008301526166ec816166b0565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061674f602483615a96565b915061675a826166f3565b604082019050919050565b6000602082019050818103600083015261677e81616742565b9050919050565b6000616791838561593b565b935061679e83858461524d565b82840190509392505050565b60006167b7828486616785565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b60006167f9600c83615a96565b9150616804826167c3565b602082019050919050565b60006020820190508181036000830152616828816167ec565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006168528261682f565b91506bffffffffffffffffffffffff82036168705761686f615786565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006168b1601f83615a96565b91506168bc8261687b565b602082019050919050565b600060208201905081810360008301526168e0816168a4565b9050919050565b50565b60006168f760008361593b565b9150616902826168e7565b600082019050919050565b6000616918826168ea565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b6000616958601883615a96565b915061696382616922565b602082019050919050565b600060208201905081810360008301526169878161694b565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006169c4602083615a96565b91506169cf8261698e565b602082019050919050565b600060208201905081810360008301526169f3816169b7565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000616a56602883615a96565b9150616a61826169fa565b604082019050919050565b60006020820190508181036000830152616a8581616a49565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b6000616ac2601c83615a96565b9150616acd82616a8c565b602082019050919050565b60006020820190508181036000830152616af181616ab5565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000616b54602d83615a96565b9150616b5f82616af8565b604082019050919050565b60006020820190508181036000830152616b8381616b47565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616bc0601d83615a96565b9150616bcb82616b8a565b602082019050919050565b60006020820190508181036000830152616bef81616bb3565b9050919050565b600081519050919050565b6000616c0c82616bf6565b616c168185615a96565b9350616c26818560208601615946565b616c2f81614ec9565b840191505092915050565b60006020820190508181036000830152616c548184616c01565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220503dca79f81fcfa07768a72159f738c20e5fe669378a45bc31e84812d4c2bdb764736f6c63430008110033"; -type BLSAccountFactoryConstructorParams = [signer?: Signer] | ConstructorParameters; +type BLSAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; -const isSuperArgs = (xs: BLSAccountFactoryConstructorParams): xs is ConstructorParameters => - xs.length > 1; +const isSuperArgs = ( + xs: BLSAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; export class BLSAccountFactory__factory extends ContractFactory { constructor(...args: BLSAccountFactoryConstructorParams) { @@ -120,13 +116,16 @@ export class BLSAccountFactory__factory extends ContractFactory { override deploy( aggregator: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise { - return super.deploy(aggregator, overrides || {}) as Promise; + return super.deploy( + aggregator, + overrides || {} + ) as Promise; } override getDeployTransaction( aggregator: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): TransactionRequest { return super.getDeployTransaction(aggregator, overrides || {}); } @@ -142,7 +141,10 @@ export class BLSAccountFactory__factory extends ContractFactory { static createInterface(): BLSAccountFactoryInterface { return new utils.Interface(_abi) as BLSAccountFactoryInterface; } - static connect(address: string, signerOrProvider: Signer | Provider): BLSAccountFactory { + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BLSAccountFactory { return new Contract(address, _abi, signerOrProvider) as BLSAccountFactory; } } diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts index ab0195ba..2e605dda 100644 --- a/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts @@ -21,6 +21,28 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -59,42 +81,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -102,24 +118,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -140,18 +176,25 @@ const _abi = [ inputs: [ { indexed: false, - internalType: "uint256[4]", - name: "oldPublicKey", - type: "uint256[4]", + internalType: "address", + name: "newOwner", + type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, - internalType: "uint256[4]", - name: "newPublicKey", - type: "uint256[4]", + internalType: "address", + name: "removedOwner", + type: "address", }, ], - name: "PublicKeyChanged", + name: "OwnerRemoved", type: "event", }, { @@ -159,18 +202,18 @@ const _abi = [ inputs: [ { indexed: false, - internalType: "address", - name: "oldRegistry", - type: "address", + internalType: "uint256[4]", + name: "oldPublicKey", + type: "uint256[4]", }, { indexed: false, - internalType: "address", - name: "newRegistry", - type: "address", + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", }, ], - name: "RegistryChanged", + name: "PublicKeyChanged", type: "event", }, { @@ -186,19 +229,6 @@ const _abi = [ name: "Upgraded", type: "event", }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "addDeposit", @@ -207,37 +237,39 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "aggregator", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_newGuardian", type: "address", }, ], - stateMutability: "view", + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, { internalType: "address", - name: "addr", + name: "_newOwner", type: "address", }, ], - name: "canImplementInterfaceForAddress", + name: "addOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "aggregator", outputs: [ { - internalType: "bytes32", + internalType: "address", name: "", - type: "bytes32", + type: "address", }, ], stateMutability: "view", @@ -332,7 +364,20 @@ const _abi = [ }, { internalType: "address", - name: "anRegistry", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", type: "address", }, { @@ -349,72 +394,131 @@ const _abi = [ { inputs: [ { - internalType: "contract IEntryPoint", - name: "anEntryPoint", + internalType: "address", + name: "_address", type: "address", }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ { internalType: "address", - name: "anRegistry", + name: "_address", type: "address", }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ { internalType: "address", - name: "anOwner", + name: "_signer", type: "address", }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "isValidSig", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, ], - name: "initialize", - outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, ], - name: "isValidSignature", + name: "isValidSigImpl", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ { - internalType: "bytes", - name: "message", - type: "bytes", + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -443,14 +547,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -458,7 +562,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -486,13 +590,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -504,16 +613,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, { internalType: "address", name: "", type: "address", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -530,16 +660,29 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", type: "address", }, ], - stateMutability: "view", + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { @@ -555,6 +698,25 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -564,17 +726,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -590,7 +752,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -606,19 +768,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -761,7 +910,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b506040516200422e3803806200422e83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516140a46200018a60003960008181610d250152611d5a015260008181610de101528181610e70015281816110a90152818161113801526111e801526140a46000f3fe60806040526004361061019f5760003560e01c80634a58db19116100ec578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b146105a0578063c399ec88146105c9578063e02afbae146105f4578063f23a6e611461061f576101a6565b8063affed0e014610521578063b0d691fe1461054c578063b61d27f614610577576101a6565b806352d1902d116100c657806352d1902d1461047557806379cbc5fa146104a05780637b103999146104cb5780638da5cb5b146104f6576101a6565b80634a58db19146104265780634d44560d146104305780634f1ef28614610459576101a6565b80631a5da6c811610159578063245a7bfc11610133578063245a7bfc14610358578063249cb3fa146103835780633659cfe6146103c05780633a871cdd146103e9576101a6565b80631a5da6c8146102c95780631b71bb6e146102f257806320c13b0b1461031b576101a6565b806223de29146101ab57806305d3177d146101d4578063150b7a02146101fd5780631626ba7e1461023a57806318dfb3c71461027757806318fc5c44146102a0576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101d260048036038101906101cd919061239c565b61065c565b005b3480156101e057600080fd5b506101fb60048036038101906101f691906125e6565b6106a1565b005b34801561020957600080fd5b50610224600480360381019061021f9190612639565b6107f4565b60405161023191906126fc565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061274d565b610809565b60405161026e91906126fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612859565b6108ec565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906128da565b6109fe565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612907565b610a12565b005b3480156102fe57600080fd5b5061031960048036038101906103149190612907565b610b26565b005b34801561032757600080fd5b50610342600480360381019061033d9190612934565b610c3d565b60405161034f91906126fc565b60405180910390f35b34801561036457600080fd5b5061036d610d23565b60405161037a91906129c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906129df565b610d47565b6040516103b79190612a2e565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612907565b610ddf565b005b3480156103f557600080fd5b50610410600480360381019061040b9190612a6e565b610f68565b60405161041d9190612aec565b60405180910390f35b61042e610fb2565b005b34801561043c57600080fd5b5061045760048036038101906104529190612b45565b611027565b005b610473600480360381019061046e9190612c3a565b6110a7565b005b34801561048157600080fd5b5061048a6111e4565b6040516104979190612a2e565b60405180910390f35b3480156104ac57600080fd5b506104b561129d565b6040516104c291906129c4565b60405180910390f35b3480156104d757600080fd5b506104e06112c1565b6040516104ed91906129c4565b60405180910390f35b34801561050257600080fd5b5061050b6112ea565b60405161051891906129c4565b60405180910390f35b34801561052d57600080fd5b50610536611310565b6040516105439190612aec565b60405180910390f35b34801561055857600080fd5b50610561611340565b60405161056e9190612cf5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612d10565b61136a565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612d84565b6113c7565b005b3480156105d557600080fd5b506105de611510565b6040516105eb9190612aec565b60405180910390f35b34801561060057600080fd5b50610609611598565b6040516106169190612e82565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190612e9d565b6115e2565b60405161065391906126fc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161068f93929190612f37565b60405180910390a15050505050505050565b60008060159054906101000a900460ff161590508080156106d457506001600060149054906101000a900460ff1660ff16105b8061070357506106e3306115f8565b15801561070257506001600060149054906101000a900460ff1660ff16145b5b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015610780576001600060156101000a81548160ff0219169083151502179055505b61078c8484600061161b565b610795826117b7565b80156107ee5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107e59190613059565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161086b94939291906130b2565b602060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ac919061312a565b6108bd5763ffffffff60e01b6108e3565b6040516020016108cc906131ae565b604051602081830303815290604052805190602001205b90509392505050565b6108f4611806565b81819050848490501461093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390613235565b60405180910390fd5b60005b848490508110156109f7576109e48585838181106109605761095f613255565b5b90506020020160208101906109759190612907565b600085858581811061098a57610989613255565b5b905060200281019061099c9190613293565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b80806109ef90613325565b91505061093f565b5050505050565b610a06611959565b610a0f816117b7565b50565b610a1a611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133e0565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610adb929190613400565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e611959565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061349b565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610bf1929190613400565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ca19594939291906134bb565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce2919061312a565b610cf35763ffffffff60e01b610d19565b604051602001610d0290613550565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610d59906135b1565b6040516020818303038152906040528051906020012084148015610da857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610dd557604051602001610dbc90613612565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ead611a21565b73ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9061372b565b60405180910390fd5b610f0c81611a78565b610f6581600067ffffffffffffffff811115610f2b57610f2a6124ba565b5b6040519080825280601f01601f191660200182016040528015610f5d5781602001600182028036833780820191505090505b506000611a83565b50565b6000610f72611bf1565b610f7c8484611c68565b90506000848060400190610f909190613293565b90501415610fa257610fa184611dbd565b5b610fab82611e6b565b9392505050565b610fba611340565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ff391906129c4565b6000604051808303818588803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b5050505050565b61102f611959565b611037611340565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161107192919061375a565b600060405180830381600087803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90613699565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611175611a21565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061372b565b60405180910390fd5b6111d482611a78565b6111e082826001611a83565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126b906137f5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611372611806565b6113c1848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506118d5565b50505050565b60008060159054906101000a900460ff161590508080156113fa57506001600060149054906101000a900460ff1660ff16105b806114295750611409306115f8565b15801561142857506001600060149054906101000a900460ff1660ff16145b5b611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612ff1565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156114a6576001600060156101000a81548160ff0219169083151502179055505b6114b184848461161b565b801561150a5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516115019190613059565b60405180910390a15b50505050565b600061151a611340565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161155291906129c4565b602060405180830381865afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611593919061382a565b905090565b6115a0612210565b600480806020026040519081016040528092919082600480156115d8576020028201915b8154815260200190600101908083116115c4575b5050505050905090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a836004826040516117e992919061391b565b60405180910390a1806004906004611802929190612232565b5050565b61180e611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061189457506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906139b7565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516118fe9190613a51565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091508161195257805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119e057503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690613ab4565b60405180910390fd5b565b6000611a4f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a80611959565b50565b611aaf7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611f11565b60000160009054906101000a900460ff1615611ad357611ace83611f1b565b611bec565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3b57506040513d601f19601f82011682018060405250810190611b389190613ae9565b60015b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613b88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613c1a565b60405180910390fd5b50611beb838383611fd4565b5b505050565b611bf9611340565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613cac565b60405180910390fd5b565b600080838060400190611c7b9190613293565b905014611d4a576000611c8c611598565b604051602001611c9c9190612e82565b60405160208183030381529060405280519060200120905080848060400190611cc59190613293565b6080878060400190611cd79190613293565b9050611ce39190613ccc565b908092611cf293929190613d0a565b604051611d00929190613d6a565b604051809103902014611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613dcf565b60405180910390fd5b505b611db560405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250612000565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611dec90613e07565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5f90613e88565b60405180910390fd5b50565b60008114611f045760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611ebb90613ece565b600060405180830381858888f193505050503d8060008114611ef9576040519150601f19603f3d011682016040523d82523d6000602084013e611efe565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611f24816115f8565b611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613f55565b60405180910390fd5b80611f907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611f07565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fdd83612048565b600082511180611fea5750805b15611ffb57611ff98383612097565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61205181611f1b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120bc8383604051806060016040528060278152602001614048602791396120c4565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120ee9190613a51565b600060405180830381855af49150503d8060008114612129576040519150601f19603f3d011682016040523d82523d6000602084013e61212e565b606091505b509150915061213f8683838761214a565b925050509392505050565b606083156121ad576000835114156121a557612165856115f8565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613fc1565b60405180910390fd5b5b8290506121b8565b6121b783836121c0565b5b949350505050565b6000825111156121d35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122079190614025565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b8260048101928215612261579160200282015b82811115612260578251825591602001919060010190612245565b5b50905061226e9190612272565b5090565b5b8082111561228b576000816000905550600101612273565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122ce826122a3565b9050919050565b6122de816122c3565b81146122e957600080fd5b50565b6000813590506122fb816122d5565b92915050565b6000819050919050565b61231481612301565b811461231f57600080fd5b50565b6000813590506123318161230b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261235c5761235b612337565b5b8235905067ffffffffffffffff8111156123795761237861233c565b5b60208301915083600182028301111561239557612394612341565b5b9250929050565b60008060008060008060008060c0898b0312156123bc576123bb612299565b5b60006123ca8b828c016122ec565b98505060206123db8b828c016122ec565b97505060406123ec8b828c016122ec565b96505060606123fd8b828c01612322565b955050608089013567ffffffffffffffff81111561241e5761241d61229e565b5b61242a8b828c01612346565b945094505060a089013567ffffffffffffffff81111561244d5761244c61229e565b5b6124598b828c01612346565b92509250509295985092959890939650565b6000612476826122c3565b9050919050565b6124868161246b565b811461249157600080fd5b50565b6000813590506124a38161247d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124f2826124a9565b810181811067ffffffffffffffff82111715612511576125106124ba565b5b80604052505050565b600061252461228f565b905061253082826124e9565b919050565b600067ffffffffffffffff8211156125505761254f6124ba565b5b602082029050919050565b600061256e61256984612535565b61251a565b9050806020840283018581111561258857612587612341565b5b835b818110156125b1578061259d8882612322565b84526020840193505060208101905061258a565b5050509392505050565b600082601f8301126125d0576125cf612337565b5b60046125dd84828561255b565b91505092915050565b600080600060c084860312156125ff576125fe612299565b5b600061260d86828701612494565b935050602061261e868287016122ec565b925050604061262f868287016125bb565b9150509250925092565b60008060008060006080868803121561265557612654612299565b5b6000612663888289016122ec565b9550506020612674888289016122ec565b945050604061268588828901612322565b935050606086013567ffffffffffffffff8111156126a6576126a561229e565b5b6126b288828901612346565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126f6816126c1565b82525050565b600060208201905061271160008301846126ed565b92915050565b6000819050919050565b61272a81612717565b811461273557600080fd5b50565b60008135905061274781612721565b92915050565b60008060006040848603121561276657612765612299565b5b600061277486828701612738565b935050602084013567ffffffffffffffff8111156127955761279461229e565b5b6127a186828701612346565b92509250509250925092565b60008083601f8401126127c3576127c2612337565b5b8235905067ffffffffffffffff8111156127e0576127df61233c565b5b6020830191508360208202830111156127fc576127fb612341565b5b9250929050565b60008083601f84011261281957612818612337565b5b8235905067ffffffffffffffff8111156128365761283561233c565b5b60208301915083602082028301111561285257612851612341565b5b9250929050565b6000806000806040858703121561287357612872612299565b5b600085013567ffffffffffffffff8111156128915761289061229e565b5b61289d878288016127ad565b9450945050602085013567ffffffffffffffff8111156128c0576128bf61229e565b5b6128cc87828801612803565b925092505092959194509250565b6000608082840312156128f0576128ef612299565b5b60006128fe848285016125bb565b91505092915050565b60006020828403121561291d5761291c612299565b5b600061292b848285016122ec565b91505092915050565b6000806000806040858703121561294e5761294d612299565b5b600085013567ffffffffffffffff81111561296c5761296b61229e565b5b61297887828801612346565b9450945050602085013567ffffffffffffffff81111561299b5761299a61229e565b5b6129a787828801612346565b925092505092959194509250565b6129be816122c3565b82525050565b60006020820190506129d960008301846129b5565b92915050565b600080604083850312156129f6576129f5612299565b5b6000612a0485828601612738565b9250506020612a15858286016122ec565b9150509250929050565b612a2881612717565b82525050565b6000602082019050612a436000830184612a1f565b92915050565b600080fd5b60006101608284031215612a6557612a64612a49565b5b81905092915050565b600080600060608486031215612a8757612a86612299565b5b600084013567ffffffffffffffff811115612aa557612aa461229e565b5b612ab186828701612a4e565b9350506020612ac286828701612738565b9250506040612ad386828701612322565b9150509250925092565b612ae681612301565b82525050565b6000602082019050612b016000830184612add565b92915050565b6000612b12826122a3565b9050919050565b612b2281612b07565b8114612b2d57600080fd5b50565b600081359050612b3f81612b19565b92915050565b60008060408385031215612b5c57612b5b612299565b5b6000612b6a85828601612b30565b9250506020612b7b85828601612322565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612ba557612ba46124ba565b5b612bae826124a9565b9050602081019050919050565b82818337600083830152505050565b6000612bdd612bd884612b8a565b61251a565b905082815260208101848484011115612bf957612bf8612b85565b5b612c04848285612bbb565b509392505050565b600082601f830112612c2157612c20612337565b5b8135612c31848260208601612bca565b91505092915050565b60008060408385031215612c5157612c50612299565b5b6000612c5f858286016122ec565b925050602083013567ffffffffffffffff811115612c8057612c7f61229e565b5b612c8c85828601612c0c565b9150509250929050565b6000819050919050565b6000612cbb612cb6612cb1846122a3565b612c96565b6122a3565b9050919050565b6000612ccd82612ca0565b9050919050565b6000612cdf82612cc2565b9050919050565b612cef81612cd4565b82525050565b6000602082019050612d0a6000830184612ce6565b92915050565b60008060008060608587031215612d2a57612d29612299565b5b6000612d38878288016122ec565b9450506020612d4987828801612322565b935050604085013567ffffffffffffffff811115612d6a57612d6961229e565b5b612d7687828801612346565b925092505092959194509250565b600080600060608486031215612d9d57612d9c612299565b5b6000612dab86828701612494565b9350506020612dbc868287016122ec565b9250506040612dcd868287016122ec565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612e0081612301565b82525050565b6000612e128383612df7565b60208301905092915050565b6000602082019050919050565b612e3481612dd7565b612e3e8184612de2565b9250612e4982612ded565b8060005b83811015612e7a578151612e618782612e06565b9650612e6c83612e1e565b925050600181019050612e4d565b505050505050565b6000608082019050612e976000830184612e2b565b92915050565b60008060008060008060a08789031215612eba57612eb9612299565b5b6000612ec889828a016122ec565b9650506020612ed989828a016122ec565b9550506040612eea89828a01612322565b9450506060612efb89828a01612322565b935050608087013567ffffffffffffffff811115612f1c57612f1b61229e565b5b612f2889828a01612346565b92509250509295509295509295565b6000606082019050612f4c60008301866129b5565b612f5960208301856129b5565b612f666040830184612add565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612fdb602e83612f6e565b9150612fe682612f7f565b604082019050919050565b6000602082019050818103600083015261300a81612fce565b9050919050565b6000819050919050565b600060ff82169050919050565b600061304361303e61303984613011565b612c96565b61301b565b9050919050565b61305381613028565b82525050565b600060208201905061306e600083018461304a565b92915050565b600082825260208201905092915050565b60006130918385613074565b935061309e838584612bbb565b6130a7836124a9565b840190509392505050565b60006060820190506130c760008301876129b5565b6130d46020830186612a1f565b81810360408301526130e7818486613085565b905095945050505050565b60008115159050919050565b613107816130f2565b811461311257600080fd5b50565b600081519050613124816130fe565b92915050565b6000602082840312156131405761313f612299565b5b600061314e84828501613115565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000613198601f83613157565b91506131a382613162565b601f82019050919050565b60006131b98261318b565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061321f603383612f6e565b915061322a826131c3565b604082019050919050565b6000602082019050818103600083015261324e81613212565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126132b0576132af613284565b5b80840192508235915067ffffffffffffffff8211156132d2576132d1613289565b5b6020830192506001820236038313156132ee576132ed61328e565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333082612301565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613363576133626132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b60006133ca603183612f6e565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b600060408201905061341560008301856129b5565b61342260208301846129b5565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613485603383612f6e565b915061349082613429565b604082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b60006060820190506134d060008301886129b5565b81810360208301526134e3818688613085565b905081810360408301526134f8818486613085565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b600061353a601d83613157565b915061354582613504565b601d82019050919050565b600061355b8261352d565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061359b601583613157565b91506135a682613565565b601582019050919050565b60006135bc8261358e565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135fc601483613157565b9150613607826135c6565b601482019050919050565b600061361d826135ef565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613683602c83612f6e565b915061368e82613627565b604082019050919050565b600060208201905081810360008301526136b281613676565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613715602c83612f6e565b9150613720826136b9565b604082019050919050565b6000602082019050818103600083015261374481613708565b9050919050565b61375481612b07565b82525050565b600060408201905061376f600083018561374b565b61377c6020830184612add565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006137df603883612f6e565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b6000815190506138248161230b565b92915050565b6000602082840312156138405761383f612299565b5b600061384e84828501613815565b91505092915050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006138966138918361386c565b613879565b9050919050565b60006138a98254613883565b9050919050565b6000600182019050919050565b6138c681613857565b6138d08184612de2565b92506138db82613862565b8060005b83811015613913576138f08261389d565b6138fa8782612e06565b9650613905836138b0565b9250506001810190506138df565b505050505050565b60006101008201905061393160008301856138bd565b61393e6080830184612e2b565b9392505050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006139a1602983612f6e565b91506139ac82613945565b604082019050919050565b600060208201905081810360008301526139d081613994565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613a0b5780820151818401526020810190506139f0565b83811115613a1a576000848401525b50505050565b6000613a2b826139d7565b613a3581856139e2565b9350613a458185602086016139ed565b80840191505092915050565b6000613a5d8284613a20565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a9e601c83612f6e565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612721565b92915050565b600060208284031215613aff57613afe612299565b5b6000613b0d84828501613ad4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b72602e83612f6e565b9150613b7d82613b16565b604082019050919050565b60006020820190508181036000830152613ba181613b65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613c04602983612f6e565b9150613c0f82613ba8565b604082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c96602483612f6e565b9150613ca182613c3a565b604082019050919050565b60006020820190508181036000830152613cc581613c89565b9050919050565b6000613cd782612301565b9150613ce283612301565b925082821015613cf557613cf46132f6565b5b828203905092915050565b600080fd5b600080fd5b60008085851115613d1e57613d1d613d00565b5b83861115613d2f57613d2e613d05565b5b6001850283019150848603905094509492505050565b6000613d5183856139e2565b9350613d5e838584612bbb565b82840190509392505050565b6000613d77828486613d45565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b6000613db9600c83612f6e565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613e1282613def565b91506bffffffffffffffffffffffff821415613e3157613e306132f6565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613e72601f83612f6e565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b50565b6000613eb86000836139e2565b9150613ec382613ea8565b600082019050919050565b6000613ed982613eab565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613f3f602d83612f6e565b9150613f4a82613ee3565b604082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613fab601d83612f6e565b9150613fb682613f75565b602082019050919050565b60006020820190508181036000830152613fda81613f9e565b9050919050565b600081519050919050565b6000613ff782613fe1565b6140018185612f6e565b93506140118185602086016139ed565b61401a816124a9565b840191505092915050565b6000602082019050818103600083015261403f8184613fec565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200ce3e6a37606025056d141d8d20647d171cde01fe1ad927bd6ef1c84a16c9bfc64736f6c634300080c0033"; + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620070903803806200709083398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea67150ecc8052331aee60c01b6200020b60201b60201c565b62000106674eae69ced524a67560c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616cb9620003d760003960008181611a4d0152613b56015260008181611b0301528181611b9101528181612154015281816121e201526122920152616cb96000f3fe6080604052600436106101db5760003560e01c80634d44560d11610102578063a526d83b11610095578063bc197c8111610064578063bc197c811461070e578063c399ec881461074b578063e02afbae14610776578063f23a6e61146107a15761023a565b8063a526d83b14610666578063affed0e01461068f578063b0d691fe146106ba578063b61d27f6146106e55761023a565b806371404156116100d1578063714041561461059a5780638f068430146105c357806398ef1ed814610600578063a345a29c1461063d5761023a565b80634d44560d146105015780634f1ef2861461052a57806352d1902d146105465780637065cb48146105715761023a565b806318fc5c441161017a5780633659cfe6116101495780633659cfe6146104685780633a871cdd14610491578063485cc955146104ce5780634a58db19146104f75761023a565b806318fc5c44146103ae5780631b71bb6e146103d7578063245a7bfc146104005780632f54bf6e1461042b5761023a565b8063150b7a02116101b6578063150b7a02146102e257806316d434011461031f578063173825d91461035c57806318dfb3c7146103855761023a565b806223de291461023f57806301ffc9a7146102685780630c68ba21146102a55761023a565b3661023a576101f467290bbd319612162360c01b6107de565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561024b57600080fd5b5061026660048036038101906102619190614a49565b6107e1565b005b34801561027457600080fd5b5061028f600480360381019061028a9190614b70565b6107ff565b60405161029c9190614bb8565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190614bd3565b6109e4565b6040516102d99190614bb8565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614c00565b610a76565b6040516103169190614c97565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190614d14565b610ac6565b6040516103539190614bb8565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614bd3565b61149f565b005b34801561039157600080fd5b506103ac60048036038101906103a79190614e48565b611567565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190615006565b6117a5565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190614bd3565b61186d565b005b34801561040c57600080fd5b50610415611a4b565b6040516104229190615042565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190614bd3565b611a6f565b60405161045f9190614bb8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190614bd3565b611b01565b005b34801561049d57600080fd5b506104b860048036038101906104b39190615082565b611c89565b6040516104c59190615100565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190615159565b611dc7565b005b6104ff611f6d565b005b34801561050d57600080fd5b50610528600480360381019061052391906151d7565b61201e565b005b610544600480360381019061053f91906152cc565b612152565b005b34801561055257600080fd5b5061055b61228e565b6040516105689190615337565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190614bd3565b612347565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614bd3565b61240f565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190615352565b6124d7565b6040516105f79190614bb8565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190615352565b6125a4565b6040516106349190614bb8565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f91906153c6565b6127cd565b005b34801561067257600080fd5b5061068d60048036038101906106889190614bd3565b6129a5565b005b34801561069b57600080fd5b506106a4612a6d565b6040516106b19190615100565b60405180910390f35b3480156106c657600080fd5b506106cf612ad9565b6040516106dc9190615465565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190615480565b612b3f565b005b34801561071a57600080fd5b506107356004803603810190610730919061554a565b612c50565b6040516107429190614c97565b60405180910390f35b34801561075757600080fd5b50610760612ca4565b60405161076d9190615100565b60405180910390f35b34801561078257600080fd5b5061078b612d68565b60405161079891906156d1565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c391906156ec565b612def565b6040516107d59190614c97565b60405180910390f35b50565b6107f5671278753381487ed660c01b612e41565b5050505050505050565b600061081567f20d647ea02d480060c01b612e41565b61082967ffb589296d687db060c01b612e41565b61083d6727ecf9b318901df560c01b612e41565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108ba57506108b9675d4be9b73183ad3f60c01b612e44565b5b8061095a57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561093d575061093c674cb5733a4ebd736b60c01b612e44565b5b8015610959575061095867927753031b1e765d60c01b612e44565b5b5b806109dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109dc57506109db66bc16169e90631c60c01b612e44565b5b5b9050919050565b60006109fa679a530c869daa649060c01b612e4f565b610a0e677819779a5121f4ad60c01b612e4f565b610a2267dcc814792f5595a060c01b612e4f565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a8b6642558288c0c26a60c01b612e41565b610a9f670cd59c881166cff460c01b612e41565b610ab367d8d160ce8c3ef4cc60c01b612e41565b63150b7a0260e01b905095945050505050565b6000610adc6777258f39a67c0acd60c01b612e52565b610af067c9d3460cf31b367060c01b612e52565b610b0467301450deda14998860c01b612e52565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610b3467ec35fa0e327aba3360c01b612e52565b610b486757c603851350fa0960c01b612e52565b6060610b5e67ed7102d9c731614b60c01b612e52565b610b7267260c95324dc5522a60c01b612e52565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610baa91906157b5565b908a8a905092610bbc939291906157f3565b90610bc79190615846565b149050610bde67adb0f8e971c6f00460c01b612e52565b610bf26775ac95bff94d832360c01b612e52565b8015610e3f57610c0c67b7ce1fa3f7f6604d60c01b612e52565b610c20679fc1490a6707ce8260c01b612e52565b610c34679cbd4322f03dcb3060c01b612e52565b6000610c4a677c50636fd0d78e6e60c01b612e52565b610c5e67b6c96f6498872fdd60c01b612e52565b6060610c7467d225012c278bc14960c01b612e52565b888860009060208c8c9050610c8991906157b5565b92610c96939291906157f3565b810190610ca391906158a5565b809650819350829450505050610cc367414eafbc10d5dfd460c01b612e52565b610cd7679735072f1875e8c560c01b612e52565b60008503610e2357610cf367ece2f114e83cba5460c01b612e52565b610d0767bb4b7709950fab6560c01b612e52565b610d1b67e556fd7ed728116b60c01b612e52565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d4391906159a1565b6000604051808303816000865af19150503d8060008114610d80576040519150601f19603f3d011682016040523d82523d6000602084013e610d85565b606091505b5091509150610d9e675bb7adbcacc27af760c01b612e52565b610db267925a11ac41b1a62f60c01b612e52565b81610e0857610dcb674b9b350a0c4e240d60c01b612e52565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610dff9190615a02565b60405180910390fd5b610e1c67270a9300cfb5deb160c01b612e52565b5050610e38565b610e376719ddea40eb9c9d5e60c01b612e52565b5b5050610eaf565b610e53671617c5f7b544c15460c01b612e52565b610e6767152cf4f885c3c7bd60c01b612e52565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ec3678968ba2400116cd160c01b612e52565b610ed767d26f37fb13c4702060c01b612e52565b808015610ef45750610ef367e672c6829c01435e60c01b612e55565b5b80610f1b5750600083118015610f1a5750610f19672f1034641526e8e560c01b612e55565b5b5b1561118b57610f346787b8bb2f9d833b2360c01b612e52565b610f486748ed04b5790955de60c01b612e52565b610f5c67c07d3098ed811b0e60c01b612e52565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f97929190615a24565b602060405180830381865afa925050508015610fd157506040513d601f19601f82011682018060405250810190610fce9190615a69565b60015b611058573d8060008114611001576040519150601f19603f3d011682016040523d82523d6000602084013e611006565b606091505b5061101b672c516c89798db2e060c01b612e52565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161104f9190615a02565b60405180910390fd5b61106c677a7dc9015ade993760c01b612e52565b611080676bd30bd513db1c1260c01b612e52565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506110e067f77b76e97cdda63e60c01b612e52565b6110f467f2ac3b0c93d4d96060c01b612e52565b6000851480156111015750825b801561110b575086155b15611142576111246732203bac67e9a5c660c01b612e52565b61113867bacd05270bf834fa60c01b612e52565b806000526001601ffd5b61115667db508d98998fd4cb60c01b612e52565b61116a67bd809f1f7297a39860c01b612e52565b61117e671166c1324f0a4d4360c01b612e52565b8095505050505050611496565b61119f67fb73a16ec6f828a360c01b612e52565b6111b367124b4f67fba3948f60c01b612e52565b6111c767a72081e2c67a966a60c01b612e52565b6111db670ab810c1358d671760c01b612e52565b60418787905014611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890615b19565b60405180910390fd5b61123567c0b4b2b739bdbc3e60c01b612e52565b611249670f81a533fa5be34e60c01b612e52565b61125d67657c1339b273a74660c01b612e52565b60008787600090602092611273939291906157f3565b9061127e9190615846565b905061129467dc3d3b49fc92cadb60c01b612e52565b6112a86752ae34fa8263b21b60c01b612e52565b600088886020906040926112be939291906157f3565b906112c99190615846565b90506112df67301232fd22fb824c60c01b612e52565b6112f367f519c889a1cef68c60c01b612e52565b60008989604081811061130957611308615b39565b5b9050013560f81c60f81b60f81c905061132c679a20c64fb3f7324360c01b612e52565b611340678a031af26ced764160c01b612e52565b601b8160ff16141580156113585750601c8160ff1614155b156113d45761137167cd922db48d204f9b60c01b612e52565b61138567833a8605e20290ce60c01b612e52565b61139967b3da6c39eac2834e60c01b612e52565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90615bda565b60405180910390fd5b6113e8675514297355562d4860c01b612e52565b6113fc6757b333f889b6e2b360c01b612e52565b611410676603fc4d7122128560c01b612e52565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c8386866040516000815260200160405260405161144a9493929190615c16565b6020604051602081039080840390855afa15801561146c573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6114b36706cea3225e159afe60c01b6107de565b6114c767768e02f4b4fe93d060c01b6107de565b6114db67bcb43f0f61fb5a1260c01b6107de565b6114ef6705112cc091d04b2260c01b6107de565b6114f7612e60565b61150b677b6146229717de8560c01b6107de565b61151f671a91445bcd7d6a3660c01b6107de565b61153367087786fe3118ce4560c01b6107de565b6115476712ac3ecdf13b356f60c01b6107de565b61155b676a822ec913ef224160c01b6107de565b61156481612fc4565b50565b61157b670b312c177376d2f160c01b6107de565b61158f67526a718f37dbef7960c01b6107de565b6115a367bc0095b6ec842fe060c01b6107de565b6115b76765a7b825dc91e38260c01b6107de565b6115bf613240565b6115d367e65dfa654e10de0360c01b6107de565b6115e76738751a29e4bbac9a60c01b6107de565b6115fb6764a3e3565274624260c01b6107de565b61160f67e3532f2d278ffcc460c01b6107de565b61162367b28c9cc66aedc63960c01b6107de565b611637674c0d2e74d59320d660c01b6107de565b81819050848490501461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690615ccd565b60405180910390fd5b6116936733f49bcf3f677de260c01b6107de565b6116a767fda055a3194df47960c01b6107de565b6116bb670ca2693ca40a9c3d60c01b6107de565b60005b8484905081101561179e576116dd67e45fe9f7a89384cd60c01b6107de565b6116f1677885f77483c8c7a360c01b6107de565b61178b85858381811061170757611706615b39565b5b905060200201602081019061171c9190614bd3565b600085858581811061173157611730615b39565b5b90506020028101906117439190615cfc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613363565b808061179690615d5f565b9150506116be565b5050505050565b6117b967ed21d103c5ec2f5c60c01b613487565b6117cd67bee35484a90cfd2660c01b6107de565b6117e1673ceb9bb2daab856d60c01b6107de565b6117f56791fab911752e5b5c60c01b6107de565b6117fd61348a565b611811672877b8446bdb5f0060c01b6107de565b61182567b6308655670077ff60c01b613487565b61183967d26510995b69f70260c01b613487565b61184d67b279c2aefa06138660c01b613487565b611861672340f032c5d3807160c01b613487565b61186a816135a6565b50565b61188167b0e8e7fc3aed8bf060c01b6107de565b611895671246157b9919312560c01b6107de565b6118a967cbfddca365f5dede60c01b6107de565b6118b161348a565b6118c567ab4f446b15a2b75360c01b6107de565b6118d967140f31a12b03a20160c01b6107de565b6118ed67c2cd95be620e67ae60c01b6107de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390615e19565b60405180910390fd5b611970674b99dae5f525e91060c01b6107de565b61198467897f79a11a9b512360c01b6107de565b61199867f01df9d5178d9e0460c01b6107de565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516119eb929190615e39565b60405180910390a1611a076705fb80e775388d3f60c01b6107de565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611a856784c34e023fb786f860c01b613645565b611a99670d806432bac21d3b60c01b613645565b611aad679da5a6f8cf654dc360c01b613645565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690615ed4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bce613648565b73ffffffffffffffffffffffffffffffffffffffff1614611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90615f66565b60405180910390fd5b611c2d8161369f565b611c8681600067ffffffffffffffff811115611c4c57611c4b614eda565b5b6040519080825280601f01601f191660200182016040528015611c7e5781602001600182028036833780820191505090505b5060006136fa565b50565b6000611c9f674a0b745640aaacbe60c01b613868565b611cb3673643bc4d265e004d60c01b613868565b611cc767be21e9c3510eef0760c01b613868565b611ccf61386b565b611ce3670d9ae78f9ca6bca160c01b613868565b611ced8484613946565b9050611d0367bac743df019f783060c01b613868565b611d17674633441562cbb38260c01b613868565b6000848060400190611d299190615cfc565b905003611d7a57611d4467b9f604ce3adf50f460c01b613868565b611d586740dc8d2be550a2ae60c01b613868565b611d6c678d7f5bf9351f5d3760c01b613868565b611d7584613bb9565b611d8f565b611d8e67493644fd2e2f359760c01b613868565b5b611da367f86dd1b6eddb849360c01b613868565b611db767e338ec934ff31c9e60c01b613868565b611dc082613ccb565b9392505050565b611ddb67c8d7dd5c6ec287ee60c01b6107de565b60008060019054906101000a900460ff16159050808015611e0c5750600160008054906101000a900460ff1660ff16105b80611e395750611e1b30613e0c565b158015611e385750600160008054906101000a900460ff1660ff16145b5b611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f90615ff8565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611eb5576001600060016101000a81548160ff0219169083151502179055505b611ec967e0a1587b9fff733460c01b6107de565b611edd6799f49c2236f581d560c01b6107de565b611ef16713255a13306bce2760c01b6107de565b611f05679103bdf53b9e3db060c01b6107de565b611f0f8383613e2f565b8015611f685760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f5f9190616053565b60405180910390a15b505050565b611f8167a987bf12f6bf98ab60c01b6107de565b611f95671fbaaa4dbb3f884d60c01b6107de565b611fa967e797a3f7fa46660c60c01b6107de565b611fb1612ad9565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611fea9190615042565b6000604051808303818588803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b5050505050565b61203267fbabf181d33082b660c01b6107de565b61204667bee35484a90cfd2660c01b6107de565b61205a673ceb9bb2daab856d60c01b6107de565b61206e6791fab911752e5b5c60c01b6107de565b61207661348a565b61208a672877b8446bdb5f0060c01b6107de565b61209e676c6fc7cbb8b3b97860c01b6107de565b6120b267eb87ca9da684e3db60c01b6107de565b6120c6673d9d17fec85dda7860c01b6107de565b6120da675017b987e5f4e1e060c01b6107de565b6120e2612ad9565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161211c92919061607d565b600060405180830381600087803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790615ed4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661221f613648565b73ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90615f66565b60405180910390fd5b61227e8261369f565b61228a828260016136fa565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590616118565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61235b67b4c2b632b250bc6360c01b6107de565b61236f67768e02f4b4fe93d060c01b6107de565b61238367bcb43f0f61fb5a1260c01b6107de565b6123976705112cc091d04b2260c01b6107de565b61239f612e60565b6123b3677b6146229717de8560c01b6107de565b6123c76732bce9776427685f60c01b6107de565b6123db675c4d3c86a9602c6f60c01b6107de565b6123ef670877748d77ec420260c01b6107de565b6124036732ccb44361bec49260c01b6107de565b61240c81613f71565b50565b612423676bacc25ce52307dd60c01b6107de565b61243767bee35484a90cfd2660c01b6107de565b61244b673ceb9bb2daab856d60c01b6107de565b61245f6791fab911752e5b5c60c01b6107de565b61246761348a565b61247b672877b8446bdb5f0060c01b6107de565b61248f67edec01844939018360c01b6107de565b6124a3672d1676c1874371c960c01b6107de565b6124b76767895a735b76188060c01b6107de565b6124cb6762377381d2b1f71460c01b6107de565b6124d48161412f565b50565b60006124ed67a69e23ef0cf0d80560c01b612e52565b6125016789508a17c1e5baf860c01b612e52565b61251567f0e90fa9dac9b5a260c01b612e52565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612557959493929190616165565b6020604051808303816000875af1158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a91906161c8565b9050949350505050565b60006125ba678cc395c88e3ae24060c01b612e52565b6125ce670e6cd08ae62d699160c01b612e52565b6125e2671a6d203d14bbeb3560c01b612e52565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612624959493929190616165565b6020604051808303816000875af192505050801561266057506040513d601f19601f8201168201806040525081019061265d91906161c8565b60015b612798573d8060008114612690576040519150601f19603f3d011682016040523d82523d6000602084013e612695565b606091505b506126aa6763fa3d4afb8cd55b60c01b612e52565b6126be67c78e77a5e38dc67760c01b612e52565b6000815190506126d867a2319ac582c5f8b960c01b612e52565b6126ec679d791f94f379b3d460c01b612e52565b6001810361276c57612708674b6df8afb2c0610f60c01b612e52565b61271c671241dc8732fa093a60c01b612e52565b600160f81b8260008151811061273557612734615b39565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506127c5565b61278067fb87cb9c02294f9f60c01b612e52565b6127946773311759eab4f85760c01b612e52565b8082fd5b6127ac672f68b0ad8fd39c0a60c01b612e52565b6127c067ba867e4ef348d1a360c01b612e52565b809150505b949350505050565b6127e167e66a0a48020b18bd60c01b613487565b60008060019054906101000a900460ff161590508080156128125750600160008054906101000a900460ff1660ff16105b8061283f575061282130613e0c565b15801561283e5750600160008054906101000a900460ff1660ff16145b5b61287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615ff8565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156128bb576001600060016101000a81548160ff0219169083151502179055505b6128cf67ae6a72f91e70874b60c01b613487565b6128e367ee0821205d8159cd60c01b613487565b6128f767978d75b14d8f5fd160c01b613487565b61290b67c4585b825a1b006560c01b613487565b612916836000613e2f565b61292a677eddea53352c6bc060c01b613487565b61293e67aa84a389c68e565d60c01b613487565b612947826135a6565b80156129a05760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516129979190616053565b60405180910390a15b505050565b6129b9675a98b12456966aba60c01b6107de565b6129cd67bee35484a90cfd2660c01b6107de565b6129e1673ceb9bb2daab856d60c01b6107de565b6129f56791fab911752e5b5c60c01b6107de565b6129fd61348a565b612a11672877b8446bdb5f0060c01b6107de565b612a2567915d8b16ac69ed9860c01b6107de565b612a39671f5e91ee5a02596360c01b6107de565b612a4d674b8e9096393c06f860c01b6107de565b612a6167301fc09d047c18d960c01b6107de565b612a6a816142ed565b50565b6000612a8367e6997cbe175ef33460c01b6107de565b612a97677a25fccec1173dd960c01b6107de565b612aab67431301e0e2e31e9060c01b6107de565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000612aef67f561f09cfc8827bd60c01b6107de565b612b03673350b6d208da79ee60c01b6107de565b612b17671896327d0b3f375a60c01b6107de565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612b5367e2dda3667fd3757160c01b6107de565b612b6767526a718f37dbef7960c01b6107de565b612b7b67bc0095b6ec842fe060c01b6107de565b612b8f6765a7b825dc91e38260c01b6107de565b612b97613240565b612bab67e65dfa654e10de0360c01b6107de565b612bbf67aeaf6d5fe58842a960c01b6107de565b612bd367370ad7169464cc0060c01b6107de565b612be76739a00ff772ffbf9060c01b6107de565b612bfb6792e03ae1c25d108960c01b6107de565b612c4a848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613363565b50505050565b6000612c6667f6036d4dbbf1553b60c01b612e41565b612c7a67e574cfd0134a53a360c01b612e41565b612c8e67481cad8a93626dbc60c01b612e41565b63bc197c8160e01b905098975050505050505050565b6000612cba673908573a227c011760c01b6107de565b612cce67f95a3d25f4a4d56660c01b6107de565b612ce26701732dbf20a7ffe360c01b6107de565b612cea612ad9565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d229190615042565b602060405180830381865afa158015612d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d63919061620a565b905090565b612d706148bd565b612d8467c7b52116630378c860c01b613487565b612d98678e2ff3fdf4acaf5960c01b613487565b612dac67c2828d743e276c4760c01b613487565b6006600480602002604051908101604052809291908260048015612de5576020028201915b815481526020019060010190808311612dd1575b5050505050905090565b6000612e0567d55e6083e458695760c01b612e41565b612e1967229756682a8526f660c01b612e41565b612e2d672d0f5a7f66d6c2a060c01b612e41565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612e7467216671dc6f7d651060c01b6107de565b612e8867fc696b44f549a3bd60c01b6107de565b612e9c677d2f775bb38d794b60c01b6107de565b612eb0672c1b7774324d16e460c01b6107de565b612eb933611a6f565b8015612ed55750612ed4679d6b1a88bd04a29560c01b61456b565b5b80612f4357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612f265750612f2567c1169fb68056496660c01b61456b565b5b8015612f425750612f4167290c2b81e499218360c01b61456b565b5b5b80612f6f5750612f52336109e4565b8015612f6e5750612f6d6777d0513cc85b13d160c01b61456b565b5b5b612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa5906162a9565b60405180910390fd5b612fc267023020f196fe710560c01b6107de565b565b612fd867595c0e9f3251c28760c01b613645565b612fec676c9e8facf275455460c01b613645565b613000675fd1ba867bad8d9060c01b613645565b613014675d4405176a4c718660c01b613645565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990616315565b60405180910390fd5b613096678d884950e2a04aa760c01b613645565b6130aa672dca0c18590376fc60c01b613645565b6130be67a4f7a20d65860e4d60c01b613645565b6130d2675167170fc48a61af60c01b613645565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590616381565b60405180910390fd5b61317267d711364ae0826ec060c01b613645565b613186670a57bd871732b8ad60c01b613645565b61319a675d1d32267273ab9260c01b613645565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da816040516131c99190615042565b60405180910390a16131e567dcc232605f03b59860c01b613645565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6132546731b64f8837124c3160c01b6107de565b61326867648db564106906a760c01b6107de565b61327c67c4dbbfd60bd1214960c01b6107de565b6132906701512b58157c381b60c01b6107de565b613298612ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156132e257506132e16747f66328b063331a60c01b61456b565b5b8061330e57506132f133611a6f565b801561330d575061330c67e429b1ab88ceb31060c01b61456b565b5b5b61334d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334490616413565b60405180910390fd5b6133616762f06635bf7b4acd60c01b6107de565b565b61337767bdfd46f0589b81c760c01b6107de565b61338b67b0457063cebd82a360c01b6107de565b61339f675b626d0fcf3aa6ce60c01b6107de565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516133c891906159a1565b60006040518083038185875af1925050503d8060008114613405576040519150601f19603f3d011682016040523d82523d6000602084013e61340a565b606091505b5091509150613423672fb56cccf4f3b66560c01b6107de565b6134376747166df0733c52e860c01b6107de565b8161346c576134506719461c9227bd654a60c01b6107de565b6134646767b989a4f1f2a8f560c01b6107de565b805160208201fd5b61348067c859f4ceb5b7418760c01b6107de565b5050505050565b50565b61349e67851edf0db3fe6a8060c01b6107de565b6134b267765412b7902e3abf60c01b6107de565b6134c667151d6c3106b9e49760c01b6107de565b6134da671b070d07d4380e9a60c01b6107de565b6134e333611a6f565b80156134ff57506134fe67d5ef82e5a5d379e060c01b61456b565b5b8061355157503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015613550575061354f670cc2ae0862027a8c60c01b61456b565b5b5b613590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135879061647f565b60405180910390fd5b6135a467362a52eb7781e15260c01b6107de565b565b6135ba670f79f3b2c545621060c01b613487565b6135ce679177f749dac7402160c01b613487565b6135e267a8f29135febb5d1860c01b613487565b7f42e4c4ce1432650f17e41c4ea77ed12c0ab20b229d3ffd84a2ebc9f8abb25a83600682604051613614929190616563565b60405180910390a161363067140dc646a738010260c01b613487565b8060069060046136419291906148df565b5050565b50565b60006136767f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614576565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6136b3675b243153b1324c8660c01b6107de565b6136c767703050f3f8cbae0160c01b6107de565b6136db67096f3ba87c8df4a960c01b6107de565b6136ef67360d12c388c6eb2e60c01b6107de565b6136f761348a565b50565b6137267f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b614580565b60000160009054906101000a900460ff161561374a576137458361458a565b613863565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137b257506040513d601f19601f820116820180604052508101906137af91906165a2565b60015b6137f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e890616641565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384d906166d3565b60405180910390fd5b50613862838383614643565b5b505050565b50565b61387f67e67927338dfde90a60c01b613868565b613893670e51b57b7e9b4da560c01b613868565b6138a767e3f66e826ec687ff60c01b613868565b6138bb6792d1df458e7acb7960c01b613868565b6138c3612ad9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392790616765565b60405180910390fd5b61394467f59af56761c9812d60c01b613868565b565b600061395c67fff61328a92497df60c01b613487565b6139706760e89b5edc9bd94360c01b613487565b6139846732f74a56e68a4f6c60c01b613487565b6139986785158bcad646a9c260c01b613487565b60008380604001906139aa9190615cfc565b905014613b09576139c56792beb61f921a246760c01b613487565b6139d967a730cb2679763e5060c01b613487565b6139ed670b94c44d430369ca60c01b613487565b60006139f7612d68565b604051602001613a0791906156d1565b604051602081830303815290604052805190602001209050613a336743c039253391c72660c01b613487565b613a47676d2b3941d00abe4f60c01b613487565b613a5b6702d8abfe47c24cfe60c01b613487565b80848060400190613a6c9190615cfc565b6080878060400190613a7e9190615cfc565b9050613a8a91906157b5565b908092613a99939291906157f3565b604051613aa79291906167aa565b604051809103902014613aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae69061680f565b60405180910390fd5b613b0367c5f15b669edf4bda60c01b613487565b50613b1e565b613b1d67c90b083341ee32d360c01b613487565b5b613b32677453c8b4de1dcfb460c01b613487565b613b46670a02821452c9573060c01b613487565b613bb160405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525061466f565b905092915050565b613bcd67f347b6eb768867bd60c01b6107de565b613be167e4b8fad4d2d1902a60c01b6107de565b613bf56722ce8514c24b563d60c01b6107de565b613c09676bd35fd711427f6d60c01b6107de565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613c3890616847565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614613cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cab906168c7565b60405180910390fd5b613cc8675143066244fa845f60c01b6107de565b50565b613cdf67cc5c47196db5bd6160c01b613868565b613cf3678b55e749b3c352ab60c01b613868565b613d0767e6442311764077fa60c01b613868565b60008114613df457613d23671589e0478f7a186060c01b613868565b613d3767d37e8b3807985e7360c01b613868565b613d4b67c2c62d2bb50a980360c01b613868565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051613d939061690d565b600060405180830381858888f193505050503d8060008114613dd1576040519150601f19603f3d011682016040523d82523d6000602084013e613dd6565b606091505b50509050613dee6714643eaa19656f6660c01b613868565b50613e09565b613e0867cc382f158ab6697a60c01b613868565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613e436703748e24ba0bf9ec60c01b6107de565b613e57670bc8db960be8c07860c01b6107de565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613eac67019acf8eca98742f60c01b6107de565b613ec067ffb0ee9b4a9774fe60c01b6107de565b613ec981613f71565b613edd675b78c5bf4202c90360c01b6107de565b613ef16725b6d74483d24a8260c01b6107de565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613f856717c7d6a68a08773960c01b613645565b613f9967cc8de6b882acb1a360c01b613645565b613fad671ec2242cb4213daf60c01b613645565b613fc167e7bfe4742339224760c01b613645565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561404e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140459061696e565b60405180910390fd5b614062676270d7427db14f5b60c01b613645565b6140766704aa357520b4416d60c01b613645565b61408a672b9382deb815da6060c01b613645565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3816040516140b99190615042565b60405180910390a16140d567c36c72a8ecc3a90660c01b613645565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61414367c36ba9a4464b6ea960c01b612e4f565b61415767dbc59bf60721ec3760c01b612e4f565b61416b67a9b899a25d7f84f360c01b612e4f565b61417f676ccf2b04ef43fe2c60c01b612e4f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661420b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614202906169da565b60405180910390fd5b61421f677f234f21a7a7167460c01b612e4f565b614233675dad748d723fc1a560c01b612e4f565b61424767bcc423d1b918455e60c01b612e4f565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52816040516142769190615042565b60405180910390a161429267ea5e8a43da197a0d60c01b612e4f565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61430167473271421f468fd260c01b612e4f565b6143156792976a0e8d69a1f860c01b612e4f565b6143296722fdc4cd5a73662060c01b612e4f565b61433d677f1705d0822221e360c01b612e4f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036143ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143a390616a6c565b60405180910390fd5b6143c067d29ec12c81e5975160c01b612e4f565b6143d4675ce58ff31b29be9c60c01b612e4f565b6143e867e300c4231196178660c01b612e4f565b6143fc6756d066aad6d03b2860c01b612e4f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448090616ad8565b60405180910390fd5b61449d67ceace18cb99efb4860c01b612e4f565b6144b167b298b03df19232ce60c01b612e4f565b6144c56771c3a697a02cf77360c01b612e4f565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969816040516144f49190615042565b60405180910390a1614510673094a602565cca5360c01b612e4f565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b61459381613e0c565b6145d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145c990616b6a565b60405180910390fd5b806145ff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614576565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61464c836146f3565b6000825111806146595750805b1561466a576146688383614742565b505b505050565b60006146856717718d3268584e5860c01b61476f565b6146996719e6416798285bdf60c01b61476f565b6146ad67a626d76b40db563f60c01b61476f565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6146fc8161458a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606147678383604051806060016040528060278152602001616c5d60279139614772565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161479c91906159a1565b600060405180830381855af49150503d80600081146147d7576040519150601f19603f3d011682016040523d82523d6000602084013e6147dc565b606091505b50915091506147ed868383876147f8565b925050509392505050565b6060831561485a5760008351036148525761481285613e0c565b614851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161484890616bd6565b60405180910390fd5b5b829050614865565b614864838361486d565b5b949350505050565b6000825111156148805781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148b49190616c3a565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b826004810192821561490e579160200282015b8281111561490d5782518255916020019190600101906148f2565b5b50905061491b919061491f565b5090565b5b80821115614938576000816000905550600101614920565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061497b82614950565b9050919050565b61498b81614970565b811461499657600080fd5b50565b6000813590506149a881614982565b92915050565b6000819050919050565b6149c1816149ae565b81146149cc57600080fd5b50565b6000813590506149de816149b8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614a0957614a086149e4565b5b8235905067ffffffffffffffff811115614a2657614a256149e9565b5b602083019150836001820283011115614a4257614a416149ee565b5b9250929050565b60008060008060008060008060c0898b031215614a6957614a68614946565b5b6000614a778b828c01614999565b9850506020614a888b828c01614999565b9750506040614a998b828c01614999565b9650506060614aaa8b828c016149cf565b955050608089013567ffffffffffffffff811115614acb57614aca61494b565b5b614ad78b828c016149f3565b945094505060a089013567ffffffffffffffff811115614afa57614af961494b565b5b614b068b828c016149f3565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614b4d81614b18565b8114614b5857600080fd5b50565b600081359050614b6a81614b44565b92915050565b600060208284031215614b8657614b85614946565b5b6000614b9484828501614b5b565b91505092915050565b60008115159050919050565b614bb281614b9d565b82525050565b6000602082019050614bcd6000830184614ba9565b92915050565b600060208284031215614be957614be8614946565b5b6000614bf784828501614999565b91505092915050565b600080600080600060808688031215614c1c57614c1b614946565b5b6000614c2a88828901614999565b9550506020614c3b88828901614999565b9450506040614c4c888289016149cf565b935050606086013567ffffffffffffffff811115614c6d57614c6c61494b565b5b614c79888289016149f3565b92509250509295509295909350565b614c9181614b18565b82525050565b6000602082019050614cac6000830184614c88565b92915050565b6000819050919050565b614cc581614cb2565b8114614cd057600080fd5b50565b600081359050614ce281614cbc565b92915050565b614cf181614b9d565b8114614cfc57600080fd5b50565b600081359050614d0e81614ce8565b92915050565b600080600080600060808688031215614d3057614d2f614946565b5b6000614d3e88828901614999565b9550506020614d4f88828901614cd3565b945050604086013567ffffffffffffffff811115614d7057614d6f61494b565b5b614d7c888289016149f3565b93509350506060614d8f88828901614cff565b9150509295509295909350565b60008083601f840112614db257614db16149e4565b5b8235905067ffffffffffffffff811115614dcf57614dce6149e9565b5b602083019150836020820283011115614deb57614dea6149ee565b5b9250929050565b60008083601f840112614e0857614e076149e4565b5b8235905067ffffffffffffffff811115614e2557614e246149e9565b5b602083019150836020820283011115614e4157614e406149ee565b5b9250929050565b60008060008060408587031215614e6257614e61614946565b5b600085013567ffffffffffffffff811115614e8057614e7f61494b565b5b614e8c87828801614d9c565b9450945050602085013567ffffffffffffffff811115614eaf57614eae61494b565b5b614ebb87828801614df2565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614f1282614ec9565b810181811067ffffffffffffffff82111715614f3157614f30614eda565b5b80604052505050565b6000614f4461493c565b9050614f508282614f09565b919050565b600067ffffffffffffffff821115614f7057614f6f614eda565b5b602082029050919050565b6000614f8e614f8984614f55565b614f3a565b90508060208402830185811115614fa857614fa76149ee565b5b835b81811015614fd15780614fbd88826149cf565b845260208401935050602081019050614faa565b5050509392505050565b600082601f830112614ff057614fef6149e4565b5b6004614ffd848285614f7b565b91505092915050565b60006080828403121561501c5761501b614946565b5b600061502a84828501614fdb565b91505092915050565b61503c81614970565b82525050565b60006020820190506150576000830184615033565b92915050565b600080fd5b600061016082840312156150795761507861505d565b5b81905092915050565b60008060006060848603121561509b5761509a614946565b5b600084013567ffffffffffffffff8111156150b9576150b861494b565b5b6150c586828701615062565b93505060206150d686828701614cd3565b92505060406150e7868287016149cf565b9150509250925092565b6150fa816149ae565b82525050565b600060208201905061511560008301846150f1565b92915050565b600061512682614970565b9050919050565b6151368161511b565b811461514157600080fd5b50565b6000813590506151538161512d565b92915050565b600080604083850312156151705761516f614946565b5b600061517e85828601615144565b925050602061518f85828601614999565b9150509250929050565b60006151a482614950565b9050919050565b6151b481615199565b81146151bf57600080fd5b50565b6000813590506151d1816151ab565b92915050565b600080604083850312156151ee576151ed614946565b5b60006151fc858286016151c2565b925050602061520d858286016149cf565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561523757615236614eda565b5b61524082614ec9565b9050602081019050919050565b82818337600083830152505050565b600061526f61526a8461521c565b614f3a565b90508281526020810184848401111561528b5761528a615217565b5b61529684828561524d565b509392505050565b600082601f8301126152b3576152b26149e4565b5b81356152c384826020860161525c565b91505092915050565b600080604083850312156152e3576152e2614946565b5b60006152f185828601614999565b925050602083013567ffffffffffffffff8111156153125761531161494b565b5b61531e8582860161529e565b9150509250929050565b61533181614cb2565b82525050565b600060208201905061534c6000830184615328565b92915050565b6000806000806060858703121561536c5761536b614946565b5b600061537a87828801614999565b945050602061538b87828801614cd3565b935050604085013567ffffffffffffffff8111156153ac576153ab61494b565b5b6153b8878288016149f3565b925092505092959194509250565b60008060a083850312156153dd576153dc614946565b5b60006153eb85828601615144565b92505060206153fc85828601614fdb565b9150509250929050565b6000819050919050565b600061542b61542661542184614950565b615406565b614950565b9050919050565b600061543d82615410565b9050919050565b600061544f82615432565b9050919050565b61545f81615444565b82525050565b600060208201905061547a6000830184615456565b92915050565b6000806000806060858703121561549a57615499614946565b5b60006154a887828801614999565b94505060206154b9878288016149cf565b935050604085013567ffffffffffffffff8111156154da576154d961494b565b5b6154e6878288016149f3565b925092505092959194509250565b60008083601f84011261550a576155096149e4565b5b8235905067ffffffffffffffff811115615527576155266149e9565b5b602083019150836020820283011115615543576155426149ee565b5b9250929050565b60008060008060008060008060a0898b03121561556a57615569614946565b5b60006155788b828c01614999565b98505060206155898b828c01614999565b975050604089013567ffffffffffffffff8111156155aa576155a961494b565b5b6155b68b828c016154f4565b9650965050606089013567ffffffffffffffff8111156155d9576155d861494b565b5b6155e58b828c016154f4565b9450945050608089013567ffffffffffffffff8111156156085761560761494b565b5b6156148b828c016149f3565b92509250509295985092959890939650565b600060049050919050565b600081905092915050565b6000819050919050565b61564f816149ae565b82525050565b60006156618383615646565b60208301905092915050565b6000602082019050919050565b61568381615626565b61568d8184615631565b92506156988261563c565b8060005b838110156156c95781516156b08782615655565b96506156bb8361566d565b92505060018101905061569c565b505050505050565b60006080820190506156e6600083018461567a565b92915050565b60008060008060008060a0878903121561570957615708614946565b5b600061571789828a01614999565b965050602061572889828a01614999565b955050604061573989828a016149cf565b945050606061574a89828a016149cf565b935050608087013567ffffffffffffffff81111561576b5761576a61494b565b5b61577789828a016149f3565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157c0826149ae565b91506157cb836149ae565b92508282039050818111156157e3576157e2615786565b5b92915050565b600080fd5b600080fd5b60008085851115615807576158066157e9565b5b83861115615818576158176157ee565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000615852838361582e565b8261585d8135614cb2565b9250602082101561589d576158987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615839565b831692505b505092915050565b6000806000606084860312156158be576158bd614946565b5b60006158cc868287016151c2565b935050602084013567ffffffffffffffff8111156158ed576158ec61494b565b5b6158f98682870161529e565b925050604084013567ffffffffffffffff81111561591a5761591961494b565b5b6159268682870161529e565b9150509250925092565b600081519050919050565b600081905092915050565b60005b83811015615964578082015181840152602081019050615949565b60008484015250505050565b600061597b82615930565b615985818561593b565b9350615995818560208601615946565b80840191505092915050565b60006159ad8284615970565b915081905092915050565b600082825260208201905092915050565b60006159d482615930565b6159de81856159b8565b93506159ee818560208601615946565b6159f781614ec9565b840191505092915050565b60006020820190508181036000830152615a1c81846159c9565b905092915050565b6000604082019050615a396000830185615328565b8181036020830152615a4b81846159c9565b90509392505050565b600081519050615a6381614b44565b92915050565b600060208284031215615a7f57615a7e614946565b5b6000615a8d84828501615a54565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615b03603a83615a96565b9150615b0e82615aa7565b604082019050919050565b60006020820190508181036000830152615b3281615af6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615bc4602d83615a96565b9150615bcf82615b68565b604082019050919050565b60006020820190508181036000830152615bf381615bb7565b9050919050565b600060ff82169050919050565b615c1081615bfa565b82525050565b6000608082019050615c2b6000830187615328565b615c386020830186615c07565b615c456040830185615328565b615c526060830184615328565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000615cb7603383615a96565b9150615cc282615c5b565b604082019050919050565b60006020820190508181036000830152615ce681615caa565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615d1957615d18615ced565b5b80840192508235915067ffffffffffffffff821115615d3b57615d3a615cf2565b5b602083019250600182023603831315615d5757615d56615cf7565b5b509250929050565b6000615d6a826149ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d9c57615d9b615786565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000615e03603383615a96565b9150615e0e82615da7565b604082019050919050565b60006020820190508181036000830152615e3281615df6565b9050919050565b6000604082019050615e4e6000830185615033565b615e5b6020830184615033565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000615ebe602c83615a96565b9150615ec982615e62565b604082019050919050565b60006020820190508181036000830152615eed81615eb1565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615f50602c83615a96565b9150615f5b82615ef4565b604082019050919050565b60006020820190508181036000830152615f7f81615f43565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615fe2602e83615a96565b9150615fed82615f86565b604082019050919050565b6000602082019050818103600083015261601181615fd5565b9050919050565b6000819050919050565b600061603d61603861603384616018565b615406565b615bfa565b9050919050565b61604d81616022565b82525050565b60006020820190506160686000830184616044565b92915050565b61607781615199565b82525050565b6000604082019050616092600083018561606e565b61609f60208301846150f1565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000616102603883615a96565b915061610d826160a6565b604082019050919050565b60006020820190508181036000830152616131816160f5565b9050919050565b600061614483856159b8565b935061615183858461524d565b61615a83614ec9565b840190509392505050565b600060808201905061617a6000830188615033565b6161876020830187615328565b818103604083015261619a818587616138565b90506161a96060830184614ba9565b9695505050505050565b6000815190506161c281614ce8565b92915050565b6000602082840312156161de576161dd614946565b5b60006161ec848285016161b3565b91505092915050565b600081519050616204816149b8565b92915050565b6000602082840312156162205761621f614946565b5b600061622e848285016161f5565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000616293602883615a96565b915061629e82616237565b604082019050919050565b600060208201905081810360008301526162c281616286565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b60006162ff601a83615a96565b915061630a826162c9565b602082019050919050565b6000602082019050818103600083015261632e816162f2565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b600061636b601b83615a96565b915061637682616335565b602082019050919050565b6000602082019050818103600083015261639a8161635e565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b60006163fd602983615a96565b9150616408826163a1565b604082019050919050565b6000602082019050818103600083015261642c816163f0565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000616469601c83615a96565b915061647482616433565b602082019050919050565b600060208201905081810360008301526164988161645c565b9050919050565b600060049050919050565b6000819050919050565b60008160001c9050919050565b6000819050919050565b60006164de6164d9836164b4565b6164c1565b9050919050565b60006164f182546164cb565b9050919050565b6000600182019050919050565b61650e8161649f565b6165188184615631565b9250616523826164aa565b8060005b8381101561655b57616538826164e5565b6165428782615655565b965061654d836164f8565b925050600181019050616527565b505050505050565b6000610100820190506165796000830185616505565b616586608083018461567a565b9392505050565b60008151905061659c81614cbc565b92915050565b6000602082840312156165b8576165b7614946565b5b60006165c68482850161658d565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061662b602e83615a96565b9150616636826165cf565b604082019050919050565b6000602082019050818103600083015261665a8161661e565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006166bd602983615a96565b91506166c882616661565b604082019050919050565b600060208201905081810360008301526166ec816166b0565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061674f602483615a96565b915061675a826166f3565b604082019050919050565b6000602082019050818103600083015261677e81616742565b9050919050565b6000616791838561593b565b935061679e83858461524d565b82840190509392505050565b60006167b7828486616785565b91508190509392505050565b7f77726f6e67207075626b65790000000000000000000000000000000000000000600082015250565b60006167f9600c83615a96565b9150616804826167c3565b602082019050919050565b60006020820190508181036000830152616828816167ec565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006168528261682f565b91506bffffffffffffffffffffffff82036168705761686f615786565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006168b1601f83615a96565b91506168bc8261687b565b602082019050919050565b600060208201905081810360008301526168e0816168a4565b9050919050565b50565b60006168f760008361593b565b9150616902826168e7565b600082019050919050565b6000616918826168ea565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b6000616958601883615a96565b915061696382616922565b602082019050919050565b600060208201905081810360008301526169878161694b565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006169c4602083615a96565b91506169cf8261698e565b602082019050919050565b600060208201905081810360008301526169f3816169b7565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000616a56602883615a96565b9150616a61826169fa565b604082019050919050565b60006020820190508181036000830152616a8581616a49565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b6000616ac2601c83615a96565b9150616acd82616a8c565b602082019050919050565b60006020820190508181036000830152616af181616ab5565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000616b54602d83615a96565b9150616b5f82616af8565b604082019050919050565b60006020820190508181036000830152616b8381616b47565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616bc0601d83615a96565b9150616bcb82616b8a565b602082019050919050565b60006020820190508181036000830152616bef81616bb3565b9050919050565b600081519050919050565b6000616c0c82616bf6565b616c168185615a96565b9350616c26818560208601615946565b616c2f81614ec9565b840191505092915050565b60006020820190508181036000830152616c548184616c01565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220503dca79f81fcfa07768a72159f738c20e5fe669378a45bc31e84812d4c2bdb764736f6c63430008110033"; type BLSAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts b/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts index 3586b8e7..e2ea93bf 100644 --- a/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts @@ -531,7 +531,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50612bfd806100206000396000f3fe6080604052600436106100905760003560e01c806364c530cd1161005957806364c530cd14610193578063a6193531146101d0578063b7620eb41461020d578063c9e525df1461024a578063e3563a4f1461027557610090565b80629d925014610095578063275e2d79146100c057806340864431146100fd578063451711591461013a57806357f09b7214610156575b600080fd5b3480156100a157600080fd5b506100aa61029e565b6040516100b79190611525565b60405180910390f35b3480156100cc57600080fd5b506100e760048036038101906100e291906115b9565b6102c2565b6040516100f4919061169f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190611a0b565b61041f565b6040516101319190611aff565b60405180910390f35b610154600480360381019061014f9190611b94565b61044e565b005b34801561016257600080fd5b5061017d60048036038101906101789190611a0b565b6104be565b60405161018a9190611c58565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b59190611c98565b61056f565b6040516101c7919061169f565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190611a0b565b61069d565b6040516102049190611525565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190611ce1565b6106c5565b6040516102419190611c58565b60405180910390f35b34801561025657600080fd5b5061025f610745565b60405161026c9190611d39565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190611daa565b610769565b005b7fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b81565b606060008383905067ffffffffffffffff8111156102e3576102e26116c6565b5b60405190808252806020026020018201604052801561031c57816020015b6103096114ae565b8152602001906001900390816103015790505b50905060005b81518110156103bc5760008086868481811061034157610340611e2b565b5b90506020028101906103539190611e69565b8061014001906103639190611e92565b8101906103709190611ef5565b9150915060405180604001604052808381526020018281525084848151811061039c5761039b611e2b565b5b6020026020010181905250505080806103b490611f64565b915050610322565b5060006103e9827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a02565b905080600001518160200151604051602001610406929190611fad565b6040516020818303038152906040529250505092915050565b6104276114c8565b600061043a610435846104be565b610b05565b90506104468382610b35565b915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016104889190611fe5565b6000604051808303818588803b1580156104a157600080fd5b505af11580156104b5573d6000803e3d6000fd5b50505050505050565b6104c66114ea565b6000826040015190506000815111156104e9576104e2816106c5565b9150610568565b826000015173ffffffffffffffffffffffffffffffffffffffff1663e02afbae61c3506040518263ffffffff1660e01b81526004016080604051808303818786fa15801561053b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061056091906120c6565b91505061056a565b505b919050565b60606000828061014001906105849190611e92565b81019061059191906121a4565b905060006105a7846105a2906121d1565b6104be565b905060006105c6856105b8906121d1565b6105c184610b05565b610b35565b905073__$b78e61b50eae8ff14018a753b33166207a$__63ebbdac918484846040518463ffffffff1660e01b8152600401610603939291906122cf565b602060405180830381865af4158015610620573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610644919061233f565b610683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067a906123c9565b60405180910390fd5b604051806020016040528060008152509350505050919050565b6000806106b16106ac846104be565b610b05565b90506106bd8382610c0c565b915050919050565b6106cd6114ea565b60008251905060808111610716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070d90612435565b60405180910390fd5b606081840103805183526020810151602084015260408101516040840152606081015160608401525050919050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781565b604082829050146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a6906124a1565b60405180910390fd5b600082828101906107c091906121a4565b9050600085859050905060008167ffffffffffffffff8111156107e6576107e56116c6565b5b60405190808252806020026020018201604052801561081f57816020015b61080c6114ea565b8152602001906001900390816108045790505b50905060008267ffffffffffffffff81111561083e5761083d6116c6565b5b60405190808252806020026020018201604052801561087757816020015b6108646114c8565b81526020019060019003908161085c5790505b50905060005b8381101561093c57600089898381811061089a57610899611e2b565b5b90506020028101906108ac9190611e69565b6108b5906121d1565b90506108c0816104be565b8483815181106108d3576108d2611e2b565b5b602002602001018190525061090a816109058685815181106108f8576108f7611e2b565b5b6020026020010151610b05565b610b35565b83838151811061091d5761091c611e2b565b5b602002602001018190525050808061093490611f64565b91505061087d565b5073__$b78e61b50eae8ff14018a753b33166207a$__63914137638584846040518463ffffffff1660e01b8152600401610978939291906126e3565b602060405180830381865af4158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b9919061233f565b6109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612774565b60405180910390fd5b5050505050505050565b610a0a6114ae565b600083600081518110610a2057610a1f611e2b565b5b6020026020010151600001519050600084600081518110610a4457610a43611e2b565b5b60200260200101516020015190506000600190506000600190505b8651811015610ad357610ab48484848a8581518110610a8157610a80611e2b565b5b6020026020010151600001518b8681518110610aa057610a9f611e2b565b5b60200260200101516020015160018c610c4b565b8094508195508296505050508080610acb90611f64565b915050610a5f565b50610ae0838383886112ca565b8093508194505050828460000181815250508184602001818152505050505092915050565b600081604051602001610b189190611c58565b604051602081830303815290604052805190602001209050919050565b610b3d6114c8565b6000610b498484610c0c565b905073__$b78e61b50eae8ff14018a753b33166207a$__63a850a9097fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b83604051602001610b9791906127b5565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610bc3929190612829565b6040805180830381865af4158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0391906128e4565b91505092915050565b6000610c1783611341565b823046604051602001610c2d9493929190612920565b60405160208183030381529060405280519060200120905092915050565b6000806000808a148015610c5f5750600089145b15610c72578686869250925092506112bd565b600087148015610c825750600086145b15610c95578989899250925092506112bd565b610c9d6114ea565b8480610cac57610cab612965565b5b898a0981600060048110610cc357610cc2611e2b565b5b6020020181815250508480610cdb57610cda612965565b5b81600060048110610cef57610cee611e2b565b5b60200201518a0981600160048110610d0a57610d09611e2b565b5b6020020181815250508480610d2257610d21612965565b5b86870981600260048110610d3957610d38611e2b565b5b6020020181815250508480610d5157610d50612965565b5b81600260048110610d6557610d64611e2b565b5b6020020151870981600360048110610d8057610d7f611e2b565b5b60200201818152505060405180608001604052808680610da357610da2612965565b5b83600260048110610db757610db6611e2b565b5b60200201518e0981526020018680610dd257610dd1612965565b5b83600360048110610de657610de5611e2b565b5b60200201518d0981526020018680610e0157610e00612965565b5b83600060048110610e1557610e14611e2b565b5b60200201518b0981526020018680610e3057610e2f612965565b5b83600160048110610e4457610e43611e2b565b5b60200201518a09815250905080600260048110610e6457610e63611e2b565b5b602002015181600060048110610e7d57610e7c611e2b565b5b6020020151141580610ebf575080600360048110610e9e57610e9d611e2b565b5b602002015181600160048110610eb757610eb6611e2b565b5b602002015114155b610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906129e0565b60405180910390fd5b610f066114ea565b8580610f1557610f14612965565b5b82600060048110610f2957610f28611e2b565b5b602002015187610f399190612a00565b83600260048110610f4d57610f4c611e2b565b5b60200201510881600060048110610f6757610f66611e2b565b5b6020020181815250508580610f7f57610f7e612965565b5b82600160048110610f9357610f92611e2b565b5b602002015187610fa39190612a00565b83600360048110610fb757610fb6611e2b565b5b60200201510881600160048110610fd157610fd0611e2b565b5b6020020181815250508580610fe957610fe8612965565b5b81600060048110610ffd57610ffc611e2b565b5b60200201518260006004811061101657611015611e2b565b5b602002015109816002600481106110305761102f611e2b565b5b602002018181525050858061104857611047612965565b5b8160006004811061105c5761105b611e2b565b5b60200201518260026004811061107557611074611e2b565b5b6020020151098160036004811061108f5761108e611e2b565b5b602002018181525050600086806110a9576110a8612965565b5b826003600481106110bd576110bc611e2b565b5b6020020151886110cd9190612a00565b88806110dc576110db612965565b5b846001600481106110f0576110ef611e2b565b5b60200201518560016004811061110957611108611e2b565b5b602002015109089050868061112157611120612965565b5b87806111305761112f612965565b5b888061113f5761113e612965565b5b8460026004811061115357611152611e2b565b5b60200201518660006004811061116c5761116b611e2b565b5b602002015109600209886111809190612a00565b820890506000878061119557611194612965565b5b88806111a4576111a3612965565b5b838a6111b09190612a00565b8a806111bf576111be612965565b5b866002600481106111d3576111d2611e2b565b5b6020020151886000600481106111ec576111eb611e2b565b5b602002015109088460016004811061120757611206611e2b565b5b6020020151099050878061121e5761121d612965565b5b888061122d5761122c612965565b5b8460036004811061124157611240611e2b565b5b60200201518660016004811061125a57611259611e2b565b5b6020020151098961126b9190612a00565b82089050600088806112805761127f612965565b5b898061128f5761128e612965565b5b8b8f09856000600481106112a6576112a5611e2b565b5b602002015109905082828297509750975050505050505b9750975097945050505050565b60008060006112d985856113c2565b9050600084806112ec576112eb612965565b5b82830990506000858061130257611301612965565b5b828a0990506000868061131857611317612965565b5b878061132757611326612965565b5b8486098a0990508181955095505050505094509492505050565b60008160000151826020015183604001518051906020012084606001518051906020012085608001518660a001518760c001518860e001518961010001518a6101200151805190602001206040516020016113a59a99989796959493929190612a34565b604051602081830303815290604052805190602001209050919050565b60008083141580156113d45750818314155b80156113e1575060008214155b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612b1c565b60405180910390fd5b60008060019050600084905060005b600087146114a15786826114439190612b3c565b905082868061145557611454612965565b5b878061146457611463612965565b5b858409886114729190612a00565b860880945081955050508687826114899190612b6d565b836114949190612a00565b809850819350505061142f565b8394505050505092915050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b61151f8161150c565b82525050565b600060208201905061153a6000830184611516565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157957611578611554565b5b8235905067ffffffffffffffff81111561159657611595611559565b5b6020830191508360208202830111156115b2576115b161155e565b5b9250929050565b600080602083850312156115d0576115cf61154a565b5b600083013567ffffffffffffffff8111156115ee576115ed61154f565b5b6115fa85828601611563565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611640578082015181840152602081019050611625565b8381111561164f576000848401525b50505050565b6000601f19601f8301169050919050565b600061167182611606565b61167b8185611611565b935061168b818560208601611622565b61169481611655565b840191505092915050565b600060208201905081810360008301526116b98184611666565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116fe82611655565b810181811067ffffffffffffffff8211171561171d5761171c6116c6565b5b80604052505050565b6000611730611540565b905061173c82826116f5565b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061177182611746565b9050919050565b61178181611766565b811461178c57600080fd5b50565b60008135905061179e81611778565b92915050565b6000819050919050565b6117b7816117a4565b81146117c257600080fd5b50565b6000813590506117d4816117ae565b92915050565b600080fd5b600067ffffffffffffffff8211156117fa576117f96116c6565b5b61180382611655565b9050602081019050919050565b82818337600083830152505050565b600061183261182d846117df565b611726565b90508281526020810184848401111561184e5761184d6117da565b5b611859848285611810565b509392505050565b600082601f83011261187657611875611554565b5b813561188684826020860161181f565b91505092915050565b600061016082840312156118a6576118a56116c1565b5b6118b1610160611726565b905060006118c18482850161178f565b60008301525060206118d5848285016117c5565b602083015250604082013567ffffffffffffffff8111156118f9576118f8611741565b5b61190584828501611861565b604083015250606082013567ffffffffffffffff81111561192957611928611741565b5b61193584828501611861565b6060830152506080611949848285016117c5565b60808301525060a061195d848285016117c5565b60a08301525060c0611971848285016117c5565b60c08301525060e0611985848285016117c5565b60e08301525061010061199a848285016117c5565b6101008301525061012082013567ffffffffffffffff8111156119c0576119bf611741565b5b6119cc84828501611861565b6101208301525061014082013567ffffffffffffffff8111156119f2576119f1611741565b5b6119fe84828501611861565b6101408301525092915050565b600060208284031215611a2157611a2061154a565b5b600082013567ffffffffffffffff811115611a3f57611a3e61154f565b5b611a4b8482850161188f565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b611a7d816117a4565b82525050565b6000611a8f8383611a74565b60208301905092915050565b6000602082019050919050565b611ab181611a54565b611abb8184611a5f565b9250611ac682611a6a565b8060005b83811015611af7578151611ade8782611a83565b9650611ae983611a9b565b925050600181019050611aca565b505050505050565b6000604082019050611b146000830184611aa8565b92915050565b6000611b2582611766565b9050919050565b611b3581611b1a565b8114611b4057600080fd5b50565b600081359050611b5281611b2c565b92915050565b600063ffffffff82169050919050565b611b7181611b58565b8114611b7c57600080fd5b50565b600081359050611b8e81611b68565b92915050565b60008060408385031215611bab57611baa61154a565b5b6000611bb985828601611b43565b9250506020611bca85828601611b7f565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b611c0a81611bd4565b611c148184611bdf565b9250611c1f82611bea565b8060005b83811015611c50578151611c378782611a83565b9650611c4283611bf4565b925050600181019050611c23565b505050505050565b6000608082019050611c6d6000830184611c01565b92915050565b600080fd5b60006101608284031215611c8f57611c8e611c73565b5b81905092915050565b600060208284031215611cae57611cad61154a565b5b600082013567ffffffffffffffff811115611ccc57611ccb61154f565b5b611cd884828501611c78565b91505092915050565b600060208284031215611cf757611cf661154a565b5b600082013567ffffffffffffffff811115611d1557611d1461154f565b5b611d2184828501611861565b91505092915050565b611d33816117a4565b82525050565b6000602082019050611d4e6000830184611d2a565b92915050565b60008083601f840112611d6a57611d69611554565b5b8235905067ffffffffffffffff811115611d8757611d86611559565b5b602083019150836001820283011115611da357611da261155e565b5b9250929050565b60008060008060408587031215611dc457611dc361154a565b5b600085013567ffffffffffffffff811115611de257611de161154f565b5b611dee87828801611563565b9450945050602085013567ffffffffffffffff811115611e1157611e1061154f565b5b611e1d87828801611d54565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112611e8657611e85611e5a565b5b80830191505092915050565b60008083356001602003843603038112611eaf57611eae611e5a565b5b80840192508235915067ffffffffffffffff821115611ed157611ed0611e5f565b5b602083019250600182023603831315611eed57611eec611e64565b5b509250929050565b60008060408385031215611f0c57611f0b61154a565b5b6000611f1a858286016117c5565b9250506020611f2b858286016117c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f6f826117a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611fa257611fa1611f35565b5b600182019050919050565b6000604082019050611fc26000830185611d2a565b611fcf6020830184611d2a565b9392505050565b611fdf81611b58565b82525050565b6000602082019050611ffa6000830184611fd6565b92915050565b600067ffffffffffffffff82111561201b5761201a6116c6565b5b602082029050919050565b600081519050612035816117ae565b92915050565b600061204e61204984612000565b611726565b905080602084028301858111156120685761206761155e565b5b835b81811015612091578061207d8882612026565b84526020840193505060208101905061206a565b5050509392505050565b600082601f8301126120b0576120af611554565b5b60046120bd84828561203b565b91505092915050565b6000608082840312156120dc576120db61154a565b5b60006120ea8482850161209b565b91505092915050565b600067ffffffffffffffff82111561210e5761210d6116c6565b5b602082029050919050565b600061212c612127846120f3565b611726565b905080602084028301858111156121465761214561155e565b5b835b8181101561216f578061215b88826117c5565b845260208401935050602081019050612148565b5050509392505050565b600082601f83011261218e5761218d611554565b5b600261219b848285612119565b91505092915050565b6000604082840312156121ba576121b961154a565b5b60006121c884828501612179565b91505092915050565b60006121dd368361188f565b9050919050565b600081905092915050565b6121f8816117a4565b82525050565b600061220a83836121ef565b60208301905092915050565b61221f81611a54565b61222981846121e4565b925061223482611a6a565b8060005b8381101561226557815161224c87826121fe565b965061225783611a9b565b925050600181019050612238565b505050505050565b600081905092915050565b61228181611bd4565b61228b818461226d565b925061229682611bea565b8060005b838110156122c75781516122ae87826121fe565b96506122b983611bf4565b92505060018101905061229a565b505050505050565b6000610100820190506122e56000830186612216565b6122f26040830185612278565b6122ff60c0830184612216565b949350505050565b60008115159050919050565b61231c81612307565b811461232757600080fd5b50565b60008151905061233981612313565b92915050565b6000602082840312156123555761235461154a565b5b60006123638482850161232a565b91505092915050565b600082825260208201905092915050565b7f424c533a2077726f6e6720736967000000000000000000000000000000000000600082015250565b60006123b3600e8361236c565b91506123be8261237d565b602082019050919050565b600060208201905081810360008301526123e2816123a6565b9050919050565b7f6461746120746f6f2073686f727420666f722073696700000000000000000000600082015250565b600061241f60168361236c565b915061242a826123e9565b602082019050919050565b6000602082019050818103600083015261244e81612412565b9050919050565b7f424c533a20696e76616c6964207369676e617475726500000000000000000000600082015250565b600061248b60168361236c565b915061249682612455565b602082019050919050565b600060208201905081810360008301526124ba8161247e565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61250181611bd4565b61250b81846124ed565b925061251682611bea565b8060005b8381101561254757815161252e87826121fe565b965061253983611bf4565b92505060018101905061251a565b505050505050565b600061255b83836124f8565b60808301905092915050565b6000602082019050919050565b600061257f826124c1565b61258981856124cc565b9350612594836124dd565b8060005b838110156125c55781516125ac888261254f565b97506125b783612567565b925050600181019050612598565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61261281611a54565b61261c81846125fe565b925061262782611a6a565b8060005b8381101561265857815161263f87826121fe565b965061264a83611a9b565b92505060018101905061262b565b505050505050565b600061266c8383612609565b60408301905092915050565b6000602082019050919050565b6000612690826125d2565b61269a81856125dd565b93506126a5836125ee565b8060005b838110156126d65781516126bd8882612660565b97506126c883612678565b9250506001810190506126a9565b5085935050505092915050565b60006080820190506126f86000830186612216565b818103604083015261270a8185612574565b9050818103606083015261271e8184612685565b9050949350505050565b7f424c533a2076616c69646174655369676e617475726573206661696c65640000600082015250565b600061275e601e8361236c565b915061276982612728565b602082019050919050565b6000602082019050818103600083015261278d81612751565b9050919050565b6000819050919050565b6127af6127aa8261150c565b612794565b82525050565b60006127c1828461279e565b60208201915081905092915050565b6127d98161150c565b82525050565b600082825260208201905092915050565b60006127fb82611606565b61280581856127df565b9350612815818560208601611622565b61281e81611655565b840191505092915050565b600060408201905061283e60008301856127d0565b818103602083015261285081846127f0565b90509392505050565b600061286c612867846120f3565b611726565b905080602084028301858111156128865761288561155e565b5b835b818110156128af578061289b8882612026565b845260208401935050602081019050612888565b5050509392505050565b600082601f8301126128ce576128cd611554565b5b60026128db848285612859565b91505092915050565b6000604082840312156128fa576128f961154a565b5b6000612908848285016128b9565b91505092915050565b61291a81611766565b82525050565b60006080820190506129356000830187611516565b6129426020830186611516565b61294f6040830185612911565b61295c6060830184611d2a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f557365206a6163446f75626c652066756e6374696f6e20696e73746561640000600082015250565b60006129ca601e8361236c565b91506129d582612994565b602082019050919050565b600060208201905081810360008301526129f9816129bd565b9050919050565b6000612a0b826117a4565b9150612a16836117a4565b925082821015612a2957612a28611f35565b5b828203905092915050565b600061014082019050612a4a600083018d612911565b612a57602083018c611d2a565b612a64604083018b611516565b612a71606083018a611516565b612a7e6080830189611d2a565b612a8b60a0830188611d2a565b612a9860c0830187611d2a565b612aa560e0830186611d2a565b612ab3610100830185611d2a565b612ac1610120830184611516565b9b9a5050505050505050505050565b7f496e76616c6964206e756d626572000000000000000000000000000000000000600082015250565b6000612b06600e8361236c565b9150612b1182612ad0565b602082019050919050565b60006020820190508181036000830152612b3581612af9565b9050919050565b6000612b47826117a4565b9150612b52836117a4565b925082612b6257612b61612965565b5b828204905092915050565b6000612b78826117a4565b9150612b83836117a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbc57612bbb611f35565b5b82820290509291505056fea2646970667358221220d33aadb0c860f5f0dfcd7454baf5b7a554c99b5e644c80b8f54b2e728040172064736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b506139d3806100206000396000f3fe6080604052600436106100905760003560e01c806364c530cd1161005957806364c530cd14610193578063a6193531146101d0578063b7620eb41461020d578063c9e525df1461024a578063e3563a4f1461027557610090565b80629d925014610095578063275e2d79146100c057806340864431146100fd578063451711591461013a57806357f09b7214610156575b600080fd5b3480156100a157600080fd5b506100aa61029e565b6040516100b7919061231d565b60405180910390f35b3480156100cc57600080fd5b506100e760048036038101906100e291906123b1565b6102c2565b6040516100f4919061248e565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f91906127fa565b61050f565b60405161013191906128ee565b60405180910390f35b610154600480360381019061014f9190612983565b6105a2565b005b34801561016257600080fd5b5061017d600480360381019061017891906127fa565b61064e565b60405161018a9190612a47565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b59190612a87565b6107c7565b6040516101c7919061248e565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f291906127fa565b6109f9565b604051610204919061231d565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190612ad0565b610a86565b6040516102419190612a47565b60405180910390f35b34801561025657600080fd5b5061025f610ba6565b60405161026c9190612b28565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612b99565b610bca565b005b7fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b81565b60606102d8672d0b81dd8a2f892960c01b61102e565b6102ec67ba37aa0e4106ddb860c01b61102e565b6103006757b172c354cfc2f160c01b61102e565b60008383905067ffffffffffffffff81111561031f5761031e6124b5565b5b60405190808252806020026020018201604052801561035857816020015b6103456122a6565b81526020019060019003908161033d5790505b50905061036f67046e6c6b0211014f60c01b61102e565b61038367388828db7f62175e60c01b61102e565b60005b815181101561045c576103a3674fbbffecf999aca160c01b61102e565b6103b767b599e5f8e71d353560c01b61102e565b6000808686848181106103cd576103cc612c1a565b5b90506020028101906103df9190612c58565b8061014001906103ef9190612c81565b8101906103fc9190612ce4565b9150915061041467520ac9399946c4ad60c01b61102e565b60405180604001604052808381526020018281525084848151811061043c5761043b612c1a565b5b60200260200101819052505050808061045490612d53565b915050610386565b5061047167ec632268a0e1a80360c01b61102e565b61048567194caf73b459d37d60c01b61102e565b60006104b1827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611031565b90506104c7678c84da6e32e73d7860c01b61102e565b6104db67b4fa8f609e0f884960c01b61102e565b806000015181602001516040516020016104f6929190612d9b565b6040516020818303038152906040529250505092915050565b6105176122c0565b61052b676e84851bbd6e500860c01b61102e565b61053f67e517a1d8d843c78560c01b61102e565b61055367304e7858cc00a0ad60c01b61102e565b60006105666105618461064e565b611238565b905061057c673b0af52fcf23e3ed60c01b61102e565b61059067e7dd64849407d96e60c01b61102e565b61059a83826112a4565b915050919050565b6105b667bf1c7b82d86ce1c160c01b61102e565b6105ca67ab0d85b416180bff60c01b61102e565b6105de67b81f94a52bbc145f60c01b61102e565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016106189190612dd3565b6000604051808303818588803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b50505050505050565b6106566122e2565b61066a671f27efe2091ac5f260c01b61102e565b61067e67f6f56906dda70d2260c01b61102e565b61069267c986d0ecdb5a842e60c01b61102e565b6000826040015190506106af6763abeaf5f5e90e8860c01b61102e565b6106c367e0aee3ec2dce736d60c01b61102e565b600081511115610705576106e16701ed8e36fee8515f60c01b61102e565b6106f567e8a7845a73f62df360c01b61102e565b6106fe81610a86565b91506107c0565b61071967dd67def0743ebddc60c01b61102e565b61072d67c804926443c5a33560c01b61102e565b61074167ca91d97b55c3e7af60c01b61102e565b826000015173ffffffffffffffffffffffffffffffffffffffff1663e02afbae61c3506040518263ffffffff1660e01b81526004016080604051808303818786fa158015610793573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107b89190612eb4565b9150506107c2565b505b919050565b60606107dd676643876ad39f3a0360c01b61102e565b6107f167c49ef87a9a9f1df760c01b61102e565b610805670bf9013d2f1f3c9860c01b61102e565b6000828061014001906108189190612c81565b8101906108259190612f92565b905061083b67cd5cf70e108e531860c01b61102e565b61084f67bafdc82ac572bca160c01b61102e565b60006108638461085e90612fbf565b61064e565b905061087967ccf1222e83760a9860c01b61102e565b61088d67fe641d29fecb828d60c01b61102e565b60006108aa8561089c90612fbf565b6108a584611238565b6112a4565b90506108c06757898c38c41fdc3860c01b61102e565b6108d4676f7da73bf3dbe2a160c01b61102e565b6108e867bd7232853af1d2af60c01b61102e565b73__$b78e61b50eae8ff14018a753b33166207a$__63ebbdac918484846040518463ffffffff1660e01b8152600401610923939291906130bd565b602060405180830381865af4158015610940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610964919061312d565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906131b7565b60405180910390fd5b6109b76725458066e357671160c01b61102e565b6109cb6739360f4005b2e16f60c01b61102e565b6109df6778e0b19ffa897bd760c01b61102e565b604051806020016040528060008152509350505050919050565b6000610a0f67df74552a87a693fc60c01b61102e565b610a2367ff531c2c73f6e2f560c01b61102e565b610a3767f38d16bb6bddb5ae60c01b61102e565b6000610a4a610a458461064e565b611238565b9050610a6067662b0135a11145dd60c01b61102e565b610a7467c377772c1316844c60c01b61102e565b610a7e83826113df565b915050919050565b610a8e6122e2565b610aa26716adf62c8852059360c01b61102e565b610ab667022127005ea6fa0d60c01b61102e565b610aca67de1e14cc94caf25260c01b61102e565b600082519050610ae4674cf07536bb1607e060c01b61102e565b610af867be8a4959b6f32feb60c01b61102e565b610b0c67153f370e8872932660c01b61102e565b60808111610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613223565b60405180910390fd5b610b6367a9b99e911da9126e60c01b61102e565b610b77672e2980e086d2027260c01b61102e565b606081840103805183526020810151602084015260408101516040840152606081015160608401525050919050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781565b610bde67970d4eee97a7580b60c01b61102e565b610bf2676833eed6d40f20bd60c01b61102e565b610c066793192e858586ddad60c01b61102e565b610c1a670ac32f08e63f93a560c01b61102e565b60408282905014610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c579061328f565b60405180910390fd5b610c7467b5c6272f096aa43c60c01b61102e565b610c8867a4d61d3f2ab4519a60c01b61102e565b610c9c672a564e753c76f88f60c01b61102e565b60008282810190610cad9190612f92565b9050610cc2663fa3be7da06ce760c01b61102e565b610cd667ee47f5eecbe0f8a160c01b61102e565b6000858590509050610cf267f512a5c4a1ae152660c01b61102e565b610d0667d27a15d6a21e88f860c01b61102e565b60008167ffffffffffffffff811115610d2257610d216124b5565b5b604051908082528060200260200182016040528015610d5b57816020015b610d486122e2565b815260200190600190039081610d405790505b509050610d7267affa7139546d884960c01b61102e565b610d866799e9bf8e10b6ec5360c01b61102e565b60008267ffffffffffffffff811115610da257610da16124b5565b5b604051908082528060200260200182016040528015610ddb57816020015b610dc86122c0565b815260200190600190039081610dc05790505b509050610df26764b30b25d711410560c01b61102e565b610e06678010ee1d8ec7b25160c01b61102e565b60005b83811015610f1857610e2567c7a6ccffdd8d34a260c01b61102e565b610e3967f3b15e93d613bbb460c01b61102e565b6000898983818110610e4e57610e4d612c1a565b5b9050602002810190610e609190612c58565b610e6990612fbf565b9050610e7f678ec1e3b1bb8b785960c01b61102e565b610e888161064e565b848381518110610e9b57610e9a612c1a565b5b6020026020010181905250610eba67c5364224f4a2ef7760c01b61102e565b610ee681610ee1868581518110610ed457610ed3612c1a565b5b6020026020010151611238565b6112a4565b838381518110610ef957610ef8612c1a565b5b6020026020010181905250508080610f1090612d53565b915050610e09565b50610f2d67a575cf8708275b0760c01b61102e565b610f41672379a1ef07a81a8b60c01b61102e565b610f5567ba6c4abe6ac7951960c01b61102e565b73__$b78e61b50eae8ff14018a753b33166207a$__63914137638584846040518463ffffffff1660e01b8152600401610f90939291906134d1565b602060405180830381865af4158015610fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd1919061312d565b611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613562565b60405180910390fd5b611024676c5d02c438e237e260c01b61102e565b5050505050505050565b50565b6110396122a6565b61104d67bac7aefb2cdc58d160c01b61145a565b61106167bf7b90b57551ba6d60c01b61145a565b61107567d657c2b9819e42af60c01b61145a565b60008360008151811061108b5761108a612c1a565b5b60200260200101516000015190506110ad67ef98579942a1581360c01b61145a565b6110c1676f5148e87e4d2cb660c01b61145a565b6000846000815181106110d7576110d6612c1a565b5b60200260200101516020015190506110f96764536b9c3cc88a1e60c01b61145a565b61110d67051084d37f63a34f60c01b61145a565b60006001905061112767eca070057dd9fec360c01b61145a565b61113b672b4e9dc087ddb0bf60c01b61145a565b6000600190505b86518110156111ca5761115f6729e66f05b1cb6ad460c01b61145a565b6111ab8484848a858151811061117857611177612c1a565b5b6020026020010151600001518b868151811061119757611196612c1a565b5b60200260200101516020015160018c61145d565b80945081955082965050505080806111c290612d53565b915050611142565b506111df6736cd004b227a1c3260c01b61145a565b6111eb83838388611e0d565b809350819450505061120767d8fd332adb821d7960c01b61145a565b8284600001818152505061122567d4941698606fcfc960c01b61145a565b8184602001818152505050505092915050565b600061124e6729c525b406f3549160c01b61102e565b61126267d2f8164acc408f7760c01b61102e565b61127667390558382d812f9360c01b61102e565b816040516020016112879190612a47565b604051602081830303815290604052805190602001209050919050565b6112ac6122c0565b6112c067056df3dde3a9dcca60c01b61102e565b6112d467146e7f0bb9e3686360c01b61102e565b6112e867abb8f9f20cc5bb2160c01b61102e565b60006112f484846113df565b905061130a672714cd29604110c360c01b61102e565b61131e6782e1177556e9eb5b60c01b61102e565b73__$b78e61b50eae8ff14018a753b33166207a$__63a850a9097fd84c4373167c517e9ccd66803f86d8a4f49e7e1315a7a73b516affea7428f82b8360405160200161136a91906135a3565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611396929190613617565b6040805180830381865af41580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d691906136d2565b91505092915050565b60006113f5672aeafe928910bff260c01b61102e565b61140967fc867821d022e53660c01b61102e565b61141d67bbc75be5d0d0751060c01b61102e565b61142683611f60565b82304660405160200161143c949392919061370e565b60405160208183030381529060405280519060200120905092915050565b50565b6000806000611476679a27a40af94e045260c01b61145a565b61148a67aa7c8da870ffcf1060c01b61145a565b61149e67f461a75daddcbcb760c01b61145a565b60008a1480156114ae5750600089145b156114e9576114c767beb516ae475f9a1d60c01b61145a565b6114db679860f6a6df7bfb1060c01b61145a565b868686925092509250611e00565b6114fd673a15274d39a347d860c01b61145a565b61151167c7f5dcfae91d30ea60c01b61145a565b611525677defc86480cf272b60c01b61145a565b6000871480156115355750600086145b156115705761154e672df08358ea1862b660c01b61145a565b61156267619e727e2769ee3160c01b61145a565b898989925092509250611e00565b61158467d72ddf846423372a60c01b61145a565b611598673adcf0cef6408e9b60c01b61145a565b6115ac676aa65cbc500b4c7760c01b61145a565b6115b46122e2565b6115c86720f57a3e1944fb8860c01b61145a565b84806115d7576115d6613753565b5b898a09816000600481106115ee576115ed612c1a565b5b60200201818152505061160b6775eb83505ce6345860c01b61145a565b848061161a57611619613753565b5b8160006004811061162e5761162d612c1a565b5b60200201518a098160016004811061164957611648612c1a565b5b602002018181525050611666670c3de006625138e360c01b61145a565b848061167557611674613753565b5b8687098160026004811061168c5761168b612c1a565b5b6020020181815250506116a96722859985dccfda2d60c01b61145a565b84806116b8576116b7613753565b5b816002600481106116cc576116cb612c1a565b5b60200201518709816003600481106116e7576116e6612c1a565b5b6020020181815250506117046720189291bf0487a460c01b61145a565b6040518060800160405280868061171e5761171d613753565b5b8360026004811061173257611731612c1a565b5b60200201518e098152602001868061174d5761174c613753565b5b8360036004811061176157611760612c1a565b5b60200201518d098152602001868061177c5761177b613753565b5b836000600481106117905761178f612c1a565b5b60200201518b09815260200186806117ab576117aa613753565b5b836001600481106117bf576117be612c1a565b5b60200201518a0981525090506117df670cad95991ed41a3060c01b61145a565b6117f367ab01c39f7b652f2260c01b61145a565b61180767d0d8e8b23d73775660c01b61145a565b8060026004811061181b5761181a612c1a565b5b60200201518160006004811061183457611833612c1a565b5b602002015114158015611857575061185667b97e4799fddd49e660c01b61201d565b5b806118ae57508060036004811061187157611870612c1a565b5b60200201518160016004811061188a57611889612c1a565b5b6020020151141580156118ad57506118ac6761abfbf0cefe697c60c01b61201d565b5b5b6118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906137ce565b60405180910390fd5b61190167834ec6e505c97d5360c01b61145a565b611915672e072af96b04c65760c01b61145a565b6119296793f15b39bd9bbdef60c01b61145a565b6119316122e2565b61194567309fe16b369f603660c01b61145a565b858061195457611953613753565b5b8260006004811061196857611967612c1a565b5b60200201518761197891906137ee565b8360026004811061198c5761198b612c1a565b5b602002015108816000600481106119a6576119a5612c1a565b5b6020020181815250506119c3679b7aeaf5289dec9660c01b61145a565b85806119d2576119d1613753565b5b826001600481106119e6576119e5612c1a565b5b6020020151876119f691906137ee565b83600360048110611a0a57611a09612c1a565b5b60200201510881600160048110611a2457611a23612c1a565b5b602002018181525050611a4167574a980ed84757ed60c01b61145a565b8580611a5057611a4f613753565b5b81600060048110611a6457611a63612c1a565b5b602002015182600060048110611a7d57611a7c612c1a565b5b60200201510981600260048110611a9757611a96612c1a565b5b602002018181525050611ab46783b2fdb85879030460c01b61145a565b8580611ac357611ac2613753565b5b81600060048110611ad757611ad6612c1a565b5b602002015182600260048110611af057611aef612c1a565b5b60200201510981600360048110611b0a57611b09612c1a565b5b602002018181525050611b2767ac86b7c206f0d98d60c01b61145a565b611b3b67a03209877a68e28460c01b61145a565b60008680611b4c57611b4b613753565b5b82600360048110611b6057611b5f612c1a565b5b602002015188611b7091906137ee565b8880611b7f57611b7e613753565b5b84600160048110611b9357611b92612c1a565b5b602002015185600160048110611bac57611bab612c1a565b5b602002015109089050611bc967539c8ce58307c5ba60c01b61145a565b8680611bd857611bd7613753565b5b8780611be757611be6613753565b5b8880611bf657611bf5613753565b5b84600260048110611c0a57611c09612c1a565b5b602002015186600060048110611c2357611c22612c1a565b5b60200201510960020988611c3791906137ee565b82089050611c4f6735b4c673b5b377c460c01b61145a565b611c63671782567ee36034e260c01b61145a565b60008780611c7457611c73613753565b5b8880611c8357611c82613753565b5b838a611c8f91906137ee565b8a80611c9e57611c9d613753565b5b86600260048110611cb257611cb1612c1a565b5b602002015188600060048110611ccb57611cca612c1a565b5b6020020151090884600160048110611ce657611ce5612c1a565b5b6020020151099050611d02671e5050fde573506f60c01b61145a565b8780611d1157611d10613753565b5b8880611d2057611d1f613753565b5b84600360048110611d3457611d33612c1a565b5b602002015186600160048110611d4d57611d4c612c1a565b5b60200201510989611d5e91906137ee565b82089050611d76677f2772cfe3830ced60c01b61145a565b611d8a67bebb6fd9d574a37560c01b61145a565b60008880611d9b57611d9a613753565b5b8980611daa57611da9613753565b5b8b8f0985600060048110611dc157611dc0612c1a565b5b6020020151099050611ddd6776c44c395bc8517d60c01b61145a565b611df167a8b781e23d88f5b060c01b61145a565b82828297509750975050505050505b9750975097945050505050565b600080611e2467804ab996c53b718260c01b61145a565b611e38671002e9121430c08660c01b61145a565b611e4c6704f62169fa2635bb60c01b61145a565b6000611e588585612028565b9050611e6e676b289e19f36e6df060c01b61145a565b611e826786ccceb7ee22875160c01b61145a565b60008480611e9357611e92613753565b5b8283099050611eac67e42ac8eba0fac65060c01b61145a565b611ec0678cb7be2d4d4b596e60c01b61145a565b60008580611ed157611ed0613753565b5b828a099050611eea6706348f877bc37d0760c01b61145a565b611efe673da8e856b5f9c49a60c01b61145a565b60008680611f0f57611f0e613753565b5b8780611f1e57611f1d613753565b5b8486098a099050611f39671bbcb73ca041a28e60c01b61145a565b611f4d67775eae708f68d39d60c01b61145a565b8181955095505050505094509492505050565b6000611f7667eee777d2085b6adf60c01b61102e565b611f8a671eaf7dcc85555ab260c01b61102e565b611f9e678b3220503af7e2c460c01b61102e565b8160000151826020015183604001518051906020012084606001518051906020012085608001518660a001518760c001518860e001518961010001518a6101200151805190602001206040516020016120009a99989796959493929190613822565b604051602081830303815290604052805190602001209050919050565b600060019050919050565b600061203e678fe06fba91bceb8f60c01b61145a565b6120526711a925edb7892ed360c01b61145a565b61206667c01575aa641dfb5f60c01b61145a565b61207a67a8ea7b1c5af75c1360c01b61145a565b6000831415801561208b5750818314155b8015612098575060008214155b6120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce9061390a565b60405180910390fd5b6120eb674c50d41cb23f117160c01b61145a565b6120ff67562f67e3bcbdd66760c01b61145a565b61211367c7f54801d590403f60c01b61145a565b6000612129672f64517e73fe941060c01b61145a565b61213d67bd841857cd07687b60c01b61145a565b6000600190506121576754b304c9a6f15fab60c01b61145a565b61216b67d26721bd186df9bb60c01b61145a565b600084905061218467d05918f748bc4ce960c01b61145a565b61219867d8fc1d6ed31b4cfc60c01b61145a565b60006121ae67a56ff3a1d863690860c01b61145a565b6121c2671772bd35812a30f660c01b61145a565b5b60008714612271576121df6705fb7ca6e038f6e060c01b61145a565b86826121eb919061392a565b9050612201675d8902f6e02d72d560c01b61145a565b82868061221157612210613753565b5b87806122205761221f613753565b5b8584098861222e91906137ee565b8608809450819550505061224c670700f75912b1f41560c01b61145a565b868782612259919061395b565b8361226491906137ee565b80985081935050506121c3565b61228567556266df3e93c49d60c01b61145a565b61229967d75335e3957624f460c01b61145a565b8394505050505092915050565b604051806040016040528060008152602001600081525090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6000819050919050565b61231781612304565b82525050565b6000602082019050612332600083018461230e565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126123715761237061234c565b5b8235905067ffffffffffffffff81111561238e5761238d612351565b5b6020830191508360208202830111156123aa576123a9612356565b5b9250929050565b600080602083850312156123c8576123c7612342565b5b600083013567ffffffffffffffff8111156123e6576123e5612347565b5b6123f28582860161235b565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561243857808201518184015260208101905061241d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612460826123fe565b61246a8185612409565b935061247a81856020860161241a565b61248381612444565b840191505092915050565b600060208201905081810360008301526124a88184612455565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124ed82612444565b810181811067ffffffffffffffff8211171561250c5761250b6124b5565b5b80604052505050565b600061251f612338565b905061252b82826124e4565b919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061256082612535565b9050919050565b61257081612555565b811461257b57600080fd5b50565b60008135905061258d81612567565b92915050565b6000819050919050565b6125a681612593565b81146125b157600080fd5b50565b6000813590506125c38161259d565b92915050565b600080fd5b600067ffffffffffffffff8211156125e9576125e86124b5565b5b6125f282612444565b9050602081019050919050565b82818337600083830152505050565b600061262161261c846125ce565b612515565b90508281526020810184848401111561263d5761263c6125c9565b5b6126488482856125ff565b509392505050565b600082601f8301126126655761266461234c565b5b813561267584826020860161260e565b91505092915050565b60006101608284031215612695576126946124b0565b5b6126a0610160612515565b905060006126b08482850161257e565b60008301525060206126c4848285016125b4565b602083015250604082013567ffffffffffffffff8111156126e8576126e7612530565b5b6126f484828501612650565b604083015250606082013567ffffffffffffffff81111561271857612717612530565b5b61272484828501612650565b6060830152506080612738848285016125b4565b60808301525060a061274c848285016125b4565b60a08301525060c0612760848285016125b4565b60c08301525060e0612774848285016125b4565b60e083015250610100612789848285016125b4565b6101008301525061012082013567ffffffffffffffff8111156127af576127ae612530565b5b6127bb84828501612650565b6101208301525061014082013567ffffffffffffffff8111156127e1576127e0612530565b5b6127ed84828501612650565b6101408301525092915050565b6000602082840312156128105761280f612342565b5b600082013567ffffffffffffffff81111561282e5761282d612347565b5b61283a8482850161267e565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b61286c81612593565b82525050565b600061287e8383612863565b60208301905092915050565b6000602082019050919050565b6128a081612843565b6128aa818461284e565b92506128b582612859565b8060005b838110156128e65781516128cd8782612872565b96506128d88361288a565b9250506001810190506128b9565b505050505050565b60006040820190506129036000830184612897565b92915050565b600061291482612555565b9050919050565b61292481612909565b811461292f57600080fd5b50565b6000813590506129418161291b565b92915050565b600063ffffffff82169050919050565b61296081612947565b811461296b57600080fd5b50565b60008135905061297d81612957565b92915050565b6000806040838503121561299a57612999612342565b5b60006129a885828601612932565b92505060206129b98582860161296e565b9150509250929050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6129f9816129c3565b612a0381846129ce565b9250612a0e826129d9565b8060005b83811015612a3f578151612a268782612872565b9650612a31836129e3565b925050600181019050612a12565b505050505050565b6000608082019050612a5c60008301846129f0565b92915050565b600080fd5b60006101608284031215612a7e57612a7d612a62565b5b81905092915050565b600060208284031215612a9d57612a9c612342565b5b600082013567ffffffffffffffff811115612abb57612aba612347565b5b612ac784828501612a67565b91505092915050565b600060208284031215612ae657612ae5612342565b5b600082013567ffffffffffffffff811115612b0457612b03612347565b5b612b1084828501612650565b91505092915050565b612b2281612593565b82525050565b6000602082019050612b3d6000830184612b19565b92915050565b60008083601f840112612b5957612b5861234c565b5b8235905067ffffffffffffffff811115612b7657612b75612351565b5b602083019150836001820283011115612b9257612b91612356565b5b9250929050565b60008060008060408587031215612bb357612bb2612342565b5b600085013567ffffffffffffffff811115612bd157612bd0612347565b5b612bdd8782880161235b565b9450945050602085013567ffffffffffffffff811115612c0057612bff612347565b5b612c0c87828801612b43565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112612c7557612c74612c49565b5b80830191505092915050565b60008083356001602003843603038112612c9e57612c9d612c49565b5b80840192508235915067ffffffffffffffff821115612cc057612cbf612c4e565b5b602083019250600182023603831315612cdc57612cdb612c53565b5b509250929050565b60008060408385031215612cfb57612cfa612342565b5b6000612d09858286016125b4565b9250506020612d1a858286016125b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5e82612593565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d9057612d8f612d24565b5b600182019050919050565b6000604082019050612db06000830185612b19565b612dbd6020830184612b19565b9392505050565b612dcd81612947565b82525050565b6000602082019050612de86000830184612dc4565b92915050565b600067ffffffffffffffff821115612e0957612e086124b5565b5b602082029050919050565b600081519050612e238161259d565b92915050565b6000612e3c612e3784612dee565b612515565b90508060208402830185811115612e5657612e55612356565b5b835b81811015612e7f5780612e6b8882612e14565b845260208401935050602081019050612e58565b5050509392505050565b600082601f830112612e9e57612e9d61234c565b5b6004612eab848285612e29565b91505092915050565b600060808284031215612eca57612ec9612342565b5b6000612ed884828501612e89565b91505092915050565b600067ffffffffffffffff821115612efc57612efb6124b5565b5b602082029050919050565b6000612f1a612f1584612ee1565b612515565b90508060208402830185811115612f3457612f33612356565b5b835b81811015612f5d5780612f4988826125b4565b845260208401935050602081019050612f36565b5050509392505050565b600082601f830112612f7c57612f7b61234c565b5b6002612f89848285612f07565b91505092915050565b600060408284031215612fa857612fa7612342565b5b6000612fb684828501612f67565b91505092915050565b6000612fcb368361267e565b9050919050565b600081905092915050565b612fe681612593565b82525050565b6000612ff88383612fdd565b60208301905092915050565b61300d81612843565b6130178184612fd2565b925061302282612859565b8060005b8381101561305357815161303a8782612fec565b96506130458361288a565b925050600181019050613026565b505050505050565b600081905092915050565b61306f816129c3565b613079818461305b565b9250613084826129d9565b8060005b838110156130b557815161309c8782612fec565b96506130a7836129e3565b925050600181019050613088565b505050505050565b6000610100820190506130d36000830186613004565b6130e06040830185613066565b6130ed60c0830184613004565b949350505050565b60008115159050919050565b61310a816130f5565b811461311557600080fd5b50565b60008151905061312781613101565b92915050565b60006020828403121561314357613142612342565b5b600061315184828501613118565b91505092915050565b600082825260208201905092915050565b7f424c533a2077726f6e6720736967000000000000000000000000000000000000600082015250565b60006131a1600e8361315a565b91506131ac8261316b565b602082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b7f6461746120746f6f2073686f727420666f722073696700000000000000000000600082015250565b600061320d60168361315a565b9150613218826131d7565b602082019050919050565b6000602082019050818103600083015261323c81613200565b9050919050565b7f424c533a20696e76616c6964207369676e617475726500000000000000000000600082015250565b600061327960168361315a565b915061328482613243565b602082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b6132ef816129c3565b6132f981846132db565b9250613304826129d9565b8060005b8381101561333557815161331c8782612fec565b9650613327836129e3565b925050600181019050613308565b505050505050565b600061334983836132e6565b60808301905092915050565b6000602082019050919050565b600061336d826132af565b61337781856132ba565b9350613382836132cb565b8060005b838110156133b357815161339a888261333d565b97506133a583613355565b925050600181019050613386565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61340081612843565b61340a81846133ec565b925061341582612859565b8060005b8381101561344657815161342d8782612fec565b96506134388361288a565b925050600181019050613419565b505050505050565b600061345a83836133f7565b60408301905092915050565b6000602082019050919050565b600061347e826133c0565b61348881856133cb565b9350613493836133dc565b8060005b838110156134c45781516134ab888261344e565b97506134b683613466565b925050600181019050613497565b5085935050505092915050565b60006080820190506134e66000830186613004565b81810360408301526134f88185613362565b9050818103606083015261350c8184613473565b9050949350505050565b7f424c533a2076616c69646174655369676e617475726573206661696c65640000600082015250565b600061354c601e8361315a565b915061355782613516565b602082019050919050565b6000602082019050818103600083015261357b8161353f565b9050919050565b6000819050919050565b61359d61359882612304565b613582565b82525050565b60006135af828461358c565b60208201915081905092915050565b6135c781612304565b82525050565b600082825260208201905092915050565b60006135e9826123fe565b6135f381856135cd565b935061360381856020860161241a565b61360c81612444565b840191505092915050565b600060408201905061362c60008301856135be565b818103602083015261363e81846135de565b90509392505050565b600061365a61365584612ee1565b612515565b9050806020840283018581111561367457613673612356565b5b835b8181101561369d57806136898882612e14565b845260208401935050602081019050613676565b5050509392505050565b600082601f8301126136bc576136bb61234c565b5b60026136c9848285613647565b91505092915050565b6000604082840312156136e8576136e7612342565b5b60006136f6848285016136a7565b91505092915050565b61370881612555565b82525050565b6000608082019050613723600083018761230e565b613730602083018661230e565b61373d60408301856136ff565b61374a6060830184612b19565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f557365206a6163446f75626c652066756e6374696f6e20696e73746561640000600082015250565b60006137b8601e8361315a565b91506137c382613782565b602082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b60006137f982612593565b915061380483612593565b925082820390508181111561381c5761381b612d24565b5b92915050565b600061014082019050613838600083018d6136ff565b613845602083018c612b19565b613852604083018b61230e565b61385f606083018a61230e565b61386c6080830189612b19565b61387960a0830188612b19565b61388660c0830187612b19565b61389360e0830186612b19565b6138a1610100830185612b19565b6138af61012083018461230e565b9b9a5050505050505050505050565b7f496e76616c6964206e756d626572000000000000000000000000000000000000600082015250565b60006138f4600e8361315a565b91506138ff826138be565b602082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b600061393582612593565b915061394083612593565b9250826139505761394f613753565b5b828204905092915050565b600061396682612593565b915061397183612593565b925082820261397f81612593565b9150828204841483151761399657613995612d24565b5b509291505056fea264697066735822122075e6cac251cf596a1d44634ae2178bfcd731829f21ec04aeb684408ead82c18c64736f6c63430008110033"; type BLSSignatureAggregatorConstructorParams = | [ diff --git a/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts b/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts index 91f3a307..1fd10d4e 100644 --- a/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts @@ -114,7 +114,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6131c4610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063914137631461005b578063a850a9091461008b578063c2ad5b98146100bb578063ebbdac91146100eb575b600080fd5b610075600480360381019061007091906128ed565b61011b565b6040516100829190612993565b60405180910390f35b6100a560048036038101906100a09190612a99565b610144565b6040516100b29190612ba0565b60405180910390f35b6100d560048036038101906100d09190612bbb565b61015e565b6040516100e29190612993565b60405180910390f35b61010560048036038101906101009190612be8565b6101b4565b6040516101129190612993565b60405180910390f35b600080600061012b8686866102d0565b915091508080156101395750815b925050509392505050565b61014c6124bf565b610156838361083e565b905092915050565b6000806001905060005b8180156101755750600481105b156101aa57600084826004811061018f5761018e612c3c565b5b602002015114915080806101a290612c9a565b915050610168565b5080915050919050565b600080600167ffffffffffffffff8111156101d2576101d161254f565b5b60405190808252806020026020018201604052801561020b57816020015b6101f86124e1565b8152602001906001900390816101f05790505b5090506000600167ffffffffffffffff81111561022b5761022a61254f565b5b60405190808252806020026020018201604052801561026457816020015b6102516124bf565b8152602001906001900390816102495790505b509050848260008151811061027c5761027b612c3c565b5b6020026020010181905250838160008151811061029c5761029b612c3c565b5b60200260200101819052506000806102b58885856102d0565b915091508080156102c35750815b9450505050509392505050565b6000806000845190506000811161031c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031390612d66565b60405180910390fd5b8351811461035f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035690612df8565b60405180910390fd5b600060066001836103709190612e18565b61037a9190612e6e565b905060008167ffffffffffffffff8111156103985761039761254f565b5b6040519080825280602002602001820160405280156103c65781602001602082028036833780820191505090505b509050876000600281106103dd576103dc612c3c565b5b6020020151816000815181106103f6576103f5612c3c565b5b6020026020010181815250508760016002811061041657610415612c3c565b5b60200201518160018151811061042f5761042e612c3c565b5b6020026020010181815250507f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106104705761046f612c3c565b5b6020026020010181815250507f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed816003815181106104b1576104b0612c3c565b5b6020026020010181815250507f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec816004815181106104f2576104f1612c3c565b5b6020026020010181815250507f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8160058151811061053357610532612c3c565b5b60200260200101818152505060005b838110156107d85786818151811061055d5761055c612c3c565b5b602002602001015160006002811061057857610577612c3c565b5b6020020151826006808461058c9190612e6e565b6105969190612e18565b815181106105a7576105a6612c3c565b5b6020026020010181815250508681815181106105c6576105c5612c3c565b5b60200260200101516001600281106105e1576105e0612c3c565b5b60200201518260076006846105f69190612e6e565b6106009190612e18565b8151811061061157610610612c3c565b5b6020026020010181815250508781815181106106305761062f612c3c565b5b602002602001015160016004811061064b5761064a612c3c565b5b60200201518260086006846106609190612e6e565b61066a9190612e18565b8151811061067b5761067a612c3c565b5b60200260200101818152505087818151811061069a57610699612c3c565b5b60200260200101516000600481106106b5576106b4612c3c565b5b60200201518260096006846106ca9190612e6e565b6106d49190612e18565b815181106106e5576106e4612c3c565b5b60200260200101818152505087818151811061070457610703612c3c565b5b602002602001015160036004811061071f5761071e612c3c565b5b602002015182600a6006846107349190612e6e565b61073e9190612e18565b8151811061074f5761074e612c3c565b5b60200260200101818152505087818151811061076e5761076d612c3c565b5b602002602001015160026004811061078957610788612c3c565b5b602002015182600b60068461079e9190612e6e565b6107a89190612e18565b815181106107b9576107b8612c3c565b5b60200260200101818152505080806107d090612c9a565b915050610542565b506107e1612503565b60005a90506020826020860260208601600885fa95508561080d57600080965096505050505050610836565b60008260006001811061082357610822612c3c565b5b6020020151141560019650965050505050505b935093915050565b6108466124bf565b600061085284846109ef565b905060006108778260006002811061086d5761086c612c3c565b5b6020020151610b80565b9050600061089c8360016002811061089257610891612c3c565b5b6020020151610b80565b90506108a66124e1565b826000600281106108ba576108b9612c3c565b5b6020020151816000600481106108d3576108d2612c3c565b5b602002018181525050826001600281106108f0576108ef612c3c565b5b60200201518160016004811061090957610908612c3c565b5b6020020181815250508160006002811061092657610925612c3c565b5b60200201518160026004811061093f5761093e612c3c565b5b6020020181815250508160016002811061095c5761095b612c3c565b5b60200201518160036004811061097557610974612c3c565b5b602002018181525050600060408460808460066107d05a03fa9050806000811461099e576109a0565bfe5b50806109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890612f14565b60405180910390fd5b839550505050505092915050565b6109f76124bf565b6000610a0384846112ca565b90506000806000806018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477801000000000000000000000000000000000000000000000000870908925060488601905077ffffffffffffffffffffffffffffffffffffffffffffffff815116935060608601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709089150506040518060400160405280838152602001828152509550505050505092915050565b610b886124bf565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190612fa6565b60405180910390fd5b60008290506000610bfa826115c2565b91505060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c2e57610c2d612fc6565b5b83840990507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c6257610c61612fc6565b5b60048208905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610c9957610c98612fc6565b5b77b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd8509905060007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610ce757610ce6612fc6565b5b8383099050610cf58161160b565b90507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d2657610d25612fc6565b5b82830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d5a57610d59612fc6565b5b81830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610d8e57610d8d612fc6565b5b82860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610dc257610dc1612fc6565b5b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610dee9190612ff5565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe0894507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610e3957610e38612fc6565b5b85860991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610e6d57610e6c612fc6565b5b85830991507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610ea157610ea0612fc6565b5b6003830891506000610eb2836115c2565b80925081945050508015610f165784610ef457827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610ef19190612ff5565b92505b60405180604001604052808781526020018481525096505050505050506112c5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610f4557610f44612fc6565b5b600187087f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610f749190612ff5565b95507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610fa557610fa4612fc6565b5b86870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780610fd957610fd8612fc6565b5b86840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061100d5761100c612fc6565b5b60038408925061101c836115c2565b80925081945050508015611080578461105e57827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761105b9190612ff5565b92505b60405180604001604052808781526020018481525096505050505050506112c5565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806110af576110ae612fc6565b5b84850995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806110e3576110e2612fc6565b5b86870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061111757611116612fc6565b5b82870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061114b5761114a612fc6565b5b82870995507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061117f5761117e612fc6565b5b6001870895507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806111b4576111b3612fc6565b5b86870992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806111e8576111e7612fc6565b5b86840992507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061121c5761121b612fc6565b5b60038408925061122b836115c2565b809250819450505080611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061309b565b60405180910390fd5b846112a757827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476112a49190612ff5565b92505b60405180604001604052808781526020018481525096505050505050505b919050565b60606000825190506000600460408360206112e59190612e18565b6112ef9190612e18565b6112f99190612e18565b67ffffffffffffffff8111156113125761131161254f565b5b6040519080825280601f01601f1916602001820160405280156113445781602001600182028036833780820191505090505b5090506000606067ffffffffffffffff8111156113645761136361254f565b5b6040519080825280601f01601f1916602001820160405280156113965781602001600182028036833780820191505090505b5090506060820160005b848110156113be5760208101870151818301526020810190506113a0565b508381019050600081536001810190506060815360018101905060008153600181019050868152602081019050602081535060006002836040516114029190613135565b602060405180830381855afa15801561141f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114429190613161565b9050600060429450848452816020850152600160408501538760418501526020604160200185015360028460405161147a9190613135565b602060405180830381855afa158015611497573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114ba9190613161565b90508060208401528082188060208601526002604086015388604186015260206041602001860153506002846040516114f39190613135565b602060405180830381855afa158015611510573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115339190613161565b905080604084015280821880602086015260036040860153886041860152602060416020018601535060028460405161156c9190613135565b602060405180830381855afa158015611589573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115ac9190613161565b9050806060840152829550505050505092915050565b6000806115ce8361161d565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611600576115ff612fc6565b5b838409149050915091565b600061161682611d65565b9050919050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a0998505050505050505050919050565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a0998505050505050505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060200160405280600190602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125878261253e565b810181811067ffffffffffffffff821117156125a6576125a561254f565b5b80604052505050565b60006125b9612525565b90506125c5828261257e565b919050565b600067ffffffffffffffff8211156125e5576125e461254f565b5b602082029050919050565b600080fd5b6000819050919050565b612608816125f5565b811461261357600080fd5b50565b600081359050612625816125ff565b92915050565b600061263e612639846125ca565b6125af565b90508060208402830185811115612658576126576125f0565b5b835b81811015612681578061266d8882612616565b84526020840193505060208101905061265a565b5050509392505050565b600082601f8301126126a05761269f612539565b5b60026126ad84828561262b565b91505092915050565b600067ffffffffffffffff8211156126d1576126d061254f565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156126fd576126fc61254f565b5b602082029050919050565b600061271b612716846126e2565b6125af565b90508060208402830185811115612735576127346125f0565b5b835b8181101561275e578061274a8882612616565b845260208401935050602081019050612737565b5050509392505050565b600082601f83011261277d5761277c612539565b5b600461278a848285612708565b91505092915050565b60006127a66127a1846126b6565b6125af565b905080838252602082019050608084028301858111156127c9576127c86125f0565b5b835b818110156127f257806127de8882612768565b8452602084019350506080810190506127cb565b5050509392505050565b600082601f83011261281157612810612539565b5b8135612821848260208601612793565b91505092915050565b600067ffffffffffffffff8211156128455761284461254f565b5b602082029050602081019050919050565b60006128696128648461282a565b6125af565b9050808382526020820190506040840283018581111561288c5761288b6125f0565b5b835b818110156128b557806128a1888261268b565b84526020840193505060408101905061288e565b5050509392505050565b600082601f8301126128d4576128d3612539565b5b81356128e4848260208601612856565b91505092915050565b6000806000608084860312156129065761290561252f565b5b60006129148682870161268b565b935050604084013567ffffffffffffffff81111561293557612934612534565b5b612941868287016127fc565b925050606084013567ffffffffffffffff81111561296257612961612534565b5b61296e868287016128bf565b9150509250925092565b60008115159050919050565b61298d81612978565b82525050565b60006020820190506129a86000830184612984565b92915050565b6000819050919050565b6129c1816129ae565b81146129cc57600080fd5b50565b6000813590506129de816129b8565b92915050565b600080fd5b600067ffffffffffffffff821115612a0457612a0361254f565b5b612a0d8261253e565b9050602081019050919050565b82818337600083830152505050565b6000612a3c612a37846129e9565b6125af565b905082815260208101848484011115612a5857612a576129e4565b5b612a63848285612a1a565b509392505050565b600082601f830112612a8057612a7f612539565b5b8135612a90848260208601612a29565b91505092915050565b60008060408385031215612ab057612aaf61252f565b5b6000612abe858286016129cf565b925050602083013567ffffffffffffffff811115612adf57612ade612534565b5b612aeb85828601612a6b565b9150509250929050565b600060029050919050565b600081905092915050565b6000819050919050565b612b1e816125f5565b82525050565b6000612b308383612b15565b60208301905092915050565b6000602082019050919050565b612b5281612af5565b612b5c8184612b00565b9250612b6782612b0b565b8060005b83811015612b98578151612b7f8782612b24565b9650612b8a83612b3c565b925050600181019050612b6b565b505050505050565b6000604082019050612bb56000830184612b49565b92915050565b600060808284031215612bd157612bd061252f565b5b6000612bdf84828501612768565b91505092915050565b60008060006101008486031215612c0257612c0161252f565b5b6000612c108682870161268b565b9350506040612c2186828701612768565b92505060c0612c328682870161268b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ca5826125f5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cd857612cd7612c6b565b5b600182019050919050565b600082825260208201905092915050565b7f424c533a206e756d626572206f66207075626c6963206b6579206973207a657260008201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d50602183612ce3565b9150612d5b82612cf4565b604082019050919050565b60006020820190508181036000830152612d7f81612d43565b9050919050565b7f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d60008201527f65737361676573206d75737420626520657175616c0000000000000000000000602082015250565b6000612de2603583612ce3565b9150612ded82612d86565b604082019050919050565b60006020820190508181036000830152612e1181612dd5565b9050919050565b6000612e23826125f5565b9150612e2e836125f5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e6357612e62612c6b565b5b828201905092915050565b6000612e79826125f5565b9150612e84836125f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ebd57612ebc612c6b565b5b828202905092915050565b7f424c533a20626e206164642063616c6c206661696c6564000000000000000000600082015250565b6000612efe601783612ce3565b9150612f0982612ec8565b602082019050919050565b60006020820190508181036000830152612f2d81612ef1565b9050919050565b7f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d60008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b6000612f90602383612ce3565b9150612f9b82612f34565b604082019050919050565b60006020820190508181036000830152612fbf81612f83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613000826125f5565b915061300b836125f5565b92508282101561301e5761301d612c6b565b5b828203905092915050565b7f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613085602283612ce3565b915061309082613029565b604082019050919050565b600060208201905081810360008301526130b481613078565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156130ef5780820151818401526020810190506130d4565b838111156130fe576000848401525b50505050565b600061310f826130bb565b61311981856130c6565b93506131298185602086016130d1565b80840191505092915050565b60006131418284613104565b915081905092915050565b60008151905061315b816129b8565b92915050565b6000602082840312156131775761317661252f565b5b60006131858482850161314c565b9150509291505056fea2646970667358221220818efd35e8f32eb9632bc57de81ebf22b3753a360cb865a0eb302974580be66a64736f6c634300080c0033"; + "0x614252610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063914137631461005b578063a850a9091461008b578063c2ad5b98146100bb578063ebbdac91146100eb575b600080fd5b610075600480360381019061007091906139bf565b61011b565b6040516100829190613a65565b60405180910390f35b6100a560048036038101906100a09190613b6b565b6101a8565b6040516100b29190613c72565b60405180910390f35b6100d560048036038101906100d09190613c8d565b6101fe565b6040516100e29190613a65565b60405180910390f35b61010560048036038101906101009190613cba565b6102f5565b6040516101129190613a65565b60405180910390f35b600061013167a7527153006500cb60c01b6104ee565b61014567931d5180b799c0d560c01b6104ee565b6101596743db604679649f8360c01b6104ee565b6000806101678686866104f1565b9150915061017f674a6e7be9d3391a0d60c01b6104ee565b6101936767599c6c7275a66a60c01b6104ee565b80801561019d5750815b925050509392505050565b6101b0613591565b6101c467d7916bf107d113d760c01b6104ee565b6101d867c09037a62d86179960c01b6104ee565b6101ec67d858806f6bc76c3460c01b6104ee565b6101f68383610da7565b905092915050565b6000610214672b64b980eb5a6ea560c01b6104ee565b6102286748154cc51ec58cff60c01b6104ee565b61023c6708a97827b7310cc460c01b6104ee565b60006001905061025667314e721e6fbb9f0a60c01b6104ee565b61026a673fb8179617deb25560c01b6104ee565b60005b81801561027a5750600481105b156102c35761029367049e6b94b9b3561a60c01b6104ee565b60008482600481106102a8576102a7613d0e565b5b602002015114915080806102bb90613d6c565b91505061026d565b506102d8670ea95737af3b0d9760c01b6104ee565b6102ec67609c82ac84fa22b760c01b6104ee565b80915050919050565b600061030b677774487e957d1e5c60c01b6104ee565b61031f67b3442cc927a2a41060c01b6104ee565b61033367dcf65e1addf60eaa60c01b6104ee565b6000600167ffffffffffffffff8111156103505761034f613621565b5b60405190808252806020026020018201604052801561038957816020015b6103766135b3565b81526020019060019003908161036e5790505b5090506103a06729a9d324a0d1407b60c01b6104ee565b6103b467f3f017e3b386bccd60c01b6104ee565b6000600167ffffffffffffffff8111156103d1576103d0613621565b5b60405190808252806020026020018201604052801561040a57816020015b6103f7613591565b8152602001906001900390816103ef5790505b50905061042167bd05db37b2ad740760c01b6104ee565b848260008151811061043657610435613d0e565b5b60200260200101819052506104556738c01c3000d7899d60c01b6104ee565b838160008151811061046a57610469613d0e565b5b6020026020010181905250610489677b67ae027b39fc4a60c01b6104ee565b61049d67a5604658f1d0a75b60c01b6104ee565b6000806104ab8885856104f1565b915091506104c367960fb8827c2ff42060c01b6104ee565b6104d767d2be36fd23aec6aa60c01b6104ee565b8080156104e15750815b9450505050509392505050565b50565b60008061050867dd68e15a9f2eb39360c01b61110b565b61051c672db2c8d11ef1a02960c01b61110b565b6105306765a7e0e159cb8c1a60c01b61110b565b60008451905061054a67ed9057d97598bce860c01b61110b565b61055e67cad1507fd672135560c01b61110b565b610572678f6d336ab310a85860c01b61110b565b600081116105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90613e37565b60405180910390fd5b6105c9672d3c98c4e6fb9aeb60c01b61110b565b6105dd674e26ceefc92ed50c60c01b61110b565b6105f167d8f2efd643b4d6ab60c01b61110b565b610605679896b0a386d3f99f60c01b61110b565b83518114610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063f90613ec9565b60405180910390fd5b61065c67f3bc9ad8719efc0260c01b61110b565b61067067f10ef8e2f5a90efc60c01b61110b565b610684671fbebd516605699d60c01b61110b565b600060066001836106959190613ee9565b61069f9190613f1d565b90506106b567cf9c01721cd327c160c01b61110b565b6106c96780962f202c274ed160c01b61110b565b60008167ffffffffffffffff8111156106e5576106e4613621565b5b6040519080825280602002602001820160405280156107135781602001602082028036833780820191505090505b50905061072a6714710377f82568fe60c01b61110b565b8760006002811061073e5761073d613d0e565b5b60200201518160008151811061075757610756613d0e565b5b60200260200101818152505061077767b1d9c0d552c0f3cd60c01b61110b565b8760016002811061078b5761078a613d0e565b5b6020020151816001815181106107a4576107a3613d0e565b5b6020026020010181815250506107c467779f6af9db8b38c860c01b61110b565b7f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2816002815181106107f9576107f8613d0e565b5b60200260200101818152505061081967a52ec47314ab4ed960c01b61110b565b7f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed8160038151811061084e5761084d613d0e565b5b60200260200101818152505061086e6738feb9252385556360c01b61110b565b7f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec816004815181106108a3576108a2613d0e565b5b6020026020010181815250506108c367e72debd56602a91e60c01b61110b565b7f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d816005815181106108f8576108f7613d0e565b5b60200260200101818152505061091867e216d329f3c1dfc060c01b61110b565b61092c67d79e9f35ee9b8fad60c01b61110b565b60005b83811015610c3d5761094b677c9724cde2da029460c01b61110b565b86818151811061095e5761095d613d0e565b5b602002602001015160006002811061097957610978613d0e565b5b6020020151826006808461098d9190613f1d565b6109979190613ee9565b815181106109a8576109a7613d0e565b5b6020026020010181815250506109c86749442457989fcbd260c01b61110b565b8681815181106109db576109da613d0e565b5b60200260200101516001600281106109f6576109f5613d0e565b5b6020020151826007600684610a0b9190613f1d565b610a159190613ee9565b81518110610a2657610a25613d0e565b5b602002602001018181525050610a4667a8379257657559b260c01b61110b565b878181518110610a5957610a58613d0e565b5b6020026020010151600160048110610a7457610a73613d0e565b5b6020020151826008600684610a899190613f1d565b610a939190613ee9565b81518110610aa457610aa3613d0e565b5b602002602001018181525050610ac4671936da2a4e74be2460c01b61110b565b878181518110610ad757610ad6613d0e565b5b6020026020010151600060048110610af257610af1613d0e565b5b6020020151826009600684610b079190613f1d565b610b119190613ee9565b81518110610b2257610b21613d0e565b5b602002602001018181525050610b4267ab4147d521c8084060c01b61110b565b878181518110610b5557610b54613d0e565b5b6020026020010151600360048110610b7057610b6f613d0e565b5b602002015182600a600684610b859190613f1d565b610b8f9190613ee9565b81518110610ba057610b9f613d0e565b5b602002602001018181525050610bc06719f9a477a3ce387760c01b61110b565b878181518110610bd357610bd2613d0e565b5b6020026020010151600260048110610bee57610bed613d0e565b5b602002015182600b600684610c039190613f1d565b610c0d9190613ee9565b81518110610c1e57610c1d613d0e565b5b6020026020010181815250508080610c3590613d6c565b91505061092f565b50610c52674af0302cd07136fa60c01b61110b565b610c6667cece592a8d14e20960c01b61110b565b610c6e6135d5565b610c82672259d903ccc0c86c60c01b61110b565b610c966754d79654e329cf5360c01b61110b565b60005a9050610caf6734ec5417ed705ce360c01b61110b565b6020826020860260208601600885fa9550610cd467ef2535194a9cd29d60c01b61110b565b610ce86797c0774da46fa01360c01b61110b565b85610d3a57610d01677fdea71a77c533c860c01b61110b565b610d1567b361e1e35f46f32060c01b61110b565b610d296701b4488fb028d3c960c01b61110b565b600080965096505050505050610d9f565b610d4e67d259a6b6af615bf060c01b61110b565b610d626731b0e6167c38ee2560c01b61110b565b610d76670f14612acd0d1d0d60c01b61110b565b600082600060018110610d8c57610d8b613d0e565b5b6020020151141560019650965050505050505b935093915050565b610daf613591565b610dc3674284dc6b7860f49e60c01b61110b565b610dd7677f9e763dafb6b75260c01b61110b565b610deb67b23d0256aa0a318560c01b61110b565b6000610df7848461110e565b9050610e0d67ee709a2dc1f40f8960c01b61110b565b610e2167551a1a21ae97758e60c01b61110b565b6000610e4482600060028110610e3a57610e39613d0e565b5b60200201516113b9565b9050610e5a673e651611e28b3f3560c01b61110b565b610e6e676b39aebdf868732560c01b61110b565b6000610e9183600160028110610e8757610e86613d0e565b5b60200201516113b9565b9050610ea76732ddd8dba2002f4f60c01b61110b565b610ebb67f47889d1f33453b360c01b61110b565b610ec36135b3565b610ed767c8cff1d4655e7dde60c01b61110b565b82600060028110610eeb57610eea613d0e565b5b602002015181600060048110610f0457610f03613d0e565b5b602002018181525050610f2167b610a1623611823f60c01b61110b565b82600160028110610f3557610f34613d0e565b5b602002015181600160048110610f4e57610f4d613d0e565b5b602002018181525050610f6b676cd957c11193863a60c01b61110b565b81600060028110610f7f57610f7e613d0e565b5b602002015181600260048110610f9857610f97613d0e565b5b602002018181525050610fb567a8313f34cae321dc60c01b61110b565b81600160028110610fc957610fc8613d0e565b5b602002015181600360048110610fe257610fe1613d0e565b5b602002018181525050610fff67651df4310ecd1cd260c01b61110b565b6110136729c275f6f2f0d2ec60c01b61110b565b6000611029670f5598ff1ab01da960c01b61110b565b60408460808460066107d05a03fa9050806000810361104457fe5b5061105967891a72516efa8a9c60c01b61110b565b61106d6720f068c8818b847360c01b61110b565b611081672225c4506951a85f60c01b61110b565b806110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613fab565b60405180910390fd5b6110d5675a5a723656d318b960c01b61110b565b6110e967f876fd99bf13ac1d60c01b61110b565b6110fd67e096a6ba7d7bec1260c01b61110b565b839550505050505092915050565b50565b611116613591565b61112a67a44b8e88a912e7c560c01b61110b565b61113e6766f28a0babcb9dbd60c01b61110b565b611152677e2b1c0e4e7eb47860c01b61110b565b600061115e84846120da565b9050611174673c3e5ec317dc672860c01b61110b565b61118867654a791b2c4d63af60c01b61110b565b600061119e67c6066ee2a471774b60c01b61110b565b6111b26707096ad9e304b0a960c01b61110b565b60006111c867715796da7a12501560c01b61110b565b6111dc67856bf33c1d90afb460c01b61110b565b60006111f2674437c9c874060d6360c01b61110b565b61120667891c5bf63b35e1ea60c01b61110b565b600061121c67fb7eee92933bfd5d60c01b61110b565b6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477801000000000000000000000000000000000000000000000000870908925060488601905077ffffffffffffffffffffffffffffffffffffffffffffffff815116935060608601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47780100000000000000000000000000000000000000000000000087090891505061138367aa230753ef8fb26060c01b61110b565b6113976773b2256d58d0631b60c01b61110b565b6040518060400160405280838152602001828152509550505050505092915050565b6113c1613591565b6113d567aaefbb996bea624f60c01b61110b565b6113e96737bbdc368c55fead60c01b61110b565b6113fd673f3ae430e3e5588760c01b61110b565b61141167aab6b2e7d605a93060c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a9061403d565b60405180910390fd5b61148767d4dfc74f95ee829860c01b61110b565b61149b67d51be9a70110655d60c01b61110b565b6114af67ef42b73e2a49401e60c01b61110b565b60008290506114c8678abd2139ea6d152360c01b61110b565b6114dc6748ee08bf11991c9a60c01b61110b565b60006114e7826125c6565b9150506114fe67d77afe6a81b51e9e60c01b61110b565b61151267ddf3f00204226aab60c01b61110b565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806115435761154261405d565b5b838409905061155c670340bb23394abfba60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061158b5761158a61405d565b5b6004820890506115a567249112c3d167eead60c01b61110b565b6115b9676b225b5cd4d344bd60c01b61110b565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806115ea576115e961405d565b5b77b3c4d79d41a91759a9e4c7e359b6b89eaec68e62effffffd8509905061161b67011aa61621a12d8860c01b61110b565b61162f6764cbd215267d65e960c01b61110b565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806116605761165f61405d565b5b838309905061167967a6b633a9b376ddb660c01b61110b565b6116828161264b565b9050611698673ad1f38b712782bd60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806116c7576116c661405d565b5b82830991506116e06772e2aafc574a61d660c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061170f5761170e61405d565b5b81830991506117286736c14167cbcc236460c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806117575761175661405d565b5b828609915061177067dfdc6573dbb9438a60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061179f5761179e61405d565b5b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476117cb919061408c565b7759e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe0894506117fb6759e46a0dc9913c1760c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478061182a5761182961405d565b5b858609915061184367ce86e3190058563260c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806118725761187161405d565b5b858309915061188b670fd1b229ee79b9cb60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806118ba576118b961405d565b5b6003830891506118d467d8b3f3fcf3eeecd760c01b61110b565b6118e867959160ebe214987560c01b61110b565b60006118fe67c52767af526ee8a460c01b61110b565b611907836125c6565b809250819450505061192367d01bf6dfd1eca60560c01b61110b565b61193767cdf9ccd73e55fa5160c01b61110b565b8015611a385761195167812fa882415dfefa60c01b61110b565b61196567f18c65a707f9c51860c01b61110b565b61197967a521e60773f85b9760c01b61110b565b846119d95761199267ea7593b91ccd20e660c01b61110b565b6119a6671b06e993e2d921d060c01b61110b565b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476119d2919061408c565b92506119ee565b6119ed671c9fc680fde25b1d60c01b61110b565b5b611a0267b8188475c4b4053060c01b61110b565b611a1667365b56a200df8c0a60c01b61110b565b60405180604001604052808781526020018481525096505050505050506120d5565b611a4c675de7a7cebd171ac660c01b61110b565b611a6067e0f1546fe029fea160c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611a8f57611a8e61405d565b5b600187087f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611abe919061408c565b9550611ad4678c4edab01c34954460c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611b0357611b0261405d565b5b8687099250611b1c670b4ca4d8948b862e60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611b4b57611b4a61405d565b5b8684099250611b6467d2e49b30494bf3fc60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611b9357611b9261405d565b5b600384089250611bad679d7324224907d65c60c01b61110b565b611bb6836125c6565b8092508194505050611bd267935357d4dc96c86260c01b61110b565b611be667b5a16c6267969f1360c01b61110b565b8015611ce757611c00673d34b51846fabec260c01b61110b565b611c1467b2d2d6c9e244532160c01b61110b565b611c2867fcbac62bc892b17360c01b61110b565b84611c8857611c4167ef04b6f135a799e560c01b61110b565b611c5567a88dc3f0c47c331a60c01b61110b565b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611c81919061408c565b9250611c9d565b611c9c67f0b00e56555a2a7c60c01b61110b565b5b611cb167abf7c13981ac41bf60c01b61110b565b611cc56725712a9d991cb91a60c01b61110b565b60405180604001604052808781526020018481525096505050505050506120d5565b611cfb678c6a4504b2c3939f60c01b61110b565b611d0f67c50863c9211fe67060c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611d3e57611d3d61405d565b5b8485099550611d576722d9e3cabb1ffe3360c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611d8657611d8561405d565b5b8687099550611d9f674466bb4ccc02f9b560c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611dce57611dcd61405d565b5b8287099550611de767924b27f1b25d88c560c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611e1657611e1561405d565b5b8287099550611e2f67762ad69f50b23b6160c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611e5e57611e5d61405d565b5b600187089550611e78678da9daebf388746960c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611ea757611ea661405d565b5b8687099250611ec06778ef7bfd4031985e60c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611eef57611eee61405d565b5b8684099250611f0867ca536b89ac11d47660c01b61110b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780611f3757611f3661405d565b5b600384089250611f5167cf883d77802af6f860c01b61110b565b611f5a836125c6565b8092508194505050611f766739d3979531e2da6960c01b61110b565b611f8a67ac8d4d33e043f29960c01b61110b565b611f9e67236c718c4fd4328c60c01b61110b565b80611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590614132565b60405180910390fd5b611ff267b88611029e0e71b360c01b61110b565b61200667501677a255b6eb1060c01b61110b565b61201a67c80f8b89ceae645860c01b61110b565b8461207a57612033679cb6ec283bb43d3660c01b61110b565b61204767c267ab99e56690a660c01b61110b565b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47612073919061408c565b925061208f565b61208e674fad165486e1406460c01b61110b565b5b6120a36770bf77439f16c32660c01b61110b565b6120b767176199807602bc4960c01b61110b565b60405180604001604052808781526020018481525096505050505050505b919050565b60606120f0675d2932b545390a8760c01b61110b565b612104670b1695cfc6554efb60c01b61110b565b61211867c37a18987872890060c01b61110b565b6000825190506121326765dd7fecc62e84ff60c01b61110b565b61214667e50652d185bbeaaf60c01b61110b565b6000600460408360206121599190613ee9565b6121639190613ee9565b61216d9190613ee9565b67ffffffffffffffff81111561218657612185613621565b5b6040519080825280601f01601f1916602001820160405280156121b85781602001600182028036833780820191505090505b5090506121cf67ed3f527d4120dc7160c01b61110b565b6121e367a765020850fba2c560c01b61110b565b6000606067ffffffffffffffff811115612200576121ff613621565b5b6040519080825280601f01601f1916602001820160405280156122325781602001600182028036833780820191505090505b509050612249679a9e005673b410fc60c01b61110b565b6060820160005b8481101561226e576020810187015181830152602081019050612250565b50838101905060008153600181019050606081536001810190506000815360018101905086815260208101905060208153506122b46781c01dd4d034325b60c01b61110b565b6122c867fb9ad85c166d526260c01b61110b565b60006002836040516122da91906141c3565b602060405180830381855afa1580156122f7573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061231a91906141ef565b9050612330673ef877dd08e3298b60c01b61110b565b6123446797b5bc777e1553bc60c01b61110b565b600061235a67ff05c7af907acdd860c01b61110b565b6042945061237267ae4aaf74d0f4198c60c01b61110b565b8484526123896739879064dbc4203060c01b61110b565b81602085015260016040850153876041850152602060416020018501536123ba67c95974dd58c1788960c01b61110b565b6002846040516123ca91906141c3565b602060405180830381855afa1580156123e7573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061240a91906141ef565b905061242067d786953bd82869f260c01b61110b565b80602084015261243a675d2726dc2fdcf2b360c01b61110b565b80821880602086015260026040860153886041860152602060416020018601535061246f6751a84937cb311ba360c01b61110b565b60028460405161247f91906141c3565b602060405180830381855afa15801561249c573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906124bf91906141ef565b90506124d567f18b9dffcc3c5f5760c01b61110b565b8060408401526124ef67a93922cbfebf3e9a60c01b61110b565b808218806020860152600360408601538860418601526020604160200186015350612524679f422cf879f487f560c01b61110b565b60028460405161253491906141c3565b602060405180830381855afa158015612551573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257491906141ef565b905061258a67112fcda320fb89bb60c01b61110b565b8060608401526125a467ba12de81836400e760c01b61110b565b6125b86790d1ff423fce368860c01b61110b565b829550505050505092915050565b6000806125dd67266659caffe148c060c01b61110b565b6125f1678968fda7986fba3d60c01b61110b565b6125fa83612699565b915061261067eb094f04d4ba252e60c01b61110b565b827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47806126405761263f61405d565b5b838409149050915091565b600061266167af41109ce93e16be60c01b61110b565b612675673c1038b679f965bc60c01b61110b565b61268967914a6f495b3ecff560c01b61110b565b61269282612e09565b9050919050565b60006126af67e13abc9b1f46df7160c01b61358b565b6126c3676440c183ad7c5f6060c01b61358b565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a0998505050505050505050919050565b6000612e1f672ea8a0581848f6ed60c01b61358e565b612e3367f32c8be630b1973c60c01b61358e565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087858a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a0998505050505050505050919050565b50565b50565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060200160405280600190602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61365982613610565b810181811067ffffffffffffffff8211171561367857613677613621565b5b80604052505050565b600061368b6135f7565b90506136978282613650565b919050565b600067ffffffffffffffff8211156136b7576136b6613621565b5b602082029050919050565b600080fd5b6000819050919050565b6136da816136c7565b81146136e557600080fd5b50565b6000813590506136f7816136d1565b92915050565b600061371061370b8461369c565b613681565b9050806020840283018581111561372a576137296136c2565b5b835b81811015613753578061373f88826136e8565b84526020840193505060208101905061372c565b5050509392505050565b600082601f8301126137725761377161360b565b5b600261377f8482856136fd565b91505092915050565b600067ffffffffffffffff8211156137a3576137a2613621565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137cf576137ce613621565b5b602082029050919050565b60006137ed6137e8846137b4565b613681565b90508060208402830185811115613807576138066136c2565b5b835b81811015613830578061381c88826136e8565b845260208401935050602081019050613809565b5050509392505050565b600082601f83011261384f5761384e61360b565b5b600461385c8482856137da565b91505092915050565b600061387861387384613788565b613681565b9050808382526020820190506080840283018581111561389b5761389a6136c2565b5b835b818110156138c457806138b0888261383a565b84526020840193505060808101905061389d565b5050509392505050565b600082601f8301126138e3576138e261360b565b5b81356138f3848260208601613865565b91505092915050565b600067ffffffffffffffff82111561391757613916613621565b5b602082029050602081019050919050565b600061393b613936846138fc565b613681565b9050808382526020820190506040840283018581111561395e5761395d6136c2565b5b835b818110156139875780613973888261375d565b845260208401935050604081019050613960565b5050509392505050565b600082601f8301126139a6576139a561360b565b5b81356139b6848260208601613928565b91505092915050565b6000806000608084860312156139d8576139d7613601565b5b60006139e68682870161375d565b935050604084013567ffffffffffffffff811115613a0757613a06613606565b5b613a13868287016138ce565b925050606084013567ffffffffffffffff811115613a3457613a33613606565b5b613a4086828701613991565b9150509250925092565b60008115159050919050565b613a5f81613a4a565b82525050565b6000602082019050613a7a6000830184613a56565b92915050565b6000819050919050565b613a9381613a80565b8114613a9e57600080fd5b50565b600081359050613ab081613a8a565b92915050565b600080fd5b600067ffffffffffffffff821115613ad657613ad5613621565b5b613adf82613610565b9050602081019050919050565b82818337600083830152505050565b6000613b0e613b0984613abb565b613681565b905082815260208101848484011115613b2a57613b29613ab6565b5b613b35848285613aec565b509392505050565b600082601f830112613b5257613b5161360b565b5b8135613b62848260208601613afb565b91505092915050565b60008060408385031215613b8257613b81613601565b5b6000613b9085828601613aa1565b925050602083013567ffffffffffffffff811115613bb157613bb0613606565b5b613bbd85828601613b3d565b9150509250929050565b600060029050919050565b600081905092915050565b6000819050919050565b613bf0816136c7565b82525050565b6000613c028383613be7565b60208301905092915050565b6000602082019050919050565b613c2481613bc7565b613c2e8184613bd2565b9250613c3982613bdd565b8060005b83811015613c6a578151613c518782613bf6565b9650613c5c83613c0e565b925050600181019050613c3d565b505050505050565b6000604082019050613c876000830184613c1b565b92915050565b600060808284031215613ca357613ca2613601565b5b6000613cb18482850161383a565b91505092915050565b60008060006101008486031215613cd457613cd3613601565b5b6000613ce28682870161375d565b9350506040613cf38682870161383a565b92505060c0613d048682870161375d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d77826136c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da957613da8613d3d565b5b600182019050919050565b600082825260208201905092915050565b7f424c533a206e756d626572206f66207075626c6963206b6579206973207a657260008201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e21602183613db4565b9150613e2c82613dc5565b604082019050919050565b60006020820190508181036000830152613e5081613e14565b9050919050565b7f424c533a206e756d626572206f66207075626c6963206b65797320616e64206d60008201527f65737361676573206d75737420626520657175616c0000000000000000000000602082015250565b6000613eb3603583613db4565b9150613ebe82613e57565b604082019050919050565b60006020820190508181036000830152613ee281613ea6565b9050919050565b6000613ef4826136c7565b9150613eff836136c7565b9250828201905080821115613f1757613f16613d3d565b5b92915050565b6000613f28826136c7565b9150613f33836136c7565b9250828202613f41816136c7565b91508282048414831517613f5857613f57613d3d565b5b5092915050565b7f424c533a20626e206164642063616c6c206661696c6564000000000000000000600082015250565b6000613f95601783613db4565b9150613fa082613f5f565b602082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f6d6170546f506f696e7446543a20696e76616c6964206669656c6420656c656d60008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b6000614027602383613db4565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614097826136c7565b91506140a2836136c7565b92508282039050818111156140ba576140b9613d3d565b5b92915050565b7f424c533a20626164206674206d617070696e6720696d706c656d656e7461746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b600061411c602283613db4565b9150614127826140c0565b604082019050919050565b6000602082019050818103600083015261414b8161410f565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561418657808201518184015260208101905061416b565b60008484015250505050565b600061419d82614152565b6141a7818561415d565b93506141b7818560208601614168565b80840191505092915050565b60006141cf8284614192565b915081905092915050565b6000815190506141e981613a8a565b92915050565b60006020828403121561420557614204613601565b5b6000614213848285016141da565b9150509291505056fea2646970667358221220987a01caa30312334ec41ab319e48ef09a165df32f14262e009718efd9ad095764736f6c63430008110033"; type BLSOpenConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts index 5af97de0..11fcfcfb 100644 --- a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts +++ b/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts @@ -65,7 +65,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50610b95806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634e79f8ca146100515780639382255714610081578063c04062261461009f578063ebfd94b2146100a9575b600080fd5b61006b600480360381019061006691906105fd565b6100c7565b6040516100789190610639565b60405180910390f35b6100896100ea565b6040516100969190610639565b60405180910390f35b6100a76100f0565b005b6100b16100fa565b6040516100be9190610639565b60405180910390f35b60008054600154836100d99190610683565b6100e391906106dd565b9050919050565b60005481565b6100f8610100565b565b60015481565b600061010a610142565b9050600061011661031d565b905081816101249190610733565b600181905550600154826101389190610733565b6000819055505050565b6000806040518060c0016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101fe6105a0565b6000806107d05a61020f9190610733565b90506107d05a11610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906107ea565b60405180910390fd5b60005a905060208460c087600886fa925060005a826102749190610733565b9050836102b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ad9061087c565b60405180910390fd5b6000856000600181106102cc576102cb61089c565b5b602002015114610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610963565b60405180910390fd5b80965050505050505090565b60008060405180610180016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815260200160018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81525090506104806105a0565b6000806107d05a6104919190610733565b90506107d05a116104d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ce906109f5565b60405180910390fd5b60005a905060208461018087600886fa925060005a826104f79190610733565b905083610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090610a87565b60405180910390fd5b60018560006001811061054f5761054e61089c565b5b602002015114610594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058b90610b3f565b60405180910390fd5b80965050505050505090565b6040518060200160405280600190602082028036833780820191505090505090565b600080fd5b6000819050919050565b6105da816105c7565b81146105e557600080fd5b50565b6000813590506105f7816105d1565b92915050565b600060208284031215610613576106126105c2565b5b6000610621848285016105e8565b91505092915050565b610633816105c7565b82525050565b600060208201905061064e600083018461062a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061068e826105c7565b9150610699836105c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156106d2576106d1610654565b5b828202905092915050565b60006106e8826105c7565b91506106f3836105c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561072857610727610654565b5b828201905092915050565b600061073e826105c7565b9150610749836105c7565b92508282101561075c5761075b610654565b5b828203905092915050565b600082825260208201905092915050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c2073696e676c652070616972000000602082015250565b60006107d4603d83610767565b91506107df82610778565b604082019050919050565b60006020820190508181036000830152610803816107c7565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610866603c83610767565b91506108718261080a565b604082019050919050565b6000602082019050818103600083015261089581610859565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c20726573756c74206d757374206260208201527f6520300000000000000000000000000000000000000000000000000000000000604082015250565b600061094d604383610767565b9150610958826108cb565b606082019050919050565b6000602082019050818103600083015261097c81610940565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c20636f75706c652070616972000000602082015250565b60006109df603d83610767565b91506109ea82610983565b604082019050919050565b60006020820190508181036000830152610a0e816109d2565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610a71603c83610767565b9150610a7c82610a15565b604082019050919050565b60006020820190508181036000830152610aa081610a64565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c20726573756c74206d757374206260208201527f6520310000000000000000000000000000000000000000000000000000000000604082015250565b6000610b29604383610767565b9150610b3482610aa7565b606082019050919050565b60006020820190508181036000830152610b5881610b1c565b905091905056fea26469706673582212204038c81eb10de716a1c32cf4e4142ff761b960825a5b92077501cfa84d6e7bf564736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b506110c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634e79f8ca146100515780639382255714610081578063c04062261461009f578063ebfd94b2146100a9575b600080fd5b61006b60048036038101906100669190610b69565b6100c7565b6040516100789190610ba5565b60405180910390f35b610089610127565b6040516100969190610ba5565b60405180910390f35b6100a761012d565b005b6100b1610173565b6040516100be9190610ba5565b60405180910390f35b60006100dd673e36e824674908b060c01b610179565b6100f167879503492faa0cdd60c01b610179565b61010567ca2b5e8f550a7c7060c01b610179565b600054600154836101169190610bef565b6101209190610c31565b9050919050565b60005481565b6101416785afb8315528cf2860c01b610179565b6101556722783ae6a18962c660c01b610179565b610169672150dafa0d76ff9d60c01b610179565b61017161017c565b565b60015481565b50565b61019067156d64a2d33bf10860c01b610179565b6101a467e43346f69aff518560c01b610179565b6101b8671a9a224b791432be60c01b610179565b60006101c261024a565b90506101d867724ad309b77e919e60c01b610179565b6101ec678fe6efe0f69f86d860c01b610179565b60006101f6610657565b905061020c673ce10e92e3e6c44e60c01b610179565b81816102189190610c65565b60018190555061023267ae856142b647bc2960c01b610179565b600154826102409190610c65565b6000819055505050565b6000610260670401e5584f687e9360c01b610179565b61027467b97d3562fef7ea9e60c01b610179565b610288675626fd30ec0859be60c01b610179565b60006040518060c0016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250905061034f67781cc3a109d7251a60c01b610179565b61036367118f638a711270bd60c01b610179565b61036b610b0c565b61037f67e34cbf65836554ca60c01b610179565b61039367a5d252d4ae9181b060c01b610179565b60006103a96713fdad1dc49c5fe060c01b610179565b6103bd6774f5579f4f87b48260c01b610179565b60006107d05a6103cd9190610c65565b90506103e367620044fee9bddc1860c01b610179565b6103f767e656b9067e37577260c01b610179565b61040b679eb26c8fe148aba860c01b610179565b6107d05a1161044f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044690610d1c565b60405180910390fd5b610463672fa80c2946134eba60c01b610179565b610477678b3657b4a30bc6eb60c01b610179565b61048b673f5dcd46c590eaa960c01b610179565b60005a90506104a4672fbd027c04b85d5d60c01b610179565b60208460c087600886fa92506104c46758bfdf8400f1e2c960c01b610179565b6104d867282b14ee31c69fa260c01b610179565b60005a826104e69190610c65565b90506104fc670fb880a4c3d43a9260c01b610179565b610510678f3f71a2b4e9bf5360c01b610179565b61052467d35b48d4dc91daec60c01b610179565b83610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b90610dae565b60405180910390fd5b61057867ad7e95b215c5226860c01b610179565b61058c6784c13eea5fdd706360c01b610179565b6105a067c6b3edd5367b710a60c01b610179565b6105b467e215d923fe2e771060c01b610179565b6000856000600181106105ca576105c9610dce565b5b60200201511461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060690610e95565b60405180910390fd5b61062367a24e118f5401a96260c01b610179565b610637679ff77f491e104bd260c01b610179565b61064b67f1797aa66f88b31560c01b610179565b80965050505050505090565b600061066d673b9619a6f487952f60c01b610179565b61068167e3f139a95b86496860c01b610179565b6106956782d077b5fef5e64a60c01b610179565b600060405180610180016040528060018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815260200160018152602001600281526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d815250905061080367abb1a9e3d05f32ad60c01b610179565b610817679d9187110346048d60c01b610179565b61081f610b0c565b61083367bebe4a3dd39cd31860c01b610179565b61084767dc9d44dbaf91c3bb60c01b610179565b600061085d679aacf267a6b4d7df60c01b610179565b6108716765dce0608942dfec60c01b610179565b60006107d05a6108819190610c65565b9050610897670a17512cced888fd60c01b610179565b6108ab6765fca14b0d620e0c60c01b610179565b6108bf67ff706e11596fac0060c01b610179565b6107d05a11610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90610f27565b60405180910390fd5b61091767d1afa2ceba91a46960c01b610179565b61092b670b2fd9e2748cb97360c01b610179565b61093f67f6ec3c70f896bfea60c01b610179565b60005a905061095867f8c3697cc104f05c60c01b610179565b60208461018087600886fa925061097967544b3f432d85665260c01b610179565b61098d6738dac2d7e121972860c01b610179565b60005a8261099b9190610c65565b90506109b167ef90425a0bf620c160c01b610179565b6109c5678d26620d3828717060c01b610179565b6109d9670f4391531505075860c01b610179565b83610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090610fb9565b60405180910390fd5b610a2d678f48fec85e56900a60c01b610179565b610a416739421a1f0189d8d060c01b610179565b610a55674c0166e83ffe560f60c01b610179565b610a696783b9b46e7674a41860c01b610179565b600185600060018110610a7f57610a7e610dce565b5b602002015114610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90611071565b60405180910390fd5b610ad8676dbe03df53b5d0f660c01b610179565b610aec670c8971a5572fe6c560c01b610179565b610b006719e87ba254bdcd5460c01b610179565b80965050505050505090565b6040518060200160405280600190602082028036833780820191505090505090565b600080fd5b6000819050919050565b610b4681610b33565b8114610b5157600080fd5b50565b600081359050610b6381610b3d565b92915050565b600060208284031215610b7f57610b7e610b2e565b5b6000610b8d84828501610b54565b91505092915050565b610b9f81610b33565b82525050565b6000602082019050610bba6000830184610b96565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610bfa82610b33565b9150610c0583610b33565b9250828202610c1381610b33565b91508282048414831517610c2a57610c29610bc0565b5b5092915050565b6000610c3c82610b33565b9150610c4783610b33565b9250828201905080821115610c5f57610c5e610bc0565b5b92915050565b6000610c7082610b33565b9150610c7b83610b33565b9250828203905081811115610c9357610c92610bc0565b5b92915050565b600082825260208201905092915050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c2073696e676c652070616972000000602082015250565b6000610d06603d83610c99565b9150610d1182610caa565b604082019050919050565b60006020820190508181036000830152610d3581610cf9565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610d98603c83610c99565b9150610da382610d3c565b604082019050919050565b60006020820190508181036000830152610dc781610d8b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a2073696e676c6520706169722063616c6c20726573756c74206d757374206260208201527f6520300000000000000000000000000000000000000000000000000000000000604082015250565b6000610e7f604383610c99565b9150610e8a82610dfd565b606082019050919050565b60006020820190508181036000830152610eae81610e72565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a206e6f7420656e6f756768206761732c20636f75706c652070616972000000602082015250565b6000610f11603d83610c99565b9150610f1c82610eb5565b604082019050919050565b60006020820190508181036000830152610f4081610f04565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c206973206661696c656400000000602082015250565b6000610fa3603c83610c99565b9150610fae82610f47565b604082019050919050565b60006020820190508181036000830152610fd281610f96565b9050919050565b7f424e50616972696e67507265636f6d70696c65436f7374457374696d61746f7260008201527f3a20636f75706c6520706169722063616c6c20726573756c74206d757374206260208201527f6520310000000000000000000000000000000000000000000000000000000000604082015250565b600061105b604383610c99565b915061106682610fd9565b606082019050919050565b6000602082019050818103600083015261108a8161104e565b905091905056fea26469706673582212209759cdf5b3898c517aa53255f9ff72a2ed6100e2423bb3fb257da66dbf6d632464736f6c63430008110033"; type BNPairingPrecompileCostEstimatorConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts b/src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts new file mode 100644 index 00000000..b7922be7 --- /dev/null +++ b/src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts @@ -0,0 +1,236 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + TokenCallbackHandler, + TokenCallbackHandlerInterface, +} from "../../../../src/aa-4337/callback/TokenCallbackHandler"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155BatchReceived", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "pure", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061097f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100565760003560e01c806223de291461005b57806301ffc9a714610077578063150b7a02146100a7578063bc197c81146100d7578063f23a6e6114610107575b600080fd5b61007560048036038101906100709190610541565b610137565b005b610091600480360381019061008c9190610668565b610155565b60405161009e91906106b0565b60405180910390f35b6100c160048036038101906100bc91906106cb565b61033a565b6040516100ce9190610762565b60405180910390f35b6100f160048036038101906100ec91906107d3565b61038a565b6040516100fe9190610762565b60405180910390f35b610121600480360381019061011c91906108af565b6103de565b60405161012e9190610762565b60405180910390f35b61014b671278753381487ed660c01b610430565b5050505050505050565b600061016b67f20d647ea02d480060c01b610430565b61017f67ffb589296d687db060c01b610430565b6101936727ecf9b318901df560c01b610430565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015610210575061020f675d4be9b73183ad3f60c01b610433565b5b806102b057507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156102935750610292674cb5733a4ebd736b60c01b610433565b5b80156102af57506102ae67927753031b1e765d60c01b610433565b5b5b8061033357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015610332575061033166bc16169e90631c60c01b610433565b5b5b9050919050565b600061034f6642558288c0c26a60c01b610430565b610363670cd59c881166cff460c01b610430565b61037767d8d160ce8c3ef4cc60c01b610430565b63150b7a0260e01b905095945050505050565b60006103a067f6036d4dbbf1553b60c01b610430565b6103b467e574cfd0134a53a360c01b610430565b6103c867481cad8a93626dbc60c01b610430565b63bc197c8160e01b905098975050505050505050565b60006103f467d55e6083e458695760c01b610430565b61040867229756682a8526f660c01b610430565b61041c672d0f5a7f66d6c2a060c01b610430565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061047382610448565b9050919050565b61048381610468565b811461048e57600080fd5b50565b6000813590506104a08161047a565b92915050565b6000819050919050565b6104b9816104a6565b81146104c457600080fd5b50565b6000813590506104d6816104b0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610501576105006104dc565b5b8235905067ffffffffffffffff81111561051e5761051d6104e1565b5b60208301915083600182028301111561053a576105396104e6565b5b9250929050565b60008060008060008060008060c0898b0312156105615761056061043e565b5b600061056f8b828c01610491565b98505060206105808b828c01610491565b97505060406105918b828c01610491565b96505060606105a28b828c016104c7565b955050608089013567ffffffffffffffff8111156105c3576105c2610443565b5b6105cf8b828c016104eb565b945094505060a089013567ffffffffffffffff8111156105f2576105f1610443565b5b6105fe8b828c016104eb565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61064581610610565b811461065057600080fd5b50565b6000813590506106628161063c565b92915050565b60006020828403121561067e5761067d61043e565b5b600061068c84828501610653565b91505092915050565b60008115159050919050565b6106aa81610695565b82525050565b60006020820190506106c560008301846106a1565b92915050565b6000806000806000608086880312156106e7576106e661043e565b5b60006106f588828901610491565b955050602061070688828901610491565b9450506040610717888289016104c7565b935050606086013567ffffffffffffffff81111561073857610737610443565b5b610744888289016104eb565b92509250509295509295909350565b61075c81610610565b82525050565b60006020820190506107776000830184610753565b92915050565b60008083601f840112610793576107926104dc565b5b8235905067ffffffffffffffff8111156107b0576107af6104e1565b5b6020830191508360208202830111156107cc576107cb6104e6565b5b9250929050565b60008060008060008060008060a0898b0312156107f3576107f261043e565b5b60006108018b828c01610491565b98505060206108128b828c01610491565b975050604089013567ffffffffffffffff81111561083357610832610443565b5b61083f8b828c0161077d565b9650965050606089013567ffffffffffffffff81111561086257610861610443565b5b61086e8b828c0161077d565b9450945050608089013567ffffffffffffffff81111561089157610890610443565b5b61089d8b828c016104eb565b92509250509295985092959890939650565b60008060008060008060a087890312156108cc576108cb61043e565b5b60006108da89828a01610491565b96505060206108eb89828a01610491565b95505060406108fc89828a016104c7565b945050606061090d89828a016104c7565b935050608087013567ffffffffffffffff81111561092e5761092d610443565b5b61093a89828a016104eb565b9250925050929550929550929556fea26469706673582212206c9db258b4adc31c2c2bc35b4082cedd9e5a544423a7d2c410132393335c672f64736f6c63430008110033"; + +type TokenCallbackHandlerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TokenCallbackHandlerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TokenCallbackHandler__factory extends ContractFactory { + constructor(...args: TokenCallbackHandlerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): TokenCallbackHandler { + return super.attach(address) as TokenCallbackHandler; + } + override connect(signer: Signer): TokenCallbackHandler__factory { + return super.connect(signer) as TokenCallbackHandler__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TokenCallbackHandlerInterface { + return new utils.Interface(_abi) as TokenCallbackHandlerInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TokenCallbackHandler { + return new Contract( + address, + _abi, + signerOrProvider + ) as TokenCallbackHandler; + } +} diff --git a/src/contracts/factories/src/libs/index.ts b/src/contracts/factories/src/aa-4337/callback/index.ts similarity index 52% rename from src/contracts/factories/src/libs/index.ts rename to src/contracts/factories/src/aa-4337/callback/index.ts index ff4f2824..75032bf1 100644 --- a/src/contracts/factories/src/libs/index.ts +++ b/src/contracts/factories/src/aa-4337/callback/index.ts @@ -1,4 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { ValidationConstants__factory } from "./ValidationConstants__factory"; +export { TokenCallbackHandler__factory } from "./TokenCallbackHandler__factory"; diff --git a/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts b/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts index f4fd5a46..611ad943 100644 --- a/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts +++ b/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts @@ -1253,7 +1253,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a0604052604051620000129062000076565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200006f57600080fd5b5062000084565b6103628062006e3c83390190565b608051616d95620000a7600039600081816115c7015261379a0152616d956000f3fe6080604052600436106101025760003560e01c8063957122ab11610095578063bb9fe6bf11610064578063bb9fe6bf1461033b578063c23a5cea14610352578063d6383f941461037b578063ee219423146103a4578063fc7e286d146103cd57610112565b8063957122ab146102905780639b249f69146102b9578063a6193531146102e2578063b760faf91461031f57610112565b80634b1d7cf5116100d15780634b1d7cf5146101c25780635287ce12146101eb57806370a08231146102285780638f41ec5a1461026557610112565b80630396cb60146101175780631d732756146101335780631fad948c14610170578063205c28781461019957610112565b36610112576101103361040e565b005b600080fd5b610131600480360381019061012c9190613bc7565b6104ca565b005b34801561013f57600080fd5b5061015a60048036038101906101559190613fc4565b610881565b6040516101679190614065565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190614114565b610a55565b005b3480156101a557600080fd5b506101c060048036038101906101bb9190614174565b610bac565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061420a565b610dd1565b005b3480156101f757600080fd5b50610212600480360381019061020d919061426a565b6112cb565b60405161021f9190614373565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a919061426a565b611418565b60405161025c9190614065565b60405180910390f35b34801561027157600080fd5b5061027a61148d565b6040516102879190614065565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b2919061438e565b611492565b005b3480156102c557600080fd5b506102e060048036038101906102db9190614423565b6115c5565b005b3480156102ee57600080fd5b5061030960048036038101906103049190614495565b61169f565b60405161031691906144ed565b60405180910390f35b6103396004803603810190610334919061426a565b61040e565b005b34801561034757600080fd5b506103506116db565b005b34801561035e57600080fd5b5061037960048036038101906103749190614508565b61188c565b005b34801561038757600080fd5b506103a2600480360381019061039d9190614535565b611b8c565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190614495565b611cdc565b005b3480156103d957600080fd5b506103f460048036038101906103ef919061426a565b611f69565b604051610405959493929190614601565b60405180910390f35b6104188134612002565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260000160009054906101000a90046dffffffffffffffffffffffffffff166040516104be919061468f565b60405180910390a25050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008263ffffffff1611610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90614707565b60405180910390fd5b8060010160009054906101000a900463ffffffff1663ffffffff168263ffffffff1610156105b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105af90614773565b60405180910390fd5b60003482600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166105f491906147c2565b905060008111610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090614864565b60405180910390fd5b6dffffffffffffffffffffffffffff801681111561068c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610683906148d0565b60405180910390fd5b6040518060a001604052808360000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001600115158152602001826dffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600065ffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550602082015181600001600e6101000a81548160ff021916908315150217905550604082015181600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060608201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160046101000a81548165ffffffffffff021916908365ffffffffffff1602179055509050503373ffffffffffffffffffffffffffffffffffffffff167fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c018285604051610874929190614921565b60405180910390a2505050565b6000805a90503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614996565b60405180910390fd5b60008560000151905060008160400151905061138882606001518201015a1015610943577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b600080895111156109e7576000610961846000015160008c86612112565b9050806109e557600061097561080061212b565b90506000815111156109df57846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a2018760200151846040516109d6929190614a3e565b60405180910390a35b60019250505b505b600088608001515a8603019050610a466000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508561215b565b95505050505050949350505050565b600083839050905060008167ffffffffffffffff811115610a7957610a78613c0f565b5b604051908082528060200260200182016040528015610ab257816020015b610a9f613a0e565b815260200190600190039081610a975790505b50905060005b82811015610b32576000828281518110610ad557610ad4614a6e565b5b60200260200101519050600080610b11848a8a87818110610af957610af8614a6e565b5b9050602002810190610b0b9190614aac565b856124d4565b91509150610b22848383600061267e565b5050508080600101915050610ab8565b506000805b83811015610b9957610b8881888884818110610b5657610b55614a6e565b5b9050602002810190610b689190614aac565b858481518110610b7b57610b7a614a6e565b5b6020026020010151612811565b820191508080600101915050610b37565b50610ba4848261296b565b505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16821115610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690614b21565b60405180910390fd5b818160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16610c999190614b41565b8160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8484604051610d17929190614bca565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1683604051610d4590614c24565b60006040518083038185875af1925050503d8060008114610d82576040519150601f19603f3d011682016040523d82523d6000602084013e610d87565b606091505b5050905080610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290614c85565b60405180910390fd5b50505050565b60008383905090506000805b82811015610fbf5736868683818110610df957610df8614a6e565b5b9050602002810190610e0b9190614ca5565b9050366000828060000190610e209190614ccd565b915091506000836020016020810190610e399190614d6e565b9050600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290614de7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f97578073ffffffffffffffffffffffffffffffffffffffff1663e3563a4f8484878060400190610f0d9190614e07565b6040518563ffffffff1660e01b8152600401610f2c94939291906151d0565b60006040518083038186803b158015610f4457600080fd5b505afa925050508015610f55575060015b610f9657806040517f86a9f750000000000000000000000000000000000000000000000000000000008152600401610f8d919061521a565b60405180910390fd5b5b8282905086610fa691906147c2565b9550505050508080610fb790615235565b915050610ddd565b5060008167ffffffffffffffff811115610fdc57610fdb613c0f565b5b60405190808252806020026020018201604052801561101557816020015b611002613a0e565b815260200190600190039081610ffa5790505b5090506000805b8481101561112b573688888381811061103857611037614a6e565b5b905060200281019061104a9190614ca5565b905036600082806000019061105f9190614ccd565b9150915060008360200160208101906110789190614d6e565b9050600083839050905060005b818110156111125760008989815181106110a2576110a1614a6e565b5b602002602001015190506000806110de8b8989878181106110c6576110c5614a6e565b5b90506020028101906110d89190614aac565b856124d4565b915091506110ee8483838961267e565b8a806110f990615235565b9b5050505050808061110a90615235565b915050611085565b505050505050808061112390615235565b91505061101c565b50600080915060005b8581101561127257368989838181106111505761114f614a6e565b5b90506020028101906111629190614ca5565b90508060200160208101906111779190614d6e565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a23660008280600001906111cc9190614ccd565b91509150600082829050905060005b8181101561125a5761122c888585848181106111fa576111f9614a6e565b5b905060200281019061120c9190614aac565b8b8b8151811061121f5761121e614a6e565b5b6020026020010151612811565b8761123791906147c2565b9650878061124490615235565b985050808061125290615235565b9150506111db565b5050505050808061126a90615235565b915050611134565b50600073ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a26112c1868261296b565b5050505050505050565b6112d3613a46565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050919050565b600181565b6000858590501480156114bc575060008373ffffffffffffffffffffffffffffffffffffffff163b145b156114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f3906152ca565b60405180910390fd5b6014828290501061158a576000828260009060149261151d939291906152f4565b906115289190615373565b60601c905060008173ffffffffffffffffffffffffffffffffffffffff163b1415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f9061541e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90615461565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3683836040518363ffffffff1660e01b8152600401611620929190615481565b6020604051808303816000875af115801561163f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166391906154ba565b6040517f6ca7b806000000000000000000000000000000000000000000000000000000008152600401611696919061521a565b60405180910390fd5b60006116aa82612a8c565b30466040516020016116be939291906154e7565b604051602081830303815290604052805190602001209050919050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900463ffffffff1663ffffffff16141561177b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117729061556a565b60405180910390fd5b80600001600e9054906101000a900460ff166117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c3906155d6565b60405180910390fd5b60008160010160009054906101000a900463ffffffff1663ffffffff16426117f491906155f6565b9050808260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550600082600001600e6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a826040516118809190615663565b60405180910390a25050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905060008111611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b906156ca565b60405180910390fd5b60008260010160049054906101000a900465ffffffffffff1665ffffffffffff16116119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615736565b60405180910390fd5b428260010160049054906101000a900465ffffffffffff1665ffffffffffff161115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd906157a2565b60405180910390fd5b60008260010160006101000a81548163ffffffff021916908363ffffffff16021790555060008260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550600082600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38483604051611ad2929190614bca565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682604051611b0090614c24565b60006040518083038185875af1925050503d8060008114611b3d576040519150601f19603f3d011682016040523d82523d6000602084013e611b42565b606091505b5050905080611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d9061580e565b60405180910390fd5b50505050565b611b94613a0e565b611b9d85612aa5565b600080611bac600088856124d4565b915091506000611bbc8383612bce565b9050611bc6612ce2565b6000611bd460008a87612811565b9050611bde612ce2565b60006060600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614611c89578973ffffffffffffffffffffffffffffffffffffffff168989604051611c3d929190615853565b6000604051808303816000865af19150503d8060008114611c7a576040519150601f19603f3d011682016040523d82523d6000602084013e611c7f565b606091505b5080925081935050505b8660800151838560200151866040015185856040517f8b7ac980000000000000000000000000000000000000000000000000000000008152600401611cd39695949392919061586c565b60405180910390fd5b611ce4613a0e565b611ced82612aa5565b600080611cfc600085856124d4565b915091506000611d13846000015160a00151612ce8565b90506000611d28856000015160000151612ce8565b9050611d32613aa5565b366000888060400190611d459190614e07565b9150915060006014838390501015611d5e576000611d81565b8282600090601492611d72939291906152f4565b90611d7d9190615373565b60601c5b9050611d8c81612ce8565b93505050506000611d9d8686612bce565b90506000816000015190506000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905060006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff168152602001611e368c60600151612d94565b8152509050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ea55750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f2657600060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001611edc86612ce8565b81525090508187878a846040517ffaecb4e4000000000000000000000000000000000000000000000000000000008152600401611f1d959493929190615a23565b60405180910390fd5b808686896040517fe0cff05f000000000000000000000000000000000000000000000000000000008152600401611f609493929190615a7e565b60405180910390fd5b60006020528060005260406000206000915090508060000160009054906101000a90046dffffffffffffffffffffffffffff169080600001600e9054906101000a900460ff169080600001600f9054906101000a90046dffffffffffffffffffffffffffff16908060010160009054906101000a900463ffffffff16908060010160049054906101000a900465ffffffffffff16905085565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000828260000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661208091906147c2565b90506dffffffffffffffffffffffffffff80168111156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90615b16565b60405180910390fd5b808260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505050565b6000806000845160208601878987f19050949350505050565b60603d8281111561213a578290505b604051602082018101604052818152816000602083013e8092505050919050565b6000805a905060008086600001519050600061217682612d9e565b905060008260a001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c257826000015193506123b3565b8093506000885111156123b25781870295506002808111156121e7576121e6615b36565b5b8a60028111156121fa576121f9615b36565b5b14612279578073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b815260040161224193929190615bad565b600060405180830381600088803b15801561225b57600080fd5b5087f115801561226f573d6000803e3d6000fd5b50505050506123b1565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b81526004016122bb93929190615bad565b600060405180830381600088803b1580156122d557600080fd5b5087f1935050505080156122e7575060015b6123b0576122f3615bf8565b806308c379a014156123715750612308615c1a565b806123135750612373565b8b816040516020016123259190615d1d565b6040516020818303038152906040526040517f220266b6000000000000000000000000000000000000000000000000000000008152600401612368929190615d7c565b60405180910390fd5b505b8a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016123a79190615df8565b60405180910390fd5b5b5b5b5a85038701965081870295508589604001511015612408578a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016123ff9190615e72565b60405180910390fd5b6000868a6040015103905061241d8582612002565b600080600281111561243257612431615b36565b5b8c600281111561244557612444615b36565b5b1490508460a0015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f6040516124bc9493929190615ea0565b60405180910390a45050505050505095945050505050565b60008060005a90506000846000015190506124ef8682612dd9565b6124f88661169f565b85602001818152505060008661010001358760e001358360400151846060015185608001511717171790506effffffffffffffffffffffffffffff8016811115612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e90615f31565b60405180910390fd5b60008061258384612f81565b90506125918a8a8a84612ff3565b80985081935050506125a1612ce2565b6060600073ffffffffffffffffffffffffffffffffffffffff168560a0015173ffffffffffffffffffffffffffffffffffffffff16146125f1576125e88b8b8b858761331f565b80985081925050505b60005a87039050808b60a001351015612641578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016126389190615f9d565b60405180910390fd5b828a6040018181525050612654826135de565b8a60600181815250508a60c001355a8803018a608001818152505050505050505050935093915050565b60008061268a856135e8565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fe57856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016126f59190616017565b60405180910390fd5b801561274157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127389190616091565b60405180910390fd5b600061274c856135e8565b8093508192505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146127c557866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127bc919061610b565b60405180910390fd5b811561280857866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016127ff91906161ab565b60405180910390fd5b50505050505050565b6000805a905060006128268460600151612d94565b90503073ffffffffffffffffffffffffffffffffffffffff16631d7327568680606001906128549190614e07565b87856040518563ffffffff1660e01b815260040161287594939291906162f7565b6020604051808303816000875af19250505080156128b157506040513d601f19601f820116820180604052508101906128ae9190616355565b60015b61295d57600060206000803e60005190507fdeaddead0000000000000000000000000000000000000000000000000000000081141561292757866040517f220266b600000000000000000000000000000000000000000000000000000000815260040161291e91906163ce565b60405180910390fd5b600085608001515a8561293a9190614b41565b61294491906147c2565b905061295488600288868561215b565b94505050612962565b809350505b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d290616448565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612a0190614c24565b60006040518083038185875af1925050503d8060008114612a3e576040519150601f19603f3d011682016040523d82523d6000602084013e612a43565b606091505b5050905080612a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7e906164b4565b60405180910390fd5b505050565b6000612a9782613642565b805190602001209050919050565b3073ffffffffffffffffffffffffffffffffffffffff1663957122ab828060400190612ad19190614e07565b846000016020810190612ae4919061426a565b85806101200190612af59190614e07565b6040518663ffffffff1660e01b8152600401612b159594939291906164d4565b60006040518083038186803b158015612b2d57600080fd5b505afa925050508015612b3e575060015b612bca57612b4a615bf8565b806308c379a01415612bb95750612b5f615c1a565b80612b6a5750612bbb565b6000815114612bb3576000816040517f220266b6000000000000000000000000000000000000000000000000000000008152600401612baa929190616558565b60405180910390fd5b50612bc5565b505b3d6000803e3d6000fd5b612bcb565b5b50565b612bd6613abf565b6000612be184613684565b90506000612bee84613684565b9050600082600001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3657816000015190505b6000836020015190506000846040015190506000846020015190506000856040015190508165ffffffffffff168465ffffffffffff161015612c76578193505b8065ffffffffffff168365ffffffffffff161115612c92578092505b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b43600052565b612cf0613aa5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168260000181815250508060010160009054906101000a900463ffffffff1663ffffffff1682602001818152505050919050565b6060819050919050565b6000808260c00151905060008360e00151905080821415612dc3578192505050612dd4565b612dcf82488301613709565b925050505b919050565b816000016020810190612dec919061426a565b816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816020013581602001818152505081608001358160400181815250508160a001358160600181815250508160c001358160800181815250508160e001358160c00181815250508161010001358160e001818152505036600083806101200190612e8c9190614e07565b915091506000828290501115612f41576014828290501015612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda906165d4565b60405180910390fd5b8181600090601492612ef7939291906152f4565b90612f029190615373565b60601c8360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f7b565b60008360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168360a0015173ffffffffffffffffffffffffffffffffffffffff161415612fc4576001612fc7565b60035b60ff16905060008360800151828560600151028560400151010190508360c00151810292505050919050565b60008060005a905060008560000151905060008160000151905061302789888a80604001906130229190614e07565b613722565b60008260a001519050613038612ce2565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561309157600061307984611418565b905088811161308a5780890361308d565b60005b9150505b8273ffffffffffffffffffffffffffffffffffffffff16633a871cdd85606001518c8c60200151856040518563ffffffff1660e01b81526004016130d793929190616758565b60206040518083038160008887f19350505050801561311457506040513d601f19601f820116820180604052508101906131119190616355565b60015b6131dd57613120615bf8565b806308c379a0141561319e5750613135615c1a565b8061314057506131a0565b8b8160405160200161315291906167bc565b6040516020818303038152906040526040517f220266b6000000000000000000000000000000000000000000000000000000008152600401613195929190615d7c565b60405180910390fd5b505b8a6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016131d4919061682e565b60405180910390fd5b80965050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561330c5760008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050808a11156132d0578c6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016132c791906168a8565b60405180910390fd5b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505b5a85039650505050505094509492505050565b606060008085600001519050600081606001519050848111613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90616922565b60405180910390fd5b6000858203905060008360a00151905060008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905089811015613440578c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401613437919061698e565b60405180910390fd5b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1663f465c77e858e8e602001518e6040518563ffffffff1660e01b81526004016134bb93929190616758565b60006040518083038160008887f1935050505080156134fd57506040513d6000823e3d601f19601f820116820180604052508101906134fa9190616a2c565b60015b6135c657613509615bf8565b806308c379a01415613587575061351e615c1a565b806135295750613589565b8d8160405160200161353b9190616aae565b6040516020818303038152906040526040517f220266b600000000000000000000000000000000000000000000000000000000815260040161357e929190615d7c565b60405180910390fd5b505b8c6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016135bd9190616b20565b60405180910390fd5b81995080985050505050505050509550959350505050565b6000819050919050565b6000806000831415613600576000809150915061363d565b600061360b84613684565b9050806040015165ffffffffffff164211806136325750806020015165ffffffffffff1642105b915080600001519250505b915091565b6060366000838061014001906136589190614e07565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b61368c613abf565b6000829050600060a084901c905060008165ffffffffffff1614156136b55765ffffffffffff90505b600060d085901c905060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b6000818310613718578161371a565b825b905092915050565b60008282905014613a08576000836000015160000151905060008173ffffffffffffffffffffffffffffffffffffffff163b1461379657846040517f220266b600000000000000000000000000000000000000000000000000000000815260040161378d9190616b9a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516060015186866040518463ffffffff1660e01b81526004016137fc929190615481565b60206040518083038160008887f115801561381b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061384091906154ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138b457856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016138ab9190616c14565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461392457856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161391b9190616c8e565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff163b141561398157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016139789190616d08565b60405180910390fd5b60008484600090601492613997939291906152f4565b906139a29190615373565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a001516040516139fc929190616d36565b60405180910390a35050505b50505050565b6040518060a00160405280613a21613b06565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160001515815260200160006dffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600065ffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b613ba481613b8b565b8114613baf57600080fd5b50565b600081359050613bc181613b9b565b92915050565b600060208284031215613bdd57613bdc613b81565b5b6000613beb84828501613bb2565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c4782613bfe565b810181811067ffffffffffffffff82111715613c6657613c65613c0f565b5b80604052505050565b6000613c79613b77565b9050613c858282613c3e565b919050565b600067ffffffffffffffff821115613ca557613ca4613c0f565b5b613cae82613bfe565b9050602081019050919050565b82818337600083830152505050565b6000613cdd613cd884613c8a565b613c6f565b905082815260208101848484011115613cf957613cf8613bf9565b5b613d04848285613cbb565b509392505050565b600082601f830112613d2157613d20613bf4565b5b8135613d31848260208601613cca565b91505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d6a82613d3f565b9050919050565b613d7a81613d5f565b8114613d8557600080fd5b50565b600081359050613d9781613d71565b92915050565b6000819050919050565b613db081613d9d565b8114613dbb57600080fd5b50565b600081359050613dcd81613da7565b92915050565b60006101008284031215613dea57613de9613d3a565b5b613df5610100613c6f565b90506000613e0584828501613d88565b6000830152506020613e1984828501613dbe565b6020830152506040613e2d84828501613dbe565b6040830152506060613e4184828501613dbe565b6060830152506080613e5584828501613dbe565b60808301525060a0613e6984828501613d88565b60a08301525060c0613e7d84828501613dbe565b60c08301525060e0613e9184828501613dbe565b60e08301525092915050565b6000819050919050565b613eb081613e9d565b8114613ebb57600080fd5b50565b600081359050613ecd81613ea7565b92915050565b60006101808284031215613eea57613ee9613d3a565b5b613ef460a0613c6f565b90506000613f0484828501613dd3565b600083015250610100613f1984828501613ebe565b602083015250610120613f2e84828501613dbe565b604083015250610140613f4384828501613dbe565b606083015250610160613f5884828501613dbe565b60808301525092915050565b600080fd5b600080fd5b60008083601f840112613f8457613f83613bf4565b5b8235905067ffffffffffffffff811115613fa157613fa0613f64565b5b602083019150836001820283011115613fbd57613fbc613f69565b5b9250929050565b6000806000806101c08587031215613fdf57613fde613b81565b5b600085013567ffffffffffffffff811115613ffd57613ffc613b86565b5b61400987828801613d0c565b945050602061401a87828801613ed3565b9350506101a085013567ffffffffffffffff81111561403c5761403b613b86565b5b61404887828801613f6e565b925092505092959194509250565b61405f81613d9d565b82525050565b600060208201905061407a6000830184614056565b92915050565b60008083601f84011261409657614095613bf4565b5b8235905067ffffffffffffffff8111156140b3576140b2613f64565b5b6020830191508360208202830111156140cf576140ce613f69565b5b9250929050565b60006140e182613d3f565b9050919050565b6140f1816140d6565b81146140fc57600080fd5b50565b60008135905061410e816140e8565b92915050565b60008060006040848603121561412d5761412c613b81565b5b600084013567ffffffffffffffff81111561414b5761414a613b86565b5b61415786828701614080565b9350935050602061416a868287016140ff565b9150509250925092565b6000806040838503121561418b5761418a613b81565b5b6000614199858286016140ff565b92505060206141aa85828601613dbe565b9150509250929050565b60008083601f8401126141ca576141c9613bf4565b5b8235905067ffffffffffffffff8111156141e7576141e6613f64565b5b60208301915083602082028301111561420357614202613f69565b5b9250929050565b60008060006040848603121561422357614222613b81565b5b600084013567ffffffffffffffff81111561424157614240613b86565b5b61424d868287016141b4565b93509350506020614260868287016140ff565b9150509250925092565b6000602082840312156142805761427f613b81565b5b600061428e84828501613d88565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b6142ba81614297565b82525050565b60008115159050919050565b6142d5816142c0565b82525050565b6142e481613b8b565b82525050565b600065ffffffffffff82169050919050565b614305816142ea565b82525050565b60a08201600082015161432160008501826142b1565b50602082015161433460208501826142cc565b50604082015161434760408501826142b1565b50606082015161435a60608501826142db565b50608082015161436d60808501826142fc565b50505050565b600060a082019050614388600083018461430b565b92915050565b6000806000806000606086880312156143aa576143a9613b81565b5b600086013567ffffffffffffffff8111156143c8576143c7613b86565b5b6143d488828901613f6e565b955095505060206143e788828901613d88565b935050604086013567ffffffffffffffff81111561440857614407613b86565b5b61441488828901613f6e565b92509250509295509295909350565b6000806020838503121561443a57614439613b81565b5b600083013567ffffffffffffffff81111561445857614457613b86565b5b61446485828601613f6e565b92509250509250929050565b600080fd5b6000610160828403121561448c5761448b614470565b5b81905092915050565b6000602082840312156144ab576144aa613b81565b5b600082013567ffffffffffffffff8111156144c9576144c8613b86565b5b6144d584828501614475565b91505092915050565b6144e781613e9d565b82525050565b600060208201905061450260008301846144de565b92915050565b60006020828403121561451e5761451d613b81565b5b600061452c848285016140ff565b91505092915050565b6000806000806060858703121561454f5761454e613b81565b5b600085013567ffffffffffffffff81111561456d5761456c613b86565b5b61457987828801614475565b945050602061458a87828801613d88565b935050604085013567ffffffffffffffff8111156145ab576145aa613b86565b5b6145b787828801613f6e565b925092505092959194509250565b6145ce81614297565b82525050565b6145dd816142c0565b82525050565b6145ec81613b8b565b82525050565b6145fb816142ea565b82525050565b600060a08201905061461660008301886145c5565b61462360208301876145d4565b61463060408301866145c5565b61463d60608301856145e3565b61464a60808301846145f2565b9695505050505050565b6000819050919050565b600061467961467461466f84614297565b614654565b613d9d565b9050919050565b6146898161465e565b82525050565b60006020820190506146a46000830184614680565b92915050565b600082825260208201905092915050565b7f6d757374207370656369667920756e7374616b652064656c6179000000000000600082015250565b60006146f1601a836146aa565b91506146fc826146bb565b602082019050919050565b60006020820190508181036000830152614720816146e4565b9050919050565b7f63616e6e6f7420646563726561736520756e7374616b652074696d6500000000600082015250565b600061475d601c836146aa565b915061476882614727565b602082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cd82613d9d565b91506147d883613d9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561480d5761480c614793565b5b828201905092915050565b7f6e6f207374616b65207370656369666965640000000000000000000000000000600082015250565b600061484e6012836146aa565b915061485982614818565b602082019050919050565b6000602082019050818103600083015261487d81614841565b9050919050565b7f7374616b65206f766572666c6f77000000000000000000000000000000000000600082015250565b60006148ba600e836146aa565b91506148c582614884565b602082019050919050565b600060208201905081810360008301526148e9816148ad565b9050919050565b600061490b61490661490184613b8b565b614654565b613d9d565b9050919050565b61491b816148f0565b82525050565b60006040820190506149366000830185614056565b6149436020830184614912565b9392505050565b7f4141393220696e7465726e616c2063616c6c206f6e6c79000000000000000000600082015250565b60006149806017836146aa565b915061498b8261494a565b602082019050919050565b600060208201905081810360008301526149af81614973565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149f05780820151818401526020810190506149d5565b838111156149ff576000848401525b50505050565b6000614a10826149b6565b614a1a81856149c1565b9350614a2a8185602086016149d2565b614a3381613bfe565b840191505092915050565b6000604082019050614a536000830185614056565b8181036020830152614a658184614a05565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112614ac957614ac8614a9d565b5b80830191505092915050565b7f576974686472617720616d6f756e7420746f6f206c6172676500000000000000600082015250565b6000614b0b6019836146aa565b9150614b1682614ad5565b602082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b6000614b4c82613d9d565b9150614b5783613d9d565b925082821015614b6a57614b69614793565b5b828203905092915050565b6000614b90614b8b614b8684613d3f565b614654565b613d3f565b9050919050565b6000614ba282614b75565b9050919050565b6000614bb482614b97565b9050919050565b614bc481614ba9565b82525050565b6000604082019050614bdf6000830185614bbb565b614bec6020830184614056565b9392505050565b600081905092915050565b50565b6000614c0e600083614bf3565b9150614c1982614bfe565b600082019050919050565b6000614c2f82614c01565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000614c6f6012836146aa565b9150614c7a82614c39565b602082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b600082356001606003833603038112614cc157614cc0614a9d565b5b80830191505092915050565b60008083356001602003843603038112614cea57614ce9614a9d565b5b80840192508235915067ffffffffffffffff821115614d0c57614d0b614aa2565b5b602083019250602082023603831315614d2857614d27614aa7565b5b509250929050565b6000614d3b82613d5f565b9050919050565b614d4b81614d30565b8114614d5657600080fd5b50565b600081359050614d6881614d42565b92915050565b600060208284031215614d8457614d83613b81565b5b6000614d9284828501614d59565b91505092915050565b7f4141393620696e76616c69642061676772656761746f72000000000000000000600082015250565b6000614dd16017836146aa565b9150614ddc82614d9b565b602082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b60008083356001602003843603038112614e2457614e23614a9d565b5b80840192508235915067ffffffffffffffff821115614e4657614e45614aa2565b5b602083019250600182023603831315614e6257614e61614aa7565b5b509250929050565b600082825260208201905092915050565b6000819050919050565b6000614e946020840184613d88565b905092915050565b614ea581613d5f565b82525050565b6000614eba6020840184613dbe565b905092915050565b614ecb81613d9d565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112614efd57614efc614edb565b5b83810192508235915060208301925067ffffffffffffffff821115614f2557614f24614ed1565b5b600182023603841315614f3b57614f3a614ed6565b5b509250929050565b600082825260208201905092915050565b6000614f608385614f43565b9350614f6d838584613cbb565b614f7683613bfe565b840190509392505050565b60006101608301614f956000840184614e85565b614fa26000860182614e9c565b50614fb06020840184614eab565b614fbd6020860182614ec2565b50614fcb6040840184614ee0565b8583036040870152614fde838284614f54565b92505050614fef6060840184614ee0565b8583036060870152615002838284614f54565b925050506150136080840184614eab565b6150206080860182614ec2565b5061502e60a0840184614eab565b61503b60a0860182614ec2565b5061504960c0840184614eab565b61505660c0860182614ec2565b5061506460e0840184614eab565b61507160e0860182614ec2565b50615080610100840184614eab565b61508e610100860182614ec2565b5061509d610120840184614ee0565b8583036101208701526150b1838284614f54565b925050506150c3610140840184614ee0565b8583036101408701526150d7838284614f54565b925050508091505092915050565b60006150f18383614f81565b905092915050565b6000823560016101600383360303811261511657615115614edb565b5b82810191505092915050565b6000602082019050919050565b600061513b8385614e6a565b93508360208402850161514d84614e7b565b8060005b8781101561519157848403895261516882846150f9565b61517285826150e5565b945061517d83615122565b925060208a01995050600181019050615151565b50829750879450505050509392505050565b60006151af83856149c1565b93506151bc838584613cbb565b6151c583613bfe565b840190509392505050565b600060408201905081810360008301526151eb81868861512f565b905081810360208301526152008184866151a3565b905095945050505050565b61521481613d5f565b82525050565b600060208201905061522f600083018461520b565b92915050565b600061524082613d9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614793565b5b600182019050919050565b7f41413230206163636f756e74206e6f74206465706c6f79656400000000000000600082015250565b60006152b46019836146aa565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b600080fd5b600080fd5b60008085851115615308576153076152ea565b5b83861115615319576153186152ef565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061537f838361532f565b8261538a813561533a565b925060148210156153ca576153c57fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802615366565b831692505b505092915050565b7f41413330207061796d6173746572206e6f74206465706c6f7965640000000000600082015250565b6000615408601b836146aa565b9150615413826153d2565b602082019050919050565b60006020820190508181036000830152615437816153fb565b9050919050565b600061544b6000836146aa565b915061545682614bfe565b600082019050919050565b6000602082019050818103600083015261547a8161543e565b9050919050565b6000602082019050818103600083015261549c8184866151a3565b90509392505050565b6000815190506154b481613d71565b92915050565b6000602082840312156154d0576154cf613b81565b5b60006154de848285016154a5565b91505092915050565b60006060820190506154fc60008301866144de565b615509602083018561520b565b6155166040830184614056565b949350505050565b7f6e6f74207374616b656400000000000000000000000000000000000000000000600082015250565b6000615554600a836146aa565b915061555f8261551e565b602082019050919050565b6000602082019050818103600083015261558381615547565b9050919050565b7f616c726561647920756e7374616b696e67000000000000000000000000000000600082015250565b60006155c06011836146aa565b91506155cb8261558a565b602082019050919050565b600060208201905081810360008301526155ef816155b3565b9050919050565b6000615601826142ea565b915061560c836142ea565b92508265ffffffffffff0382111561562757615626614793565b5b828201905092915050565b600061564d615648615643846142ea565b614654565b613d9d565b9050919050565b61565d81615632565b82525050565b60006020820190506156786000830184615654565b92915050565b7f4e6f207374616b6520746f207769746864726177000000000000000000000000600082015250565b60006156b46014836146aa565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f6d7573742063616c6c20756e6c6f636b5374616b652829206669727374000000600082015250565b6000615720601d836146aa565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f5374616b65207769746864726177616c206973206e6f74206475650000000000600082015250565b600061578c601b836146aa565b915061579782615756565b602082019050919050565b600060208201905081810360008301526157bb8161577f565b9050919050565b7f6661696c656420746f207769746864726177207374616b650000000000000000600082015250565b60006157f86018836146aa565b9150615803826157c2565b602082019050919050565b60006020820190508181036000830152615827816157eb565b9050919050565b600061583a8385614bf3565b9350615847838584613cbb565b82840190509392505050565b600061586082848661582e565b91508190509392505050565b600060c0820190506158816000830189614056565b61588e6020830188614056565b61589b60408301876145f2565b6158a860608301866145f2565b6158b560808301856145d4565b81810360a08301526158c78184614a05565b9050979650505050505050565b60006158df826149b6565b6158e98185614f43565b93506158f98185602086016149d2565b61590281613bfe565b840191505092915050565b600060c0830160008301516159256000860182614ec2565b5060208301516159386020860182614ec2565b50604083015161594b60408601826142cc565b50606083015161595e60608601826142fc565b50608083015161597160808601826142fc565b5060a083015184820360a086015261598982826158d4565b9150508091505092915050565b6040820160008201516159ac6000850182614ec2565b5060208201516159bf6020850182614ec2565b50505050565b6040820160008201516159db6000850182614ec2565b5060208201516159ee6020850182614ec2565b50505050565b606082016000820151615a0a6000850182614e9c565b506020820151615a1d60208501826159c5565b50505050565b6000610140820190508181036000830152615a3e818861590d565b9050615a4d6020830187615996565b615a5a6060830186615996565b615a6760a0830185615996565b615a7460e08301846159f4565b9695505050505050565b600060e0820190508181036000830152615a98818761590d565b9050615aa76020830186615996565b615ab46060830185615996565b615ac160a0830184615996565b95945050505050565b7f6465706f736974206f766572666c6f7700000000000000000000000000000000600082015250565b6000615b006010836146aa565b9150615b0b82615aca565b602082019050919050565b60006020820190508181036000830152615b2f81615af3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110615b7657615b75615b36565b5b50565b6000819050615b8782615b65565b919050565b6000615b9782615b79565b9050919050565b615ba781615b8c565b82525050565b6000606082019050615bc26000830186615b9e565b8181036020830152615bd48185614a05565b9050615be36040830184614056565b949350505050565b60008160e01c9050919050565b600060033d1115615c175760046000803e615c14600051615beb565b90505b90565b600060443d1015615c2a57615cad565b615c32613b77565b60043d036004823e80513d602482011167ffffffffffffffff82111715615c5a575050615cad565b808201805167ffffffffffffffff811115615c785750505050615cad565b80602083010160043d038501811115615c95575050505050615cad565b615ca482602001850186613c3e565b82955050505050505b90565b7f4141353020706f73744f702072657665727465643a2000000000000000000000815250565b600081519050919050565b600081905092915050565b6000615cf782615cd6565b615d018185615ce1565b9350615d118185602086016149d2565b80840191505092915050565b6000615d2882615cb0565b601682019150615d388284615cec565b915081905092915050565b6000615d4e82615cd6565b615d5881856146aa565b9350615d688185602086016149d2565b615d7181613bfe565b840191505092915050565b6000604082019050615d916000830185614056565b8181036020830152615da38184615d43565b90509392505050565b7f4141353020706f73744f70207265766572740000000000000000000000000000600082015250565b6000615de26012836146aa565b9150615ded82615dac565b602082019050919050565b6000604082019050615e0d6000830184614056565b8181036020830152615e1e81615dd5565b905092915050565b7f414135312070726566756e642062656c6f772061637475616c476173436f7374600082015250565b6000615e5c6020836146aa565b9150615e6782615e26565b602082019050919050565b6000604082019050615e876000830184614056565b8181036020830152615e9881615e4f565b905092915050565b6000608082019050615eb56000830187614056565b615ec260208301866145d4565b615ecf6040830185614056565b615edc6060830184614056565b95945050505050565b7f41413934206761732076616c756573206f766572666c6f770000000000000000600082015250565b6000615f1b6018836146aa565b9150615f2682615ee5565b602082019050919050565b60006020820190508181036000830152615f4a81615f0e565b9050919050565b7f41413430206f76657220766572696669636174696f6e4761734c696d69740000600082015250565b6000615f87601e836146aa565b9150615f9282615f51565b602082019050919050565b6000604082019050615fb26000830184614056565b8181036020830152615fc381615f7a565b905092915050565b7f41413234207369676e6174757265206572726f72000000000000000000000000600082015250565b60006160016014836146aa565b915061600c82615fcb565b602082019050919050565b600060408201905061602c6000830184614056565b818103602083015261603d81615ff4565b905092915050565b7f414132322065787069726564206f72206e6f7420647565000000000000000000600082015250565b600061607b6017836146aa565b915061608682616045565b602082019050919050565b60006040820190506160a66000830184614056565b81810360208301526160b78161606e565b905092915050565b7f41413334207369676e6174757265206572726f72000000000000000000000000600082015250565b60006160f56014836146aa565b9150616100826160bf565b602082019050919050565b60006040820190506161206000830184614056565b8181036020830152616131816160e8565b905092915050565b7f41413332207061796d61737465722065787069726564206f72206e6f7420647560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006161956021836146aa565b91506161a082616139565b604082019050919050565b60006040820190506161c06000830184614056565b81810360208301526161d181616188565b905092915050565b610100820160008201516161f06000850182614e9c565b5060208201516162036020850182614ec2565b5060408201516162166040850182614ec2565b5060608201516162296060850182614ec2565b50608082015161623c6080850182614ec2565b5060a082015161624f60a0850182614e9c565b5060c082015161626260c0850182614ec2565b5060e082015161627560e0850182614ec2565b50505050565b61628481613e9d565b82525050565b610180820160008201516162a160008501826161d9565b5060208201516162b561010085018261627b565b5060408201516162c9610120850182614ec2565b5060608201516162dd610140850182614ec2565b5060808201516162f1610160850182614ec2565b50505050565b60006101c08201905081810360008301526163138186886151a3565b9050616322602083018561628a565b8181036101a08301526163358184614a05565b905095945050505050565b60008151905061634f81613da7565b92915050565b60006020828403121561636b5761636a613b81565b5b600061637984828501616340565b91505092915050565b7f41413935206f7574206f66206761730000000000000000000000000000000000600082015250565b60006163b8600f836146aa565b91506163c382616382565b602082019050919050565b60006040820190506163e36000830184614056565b81810360208301526163f4816163ab565b905092915050565b7f4141393020696e76616c69642062656e65666963696172790000000000000000600082015250565b60006164326018836146aa565b915061643d826163fc565b602082019050919050565b6000602082019050818103600083015261646181616425565b9050919050565b7f41413931206661696c65642073656e6420746f2062656e656669636961727900600082015250565b600061649e601f836146aa565b91506164a982616468565b602082019050919050565b600060208201905081810360008301526164cd81616491565b9050919050565b600060608201905081810360008301526164ef8187896151a3565b90506164fe602083018661520b565b81810360408301526165118184866151a3565b90509695505050505050565b6000819050919050565b600061654261653d6165388461651d565b614654565b613d9d565b9050919050565b61655281616527565b82525050565b600060408201905061656d6000830185616549565b818103602083015261657f8184615d43565b90509392505050565b7f4141393320696e76616c6964207061796d6173746572416e6444617461000000600082015250565b60006165be601d836146aa565b91506165c982616588565b602082019050919050565b600060208201905081810360008301526165ed816165b1565b9050919050565b600061016083016166086000840184614e85565b6166156000860182614e9c565b506166236020840184614eab565b6166306020860182614ec2565b5061663e6040840184614ee0565b8583036040870152616651838284614f54565b925050506166626060840184614ee0565b8583036060870152616675838284614f54565b925050506166866080840184614eab565b6166936080860182614ec2565b506166a160a0840184614eab565b6166ae60a0860182614ec2565b506166bc60c0840184614eab565b6166c960c0860182614ec2565b506166d760e0840184614eab565b6166e460e0860182614ec2565b506166f3610100840184614eab565b616701610100860182614ec2565b50616710610120840184614ee0565b858303610120870152616724838284614f54565b92505050616736610140840184614ee0565b85830361014087015261674a838284614f54565b925050508091505092915050565b6000606082019050818103600083015261677281866165f4565b905061678160208301856144de565b61678e6040830184614056565b949350505050565b7f414132332072657665727465643a200000000000000000000000000000000000815250565b60006167c782616796565b600f820191506167d78284615cec565b915081905092915050565b7f4141323320726576657274656420286f72204f4f472900000000000000000000600082015250565b60006168186016836146aa565b9150616823826167e2565b602082019050919050565b60006040820190506168436000830184614056565b81810360208301526168548161680b565b905092915050565b7f41413231206469646e2774207061792070726566756e64000000000000000000600082015250565b60006168926017836146aa565b915061689d8261685c565b602082019050919050565b60006040820190506168bd6000830184614056565b81810360208301526168ce81616885565b905092915050565b7f4141343120746f6f206c6974746c6520766572696669636174696f6e47617300600082015250565b600061690c601f836146aa565b9150616917826168d6565b602082019050919050565b6000602082019050818103600083015261693b816168ff565b9050919050565b7f41413331207061796d6173746572206465706f73697420746f6f206c6f770000600082015250565b6000616978601e836146aa565b915061698382616942565b602082019050919050565b60006040820190506169a36000830184614056565b81810360208301526169b48161696b565b905092915050565b60006169cf6169ca84613c8a565b613c6f565b9050828152602081018484840111156169eb576169ea613bf9565b5b6169f68482856149d2565b509392505050565b600082601f830112616a1357616a12613bf4565b5b8151616a238482602086016169bc565b91505092915050565b60008060408385031215616a4357616a42613b81565b5b600083015167ffffffffffffffff811115616a6157616a60613b86565b5b616a6d858286016169fe565b9250506020616a7e85828601616340565b9150509250929050565b7f414133332072657665727465643a200000000000000000000000000000000000815250565b6000616ab982616a88565b600f82019150616ac98284615cec565b915081905092915050565b7f4141333320726576657274656420286f72204f4f472900000000000000000000600082015250565b6000616b0a6016836146aa565b9150616b1582616ad4565b602082019050919050565b6000604082019050616b356000830184614056565b8181036020830152616b4681616afd565b905092915050565b7f414131302073656e64657220616c726561647920636f6e737472756374656400600082015250565b6000616b84601f836146aa565b9150616b8f82616b4e565b602082019050919050565b6000604082019050616baf6000830184614056565b8181036020830152616bc081616b77565b905092915050565b7f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000600082015250565b6000616bfe601b836146aa565b9150616c0982616bc8565b602082019050919050565b6000604082019050616c296000830184614056565b8181036020830152616c3a81616bf1565b905092915050565b7f4141313420696e6974436f6465206d7573742072657475726e2073656e646572600082015250565b6000616c786020836146aa565b9150616c8382616c42565b602082019050919050565b6000604082019050616ca36000830184614056565b8181036020830152616cb481616c6b565b905092915050565b7f4141313520696e6974436f6465206d757374206372656174652073656e646572600082015250565b6000616cf26020836146aa565b9150616cfd82616cbc565b602082019050919050565b6000604082019050616d1d6000830184614056565b8181036020830152616d2e81616ce5565b905092915050565b6000604082019050616d4b600083018561520b565b616d58602083018461520b565b939250505056fea2646970667358221220739877ad142b69ddeea20526284c4607088a678ffde22ba2959a89233ac10f0a64736f6c634300080c0033608060405234801561001057600080fd5b50610342806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a6004803603810190610045919061017b565b610060565b6040516100579190610209565b60405180910390f35b60008083836000906014926100779392919061022e565b9061008291906102ad565b60601c905060008484601490809261009c9392919061022e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000602060008351602085016000875af1905060005193508061010357600093505b50505092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261013b5761013a610116565b5b8235905067ffffffffffffffff8111156101585761015761011b565b5b60208301915083600182028301111561017457610173610120565b5b9250929050565b600080602083850312156101925761019161010c565b5b600083013567ffffffffffffffff8111156101b0576101af610111565b5b6101bc85828601610125565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101f3826101c8565b9050919050565b610203816101e8565b82525050565b600060208201905061021e60008301846101fa565b92915050565b600080fd5b600080fd5b6000808585111561024257610241610224565b5b8386111561025357610252610229565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006102b98383610269565b826102c48135610274565b92506014821015610304576102ff7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026102a0565b831692505b50509291505056fea26469706673582212200778ef27a41453ce7330ffe38d46506a9cf0e8c19e33ee31a060d5426aef630464736f6c634300080c0033"; + "0x60a0604052604051620000129062000076565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200006f57600080fd5b5062000084565b61046f806200a67083390190565b60805161a5c9620000a76000396000818161264e0152616e6f015261a5c96000f3fe6080604052600436106101025760003560e01c8063957122ab11610095578063bb9fe6bf11610064578063bb9fe6bf1461034f578063c23a5cea14610366578063d6383f941461038f578063ee219423146103b8578063fc7e286d146103e157610126565b8063957122ab146102a45780639b249f69146102cd578063a6193531146102f6578063b760faf91461033357610126565b80634b1d7cf5116100d15780634b1d7cf5146101d65780635287ce12146101ff57806370a082311461023c5780638f41ec5a1461027957610126565b80630396cb601461012b5780631d732756146101475780631fad948c14610184578063205c2878146101ad57610126565b366101265761011b67bd85ada7de3f843660c01b610422565b61012433610425565b005b600080fd5b6101456004803603810190610140919061742f565b61056d565b005b34801561015357600080fd5b5061016e6004803603810190610169919061782c565b610b04565b60405161017b91906178cd565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a6919061797c565b611044565b005b3480156101b957600080fd5b506101d460048036038101906101cf91906179dc565b611340565b005b3480156101e257600080fd5b506101fd60048036038101906101f89190617a72565b6116a5565b005b34801561020b57600080fd5b5061022660048036038101906102219190617ad2565b61210a565b6040516102339190617bdb565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e9190617ad2565b612293565b60405161027091906178cd565b60405180910390f35b34801561028557600080fd5b5061028e612344565b60405161029b91906178cd565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190617bf6565b612349565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190617c8b565b612624565b005b34801561030257600080fd5b5061031d60048036038101906103189190617cfd565b612726565b60405161032a9190617d55565b60405180910390f35b61034d60048036038101906103489190617ad2565b610425565b005b34801561035b57600080fd5b5061036461279e565b005b34801561037257600080fd5b5061038d60048036038101906103889190617d70565b612aa2565b005b34801561039b57600080fd5b506103b660048036038101906103b19190617d9d565b612fd2565b005b3480156103c457600080fd5b506103df60048036038101906103da9190617cfd565b61331a565b005b3480156103ed57600080fd5b5061040860048036038101906104039190617ad2565b61389a565b604051610419959493929190617e69565b60405180910390f35b50565b61043967468b4d0eb923786460c01b610422565b61044d67e2dd04761b71021160c01b610422565b6104616739f840fbb98466ea60c01b610422565b61046b8134613933565b61047f672ae9f4c70e9ac82160c01b610422565b6104936780392b76417dd37060c01b610422565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506104e96716b6918eb131153d60c01b610422565b6104fd6782b3f6f7efef9a3060c01b610422565b8173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260000160009054906101000a90046dffffffffffffffffffffffffffff166040516105619190617ef7565b60405180910390a25050565b610581676a63848afe7b25a660c01b610422565b610595678aabda62f45d36d860c01b610422565b6105a967cd2a6344bb8ba41d60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506105ff6764f9747c720a16ff60c01b610422565b6106136756f07cead6218a0d60c01b610422565b61062767f7e41ffdf6e7b07360c01b610422565b60008263ffffffff1611610670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066790617f6f565b60405180910390fd5b6106846745ba7f8864c4838a60c01b610422565b610698673eb5cba913e1b29a60c01b610422565b6106ac674e10279e834acc5160c01b610422565b6106c067b9b4e84773c481f160c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff168263ffffffff161015610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90617fdb565b60405180910390fd5b61073767e43e0a0e0e0b681b60c01b610422565b61074b67fd842514a971b95360c01b610422565b61075f676e3816719231aed060c01b610422565b60003482600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661079b919061802a565b90506107b1675a0b2db399659cb660c01b610422565b6107c56714a14fbd67cb18f260c01b610422565b6107d967be3384e9308ba91560c01b610422565b6000811161081c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610813906180aa565b60405180910390fd5b61083067e860cef7076562e860c01b610422565b610844675863f8ef40016f1360c01b610422565b61085867c67ebc2721963fd060c01b610422565b61086c67cde4026bd69782e060c01b610422565b6dffffffffffffffffffffffffffff80168111156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690618116565b60405180910390fd5b6108d36793b6d1c7ed9974a960c01b610422565b6108e767d8267f00f5f9303460c01b610422565b6040518060a001604052808360000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001600115158152602001826dffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600065ffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550602082015181600001600e6101000a81548160ff021916908315150217905550604082015181600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060608201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550905050610a9b67eb1c85f247f3f58060c01b610422565b610aaf67e4a8c29fd2ae2b1960c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c018285604051610af7929190618167565b60405180910390a2505050565b6000610b1a67db3526811af6d2f660c01b613b0b565b610b2d660512575ad400e160c01b613b0b565b610b41675e28714e8ca8473560c01b613b0b565b60005a9050610b5a67fbf195873194ab0060c01b613b0b565b610b6e6742164649c89ee89360c01b613b0b565b610b8267d32ef2f0c33a85dd60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be7906181dc565b60405180910390fd5b610c04676c1ebce823d882a160c01b613b0b565b610c186794845e22e51a4a2060c01b613b0b565b610c2c6780b462b8809afa0c60c01b613b0b565b600085600001519050610c49675ee627e33d5a9d4760c01b613b0b565b610c5d67c5a8ad7eeb6af64760c01b613b0b565b600081604001519050610c7a67b6cf7e4854e6b65a60c01b613b0b565b610c8e6768ef5487dffe40e260c01b613b0b565b610ca2678532b8be333513e760c01b613b0b565b61138882606001518201015a1015610d0657610cc8675f6b6fc26e1d7bcd60c01b613b0b565b610cdc67a0d813c4f9ca49ae60c01b613b0b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b610d1a67e33262b284b9622860c01b613b0b565b610d2e678b199f955efc1b8b60c01b613b0b565b610d4267d69684ddc4dead3960c01b613b0b565b6000610d5867c6aea2abdd90839d60c01b613b0b565b610d6c67daa27416126f734660c01b613b0b565b600089511115610f5d57610d8a67ff0652f47ca0cb8a60c01b613b0b565b610d9e67168087653bef8d4c60c01b613b0b565b610db2673ebcbd10cdc23a5860c01b613b0b565b6000610dc5846000015160008c86613b0e565b9050610ddb67a21eac7e12c81c9760c01b613b0b565b610def6773ed69f4eb5a84e060c01b613b0b565b80610f4257610e0867eb682f232ae0065460c01b613b0b565b610e1c67d09a82d3230f03fd60c01b613b0b565b610e306723ceaaff8c33f04160c01b613b0b565b6000610e3d610800613b4f565b9050610e53678bdf590ff52a5a2b60c01b613b0b565b610e67670588415b92d5232f60c01b613b0b565b600081511115610f0f57610e856762ba2321ed0e69c160c01b613b0b565b610e9967d1620a1ed4dcdc4c60c01b613b0b565b610ead67c0fc5eee94edd58c60c01b613b0b565b846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610f0292919061827b565b60405180910390a3610f24565b610f236754fe5335162ab15860c01b613b0b565b5b610f38672f681d8c381fda6960c01b613b0b565b6001925050610f57565b610f566737e5eb8f6f7827c360c01b613b0b565b5b50610f72565b610f7167145dbc1ca024fb8660c01b613b0b565b5b610f8667c54267444da43bfc60c01b613b0b565b610f9a67599b3cfa8748f3b560c01b613b0b565b610fae67714bf44ce4a0381860c01b613b0b565b600088608001515a8603019050610fcf6785a90bc90fd0c5a860c01b613b0b565b610fe3679f9fbda8e47ac60460c01b613b0b565b6110356000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085613ba7565b95505050505050949350505050565b61105867480f4be8a88a925660c01b613b0b565b61106c670718d96351a70ff760c01b613b0b565b61108067eda6ec5b72a8799760c01b613b0b565b600083839050905061109c67b8a5229407b3ffe260c01b613b0b565b6110b067454d30fce6f050fe60c01b613b0b565b60008167ffffffffffffffff8111156110cc576110cb617477565b5b60405190808252806020026020018201604052801561110557816020015b6110f2617276565b8152602001906001900390816110ea5790505b50905061111c672afc4210868ecdb260c01b613b0b565b611130679de92eca7afe9efe60c01b613b0b565b6111446783d9fd5825b3bd4760c01b613b0b565b60005b828110156112395761116367b42c932e1dc59b0c60c01b613b0b565b61117767ebaa907adb697f2660c01b613b0b565b600082828151811061118c5761118b6182ab565b5b602002602001015190506111aa670ce811578d6854ee60c01b613b0b565b6111be67b4de2464f4eca8f760c01b613b0b565b6000806111f0848a8a878181106111d8576111d76182ab565b5b90506020028101906111ea91906182e9565b856142e4565b9150915061120867551faaad0f42dec760c01b613b0b565b61121c67d8da3040f57e6e4860c01b613b0b565b61122984838360006147a0565b5050508080600101915050611147565b5061124e675489bf08514b848f60c01b613b0b565b611262676cdf4ed558a4877160c01b613b0b565b600061127867a821cbcf353d70f960c01b613b0b565b61128c67bc17dd3329400a2960c01b613b0b565b60005b83811015611305576112ab67e2f8129ef9d3658f60c01b613b0b565b6112f4818888848181106112c2576112c16182ab565b5b90506020028101906112d491906182e9565b8584815181106112e7576112e66182ab565b5b6020026020010151614b3b565b82019150808060010191505061128f565b5061131a6772b31bd0e942f20b60c01b613b0b565b61132e67b79c5a4cdbbf72fb60c01b613b0b565b6113388482614e11565b505050505050565b61135467560f3e8976c6b86c60c01b610422565b61136867b28c49611e086e9260c01b610422565b61137c67bdb6e574008a0ae360c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506113d26768e81caaf4bf08d260c01b610422565b6113e667dfd1b8104dcc02a360c01b610422565b6113fa671d227a41f8efec8b60c01b610422565b8060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1682111561146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061835e565b60405180910390fd5b61147f67483db2d9f91c75b460c01b610422565b61149367981c38718e2f795260c01b610422565b818160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166114cd919061837e565b8160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550611517678933eb8a0225346d60c01b610422565b61152b675fa45e9fe98dbcb160c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8484604051611573929190618407565b60405180910390a261158f6749f89ede312291a760c01b610422565b6115a3674c5fe87fce31d59f60c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff16836040516115c990618461565b60006040518083038185875af1925050503d8060008114611606576040519150601f19603f3d011682016040523d82523d6000602084013e61160b565b606091505b5050905061162367a6213c671f35757e60c01b610422565b611637676742cd98f224910860c01b610422565b61164b6795caee35cc00a57f60c01b610422565b8061168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906184c2565b60405180910390fd5b61169f675622a5e8bd3b0c7760c01b610422565b50505050565b6116b967d45167d0b820409960c01b613b0b565b6116cd67cc35957a153378ca60c01b613b0b565b6116e1674c2989d892e87d0f60c01b613b0b565b60008383905090506116fd672fed84417ef8bfe860c01b613b0b565b6117116796028c97b81dd4ca60c01b613b0b565b6000611727675a4768fd252e3be560c01b613b0b565b61173b67c2c56575af3483b460c01b613b0b565b60005b82811015611a8c5761175a67693f8da5a6e9ab0a60c01b613b0b565b61176e677cda10462919d8e160c01b613b0b565b36868683818110611782576117816182ab565b5b905060200281019061179491906184e2565b90506117aa6705820c78111400f560c01b613b0b565b6117be6741ccf4d47e3583ee60c01b613b0b565b3660008280600001906117d1919061850a565b915091506117e9675a383c333b42a4e160c01b613b0b565b6117fd678f62bf7452b7eca160c01b613b0b565b600083602001602081019061181291906185ab565b9050611828671b309c9a411d1c6b60c01b613b0b565b61183c672799ca0d1fe6dfb260c01b613b0b565b611850670b6ba46882b67fa660c01b613b0b565b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690618624565b60405180910390fd5b6118d367019aa5bc6cd397ac60c01b613b0b565b6118e767aa1c8bcbd930b1d460c01b613b0b565b6118fb67918ab343fe7e020a60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a3b576119436737f65cd02c2a8b4f60c01b613b0b565b61195767b4dcc864ad0a75ad60c01b613b0b565b61196b678760cc1fdf08e24860c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663e3563a4f84848780604001906119999190618644565b6040518563ffffffff1660e01b81526004016119b89493929190618a0d565b60006040518083038186803b1580156119d057600080fd5b505afa9250505080156119e1575060015b611a36576119f96758ec6b8342bd3a2560c01b613b0b565b806040517f86a9f750000000000000000000000000000000000000000000000000000000008152600401611a2d9190618a57565b60405180910390fd5b611a50565b611a4f67a4a227a75bcaa00260c01b613b0b565b5b611a64678fc00b99d20e616b60c01b613b0b565b8282905086611a73919061802a565b9550505050508080611a8490618a72565b91505061173e565b50611aa16742ab1a1b4f7ee2ad60c01b613b0b565b611ab56771ab06326a91d17c60c01b613b0b565b60008167ffffffffffffffff811115611ad157611ad0617477565b5b604051908082528060200260200182016040528015611b0a57816020015b611af7617276565b815260200190600190039081611aef5790505b509050611b2167ea43e34cb3b2cd3560c01b613b0b565b611b356771f3173d2348639d60c01b613b0b565b6000611b4b67069f0801d2dbc6c260c01b613b0b565b611b5f671f650b22e651925e60c01b613b0b565b60005b84811015611dc557611b7e6745688aa7c89dd34560c01b613b0b565b611b9267580f3333dbb5da1560c01b613b0b565b36888883818110611ba657611ba56182ab565b5b9050602002810190611bb891906184e2565b9050611bce67ee341f5e72a97a8c60c01b613b0b565b611be267dcdc504a5a96256460c01b613b0b565b366000828060000190611bf5919061850a565b91509150611c0d67269527dec95cb11c60c01b613b0b565b611c216701979335b1e239c960c01b613b0b565b6000836020016020810190611c3691906185ab565b9050611c4c67706611ae2289a1c860c01b613b0b565b611c606743e9efaa7361986960c01b613b0b565b6000838390509050611c7c67809f0c0c8e7b3cff60c01b613b0b565b611c90677fffbda1e029bb3c60c01b613b0b565b60005b81811015611dac57611caf6773bea7e2a81daa4c60c01b613b0b565b611cc367291a7ba8300c92a360c01b613b0b565b6000898981518110611cd857611cd76182ab565b5b60200260200101519050611cf66771698436d6eaf0ed60c01b613b0b565b611d0a67563367cdfd60546260c01b613b0b565b600080611d3c8b898987818110611d2457611d236182ab565b5b9050602002810190611d3691906182e9565b856142e4565b91509150611d54674734362213fb1c0160c01b613b0b565b611d68677416f12f68d4556c60c01b613b0b565b611d74848383896147a0565b611d88677c5f9436e2492bd060c01b613b0b565b8a80611d9390618a72565b9b50505050508080611da490618a72565b915050611c93565b5050505050508080611dbd90618a72565b915050611b62565b50611dda67c16b30149cb0aa3c60c01b613b0b565b611dee67c0fb1faf9fc25f5660c01b613b0b565b6000611e0467e30df2c998e3e67160c01b613b0b565b60009150611e1c67c80b0563cb6f23f360c01b613b0b565b611e3067d2aa27a228f10a6360c01b613b0b565b60005b8581101561206157611e4f67a084dc518274b30f60c01b613b0b565b611e636743256d97934c584560c01b613b0b565b36898983818110611e7757611e766182ab565b5b9050602002810190611e8991906184e2565b9050611e9f67510cbc26f931437260c01b613b0b565b611eb3679ce57f2ae5c49cb960c01b613b0b565b806020016020810190611ec691906185ab565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2611f1c677274beafcd04754f60c01b613b0b565b611f306730a1207ece35292760c01b613b0b565b366000828060000190611f43919061850a565b91509150611f5b67524efd8f365fdbd760c01b613b0b565b611f6f67c3cec05e9ac4028360c01b613b0b565b6000828290509050611f8b671aea3cc95726cae960c01b613b0b565b611f9f6775ee5a0920f5be5260c01b613b0b565b60005b8181101561204957611fbe67c00d6a090d98dcd260c01b613b0b565b61200788858584818110611fd557611fd46182ab565b5b9050602002810190611fe791906182e9565b8b8b81518110611ffa57611ff96182ab565b5b6020026020010151614b3b565b87612012919061802a565b965061202867b8d9f72bde1b1f2760c01b613b0b565b878061203390618a72565b985050808061204190618a72565b915050611fa2565b5050505050808061205990618a72565b915050611e33565b50612076670517e35055105ac660c01b613b0b565b61208a67a82eba569fb3785460c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a26120e26778b1e1413f5d45f360c01b613b0b565b6120f6671ff04071d095d97d60c01b613b0b565b6121008682614e11565b5050505050505050565b6121126172ae565b61212667af18cba7299e26ad60c01b610422565b61213a679ebf10ec7c30fe3160c01b610422565b61214e6791f79c211959ce6d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050919050565b60006122a967453056944367f73a60c01b610422565b6122bd67d6b0be6190aeaf3560c01b610422565b6122d167f5492b075a6b0a8d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050919050565b600181565b61235d67b1f1af7bf6ef4bf160c01b613b0b565b61237167c16797003993b99260c01b613b0b565b612385671f4c2029f0795a7860c01b613b0b565b6000858590501480156123af575060008373ffffffffffffffffffffffffffffffffffffffff163b145b1561242b576123c867239c9d28660a0c2a60c01b613b0b565b6123dc67b669dd79727b383560c01b613b0b565b6123f067df142b3fce8a6b3b60c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290618b06565b60405180910390fd5b61243f672d592b374ca1c03b60c01b613b0b565b612453675a84500c42a4ab9e60c01b613b0b565b61246767138b2b31588d141560c01b613b0b565b601482829050106125ac5761248667910bcbd60a6e36da60c01b613b0b565b61249a679f613af2922d985460c01b613b0b565b6124ae67d3b376958f4f773160c01b613b0b565b600082826000906014926124c493929190618b30565b906124cf9190618baf565b60601c90506124e867829d00569e3e63ff60c01b613b0b565b6124fc67fd232d1f4371ecc760c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b036125925761252f67cfd0acef3b8a9c4b60c01b613b0b565b61254367ecca448ac47b240560c01b613b0b565b61255767551cab94402f008460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990618c5a565b60405180910390fd5b6125a667c5d9882188d9fe8b60c01b613b0b565b506125c1565b6125c067a6361feedecfec7760c01b613b0b565b5b6125d567eadb46768c67bc0660c01b613b0b565b6125e9677adc2c6b15b8fee460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90618c9d565b60405180910390fd5b6126386716e0353279fd0bc160c01b613b0b565b61264c675d6dee4bf91cbea860c01b613b0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3683836040518363ffffffff1660e01b81526004016126a7929190618cbd565b6020604051808303816000875af11580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190618cf6565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815260040161271d9190618a57565b60405180910390fd5b600061273c6798117b896913c24160c01b613b0b565b6127506744f3abd0a14999b860c01b613b0b565b61276467145b145d2a81a8cc60c01b613b0b565b61276d8261500d565b304660405160200161278193929190618d23565b604051602081830303815290604052805190602001209050919050565b6127b267b727bdcaa60faa3460c01b610422565b6127c6677f65868562f2c1f760c01b610422565b6127da6703166387f9301add60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061283067245e52c9cd0ed5c960c01b610422565b6128446788375c7a9700bb9d60c01b610422565b61285867234386199a1f5d4060c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16036128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90618da6565b60405180910390fd5b6128c967608175fd3263809960c01b610422565b6128dd673b540901fbe1608b60c01b610422565b6128f1677b3886cd77d618dc60c01b610422565b61290567ac6c52375ca549b960c01b610422565b80600001600e9054906101000a900460ff16612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90618e12565b60405180910390fd5b61296a6798917dbf2092f49860c01b610422565b61297e67691384b691c8012660c01b610422565b612992676f00f75881e0d11c60c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16426129ba9190618e32565b90506129d067db9f9fbce77d71ae60c01b610422565b808260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612a0b6703437ed7c3c0f01f60c01b610422565b600082600001600e6101000a81548160ff021916908315150217905550612a3c6725f7a9564c64e84560c01b610422565b612a50674634217d4d2d5c8c60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a82604051612a969190618e9d565b60405180910390a25050565b612ab6675c449e66a915cc3f60c01b610422565b612aca678b9b5a0a7dfd210a60c01b610422565b612ade67aeae65745692194560c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3467f27b98cae48780a260c01b610422565b612b486778c5ee9b5e93ce7d60c01b610422565b600081600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050612b8f674a127222c7585ec160c01b610422565b612ba3675697b8de89fc5b5060c01b610422565b612bb767a42fea213b1cd3fe60c01b610422565b60008111612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190618f04565b60405180910390fd5b612c0e67c670866b0fa843ae60c01b610422565b612c22671e193af69d857ac560c01b610422565b612c3667b8cb3865dea60c1860c01b610422565b612c4a6725bb5e27b1725b2060c01b610422565b60008260010160049054906101000a900465ffffffffffff1665ffffffffffff1611612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290618f70565b60405180910390fd5b612cbf672487230840f0a7b560c01b610422565b612cd3671fa143ab50cdda1660c01b610422565b612ce767c80dc0f646e58e2160c01b610422565b612cfb67d78f00466fda8f6a60c01b610422565b428260010160049054906101000a900465ffffffffffff1665ffffffffffff161115612d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5390618fdc565b60405180910390fd5b612d7067047e4ce27fc5edce60c01b610422565b612d84672488ba64f9c6dec060c01b610422565b60008260010160006101000a81548163ffffffff021916908363ffffffff160217905550612dbc67557c3eed50c93d6160c01b610422565b60008260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612df8670e8c2f781dd367c760c01b610422565b600082600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550612e4467f9f05c06e34d3c2b60c01b610422565b612e5867ddfcc9a075dc351f60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38483604051612ea0929190618407565b60405180910390a2612ebc67bf0c59a6bff89d6d60c01b610422565b612ed067c7734f00106bfd0360c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff1682604051612ef690618461565b60006040518083038185875af1925050503d8060008114612f33576040519150601f19603f3d011682016040523d82523d6000602084013e612f38565b606091505b50509050612f5067fffde4fe56538fac60c01b610422565b612f64671b0f4978934c967e60c01b610422565b612f78671bcb2d2e59fa189160c01b610422565b80612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf90619048565b60405180910390fd5b612fcc679e7eabf637f3c98c60c01b610422565b50505050565b612fe667308e897ec9ac49b860c01b613b0b565b612ffa6746afd6154958d48760c01b613b0b565b61300e677943f5e49edb6c9060c01b613b0b565b613016617276565b61302a676b399b53e069a3a660c01b613b0b565b61303e67fd10b936731b4f9160c01b613b0b565b61304785615062565b61305b6740a63cbe3b28ab0f60c01b613b0b565b61306f673f895508e0d540a060c01b613b0b565b60008061307e600088856142e4565b915091506130966704eff507f83465d260c01b613b0b565b6130aa67302f1aa4c836323160c01b613b0b565b60006130b6838361522a565b90506130cc67e88deff7702581ef60c01b613b0b565b6130e067b25c829d6a16e4aa60c01b613b0b565b6130e86155a4565b6130fc67ea6ea2511b8d632760c01b613b0b565b613110673432152ca7835c3e60c01b613b0b565b600061311e60008a87614b3b565b905061313467a76dc2db7071bdb360c01b613b0b565b61314867746f7d9f4d57669460c01b613b0b565b6131506155a4565b6131646786c06cf5574ba78e60c01b613b0b565b613178675d95101420b09df260c01b613b0b565b600061318e673f929187b4c9082d60c01b613b0b565b6131a2679d6f362de5986eb960c01b613b0b565b60606131b8676649d6a2c518852d60c01b613b0b565b6131cc67cc9da580bdacbbe560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461329e57613213661447dbcfd5837660c01b613b0b565b61322767f22079f9dd8dfecb60c01b613b0b565b8973ffffffffffffffffffffffffffffffffffffffff16898960405161324e92919061908d565b6000604051808303816000865af19150503d806000811461328b576040519150601f19603f3d011682016040523d82523d6000602084013e613290565b606091505b5080925081935050506132b3565b6132b267d90f8e732302d9f460c01b613b0b565b5b6132c767b42cc8f96635c06860c01b613b0b565b8660800151838560200151866040015185856040517f8b7ac980000000000000000000000000000000000000000000000000000000008152600401613311969594939291906190a6565b60405180910390fd5b61332e67adebb93f041c28da60c01b613b0b565b613342674d0c930f5ff7318060c01b613b0b565b61335667a72d90442325d8a760c01b613b0b565b61335e617276565b61337267ca99458f9089f9cc60c01b613b0b565b61338667da0268cca058caeb60c01b613b0b565b61338f82615062565b6133a367f2cc202fae4e6d2860c01b613b0b565b6133b7676b890ebe4d93dd6760c01b613b0b565b6000806133c6600085856142e4565b915091506133de6798724490aedc5f6d60c01b613b0b565b6133f26777f8798bf1f0265e60c01b613b0b565b6000613405846000015160a001516155d2565b905061341b67bd452490c91954fb60c01b613b0b565b61342f673978756d1524ccc960c01b613b0b565b60006134428560000151600001516155d2565b9050613458677acbcb2f5ef3302660c01b613b0b565b61346c6729be7955feddb26060c01b613b0b565b61347461730d565b61348867f3272f3fb8dc76ea60c01b613b0b565b61349c67b004d9dd5d9e395460c01b613b0b565b6134b067bd5cc9bc63e18e7860c01b613b0b565b3660008880604001906134c39190618644565b915091506134db6759902901f5fc97d660c01b613b0b565b6134ef67050405a1d1e226dd60c01b613b0b565b6000601483839050101580156135155750613514674e71178c7f8d1dd360c01b6156e2565b5b80613530575061352f67647e7e719dd3403760c01b6156ed565b5b61353b57600061355e565b828260009060149261354f93929190618b30565b9061355a9190618baf565b60601c5b905061357467d9dc24b09e2c744060c01b613b0b565b61357d816155d2565b935050505061359667fd1dd0e4fb8dd7ac60c01b613b0b565b6135aa677f3a7f298afe405860c01b613b0b565b60006135b6868661522a565b90506135cc67c748266f190cdd6f60c01b613b0b565b6135e0679811ad866476a4e760c01b613b0b565b6000816000015190506135fd67bff7b97a6411a26a60c01b613b0b565b61361167bbbcd46e34937d7160c01b613b0b565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061365967f56f2c6435ad476560c01b613b0b565b61366d6701c07411d06e812460c01b613b0b565b60006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff1681526020016136c78c606001516156f4565b81525090506136e0674d18487e1344149a60c01b613b0b565b6136f4673887d13a5d72e38260c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561375e5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561382f5761377767c9dee408325af2cc60c01b613b0b565b61378b67d87ebd31eb97f10860c01b613b0b565b61379f6788c5110cc116a3a260c01b613b0b565b600060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020016137d1866155d2565b81525090506137ea67aafeb9832d13176a60c01b613b0b565b8187878a846040517ffaecb4e400000000000000000000000000000000000000000000000000000000815260040161382695949392919061925d565b60405180910390fd5b61384367b59d5f7f376aa49b60c01b613b0b565b61385767bd0e2364c61bc38560c01b613b0b565b808686896040517fe0cff05f00000000000000000000000000000000000000000000000000000000815260040161389194939291906192b8565b60405180910390fd5b60006020528060005260406000206000915090508060000160009054906101000a90046dffffffffffffffffffffffffffff169080600001600e9054906101000a900460ff169080600001600f9054906101000a90046dffffffffffffffffffffffffffff16908060010160009054906101000a900463ffffffff16908060010160049054906101000a900465ffffffffffff16905085565b61394767641b16ec65b6a68a60c01b610422565b61395b677bc0adde2d418a7060c01b610422565b61396f67882a2e6265487f8060c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506139c567a859bcc12ff4ca1b60c01b610422565b6139d967333c6fae9efbfe3560c01b610422565b6000828260000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16613a15919061802a565b9050613a2b677a9b7bf552fadc3360c01b610422565b613a3f67dc5d7b6a53eb99c660c01b610422565b613a536737910712e61ec37c60c01b610422565b6dffffffffffffffffffffffffffff8016811115613aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9d90619350565b60405180910390fd5b613aba67cd0f0402a9a2515360c01b610422565b613ace67495b2fc5f8d7b4a560c01b610422565b808260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505050565b50565b6000613b24672fcf8105fec3df7b60c01b615726565b613b386722473413de3c15fc60c01b615726565b600080845160208601878987f19050949350505050565b6060613b6567303f3b4426b9544e60c01b615726565b613b79677f275f50bcc460f960c01b615726565b3d82811115613b86578290505b604051602082018101604052818152816000602083013e8092505050919050565b6000613bbd676b7dccbe8d01c1b360c01b613b0b565b613bd167c914c7e4eb9527dd60c01b613b0b565b613be567bd9e241408179e3e60c01b613b0b565b60005a9050613bfe670528d035eb11ccd960c01b613b0b565b613c12678232911969024b1e60c01b613b0b565b613c2667f254d0853ab9151860c01b613b0b565b6000613c3c67c866fe45a820868d60c01b613b0b565b613c50674250def80b9cdffa60c01b613b0b565b600086600001519050613c6d67a4034fd86be7493260c01b613b0b565b613c816779f4f5f41e09e1f560c01b613b0b565b6000613c8c82615729565b9050613ca267dac9783205b79b5060c01b613b0b565b613cb667a9f6622ab8b1df7760c01b613b0b565b60008260a001519050613cd3676e86f8ae258d31fc60c01b613b0b565b613ce767190233c50b822bad60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613d4f57613d2f67d82973dd8b5e756a60c01b613b0b565b613d436705c1feb00d338ee160c01b613b0b565b82600001519350614098565b613d6367bcda3e6439d8dc5160c01b613b0b565b613d7767cae11a430f67971760c01b613b0b565b809350613d8e67d7ffeaae933a36d060c01b613b0b565b613da267adaeb70358f5b14860c01b613b0b565b60008851111561408257613dc0676df70878573bf74b60c01b613b0b565b613dd4679762e536b54aba4260c01b613b0b565b8187029550613ded67f077938fa615dd5060c01b613b0b565b613e0167c99b393c8303c05a60c01b613b0b565b600280811115613e1457613e13619370565b5b8a6002811115613e2757613e26619370565b5b14613ee257613e406792a4c43819ceb85e60c01b613b0b565b613e546715f5372c9a665beb60c01b613b0b565b613e6867acea0271fb902f8d60c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613eaa939291906193e7565b600060405180830381600088803b158015613ec457600080fd5b5087f1158015613ed8573d6000803e3d6000fd5b505050505061407d565b613ef6675c81ea4ed2050e2a60c01b613b0b565b613f0a67b7962f99fce57f7060c01b613b0b565b613f1e67db7246cce1a7934560c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613f60939291906193e7565b600060405180830381600088803b158015613f7a57600080fd5b5087f193505050508015613f8c575060015b61407c57613f98619432565b806308c379a0036140295750613fac619454565b80613fb7575061402b565b613fcb6727cbaddc4df8e08e60c01b613b0b565b8b81604051602001613fdd9190619551565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016140209291906195b0565b60405180910390fd5b505b61403f67146b4887806fe10b60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614073919061962c565b60405180910390fd5b5b614097565b61409667e06ee38d2d3dbf4260c01b613b0b565b5b5b6140ac676f5dbd21c9125cd860c01b613b0b565b5a8503870196506140c7679a948bc5f171402a60c01b613b0b565b81870295506140e06710d5f3f58edb5dd060c01b613b0b565b6140f46725c8ddccd2a1e2a260c01b613b0b565b858960400151101561416557614114673818924813f43e5260c01b613b0b565b6141286792b7decf890025c960c01b613b0b565b8a6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161415c91906196a6565b60405180910390fd5b614179674e6856a4e466aef260c01b613b0b565b61418d67d6c35d57572b966260c01b613b0b565b6141a1676f729716f62a808760c01b613b0b565b6000868a604001510390506141c0676d15de463b359f1c60c01b613b0b565b6141d46771b7ab82d62d097e60c01b613b0b565b6141de8582613933565b6141f16679db7ebbddfe4460c01b613b0b565b61420567e86c122c2992c0e560c01b613b0b565b600080600281111561421a57614219619370565b5b8c600281111561422d5761422c619370565b5b149050614244677efc529e88ddb75560c01b613b0b565b61425867c9be395154365aea60c01b613b0b565b8460a0015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f6040516142cc94939291906196d4565b60405180910390a45050505050505095945050505050565b6000806142fb67d34039aa0eb98c0960c01b613b0b565b61430f67a2181ff15855e33660c01b613b0b565b614323674f71979477c58c0260c01b613b0b565b60005a905061433c674f3e95a6ed4f6b5c60c01b613b0b565b614350671548a9d28bcff14b60c01b613b0b565b60008460000151905061436d67c9be5937a3943cc660c01b613b0b565b6143816758083866582be81060c01b613b0b565b61438b868261587c565b61439f67acd417f7c00b05ee60c01b613b0b565b6143a886612726565b8560200181815250506143c567afe5ef3d1d5b4e1a60c01b613b0b565b6143d9674f702fee37dcbfb160c01b613b0b565b60008661010001358760e0013583604001518460600151856080015117171717905061440f67e8d5a024d52514cb60c01b613b0b565b6144236770f91e936fc96c3b60c01b613b0b565b614437671f7dbd98090f551c60c01b613b0b565b6effffffffffffffffffffffffffffff801681111561448b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448290619765565b60405180910390fd5b61449f679f62e1c6356d897e60c01b613b0b565b6144b367c4e70ab68d1a143960c01b613b0b565b6144c767c024a9b41cfafa7b60c01b613b0b565b60006144dd673d278ceaae9da29260c01b613b0b565b6144f167eeebf912e8fa4d4560c01b613b0b565b60006144fc84615bb4565b905061451267944a669b823630a660c01b613b0b565b61451e8a8a8a84615ce9565b809850819350505061453a672778705697a3977f60c01b613b0b565b61454e67e32c1dea5c52d0a260c01b613b0b565b6145566155a4565b61456a673f4c9e91048b950d60c01b613b0b565b61457e67e926034c4f53607360c01b613b0b565b6060614594670ea6529725653f1e60c01b613b0b565b6145a867955e6f66cb6400b660c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168560a0015173ffffffffffffffffffffffffffffffffffffffff1614614622576145f467ad071a44a92945a760c01b613b0b565b61460867a4cf53b3e8c9c3d460c01b613b0b565b6146158b8b8b85876163b0565b8098508192505050614637565b614636675108d43cde40cef460c01b613b0b565b5b61464b67b6ced13152ad086660c01b613b0b565b61465f67374f6f1e5358cd8f60c01b613b0b565b614673670652c7dd31993eb260c01b613b0b565b60005a8703905061468e678787f1dfcb14d78160c01b613b0b565b6146a2674fff11e75095ecf760c01b613b0b565b808b60a001351015614713576146c267b6ad64f0ab06bd8360c01b613b0b565b6146d6677e3c403c9d7eebd760c01b613b0b565b8b6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161470a91906197d1565b60405180910390fd5b61472767486710f8ebff249e60c01b613b0b565b61473b67472da05a38066eaa60c01b613b0b565b828a60400181815250506147596773e329a6db5ba88360c01b613b0b565b614762826168c7565b8a606001818152505061477f672ecdde0ebb1f8ef960c01b613b0b565b8a60c001355a8803018a608001818152505050505050505050935093915050565b6147b4674d137f3badf8ea9660c01b613b0b565b6147c8676fa0d92ceccb5a2a60c01b613b0b565b6147dc673b2714f3b47d62dc60c01b613b0b565b6000806147e8856168f9565b91509150614800673e1b0c9df74a838f60c01b613b0b565b614814674284769e521acdfe60c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146148ac5761485b67999d03d25266223d60c01b613b0b565b61486f67160271be6e43056060c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016148a3919061984b565b60405180910390fd5b6148c06746288d5b7730fc0f60c01b613b0b565b6148d4670621ff31260af8f860c01b613b0b565b6148e8673f71452c68a3856f60c01b613b0b565b80156149535761490267e32f67b676bbc2c860c01b613b0b565b61491667efa3849e8647f22b60c01b613b0b565b856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161494a91906198c5565b60405180910390fd5b6149676775e74b25646337da60c01b613b0b565b61497b673041f334f105bbcc60c01b613b0b565b61498f6772a50700a0abbcec60c01b613b0b565b60006149a5672fd487ba5e39b45e60c01b613b0b565b6149ae856168f9565b80935081925050506149ca6748ccb3962c4b88e260c01b613b0b565b6149de673a59b5d47e6b315b60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614a7757614a266796027ee26ef1bdd160c01b613b0b565b614a3a672377b5c640dca54460c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614a6e919061993f565b60405180910390fd5b614a8b6720c4adeca4b97c2f60c01b613b0b565b614a9f675a62abfc40a7be0f60c01b613b0b565b614ab367bb216ff411c11cd660c01b613b0b565b8115614b1e57614acd67c507a302a88d010a60c01b613b0b565b614ae16753c5dc6542460b6c60c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614b1591906199df565b60405180910390fd5b614b326719adbd2e485c39ed60c01b613b0b565b50505050505050565b6000614b51670528304b9a4e276660c01b613b0b565b614b65671dc140e2ccab3fd260c01b613b0b565b614b7967b1fb421bdae9b06560c01b613b0b565b60005a9050614b926773c737e49b0ea73f60c01b613b0b565b614ba667bbe717af0b97d78660c01b613b0b565b6000614bb584606001516156f4565b9050614bcb670b031524c09bd43560c01b613b0b565b614bdf67dd83a019dc10b8a760c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff16631d732756868060600190614c0b9190618644565b87856040518563ffffffff1660e01b8152600401614c2c9493929190619b2b565b6020604051808303816000875af1925050508015614c6857506040513d601f19601f82011682018060405250810190614c659190619b89565b60015b614def57614c8067ee73b3f231df63cd60c01b613b0b565b614c94673df6104dd8c6a59f60c01b613b0b565b6000614caa67b6b64d39ea0f734160c01b613b0b565b60206000803e6000519050614cc967766ce98d80aa790960c01b613b0b565b614cdd677458a05b861c89c760c01b613b0b565b7fdeaddead000000000000000000000000000000000000000000000000000000008103614d6957614d1867b9a9e7f3da56988660c01b613b0b565b614d2c67156d16e5b508173660c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614d609190619c02565b60405180910390fd5b614d7d673ee36b6cc848591160c01b613b0b565b614d9167353fe0d2f8fbd62460c01b613b0b565b614da56778239086464ad93560c01b613b0b565b600085608001515a85614db8919061837e565b614dc2919061802a565b9050614dd8671f888209a792f39360c01b613b0b565b614de6886002888685613ba7565b94505050614e08565b614e0367ae9ba21330eb831060c01b613b0b565b809350505b50509392505050565b614e2567ce4eaf1e3ecebc0a60c01b613b0b565b614e39678e806c1eb151833360c01b613b0b565b614e4d671b9353e0132c568860c01b613b0b565b614e61674f109bdea6b6dd4060c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ec790619c7c565b60405180910390fd5b614ee46786cdbf06ae0d6c9960c01b613b0b565b614ef8679a4fd059eeb243bf60c01b613b0b565b614f0c6755929728ee06af6e60c01b613b0b565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051614f3290618461565b60006040518083038185875af1925050503d8060008114614f6f576040519150601f19603f3d011682016040523d82523d6000602084013e614f74565b606091505b50509050614f8c672c7ae608d7ee218660c01b613b0b565b614fa067632c47631756cf7960c01b613b0b565b614fb467fa7aba00a44115ad60c01b613b0b565b80614ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614feb90619ce8565b60405180910390fd5b61500867c324c947c6690a3760c01b613b0b565b505050565b6000615023676ef62f88472d66ea60c01b616a2e565b61503767b557b889e8f81d6f60c01b616a2e565b61504b67656ff2fa1b6bb2b760c01b616a2e565b61505482616a31565b805190602001209050919050565b6150766726d7141481ab323560c01b613b0b565b61508a676e07210c39e4486260c01b613b0b565b61509e67a5955441815976cb60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff1663957122ab8280604001906150ca9190618644565b8460000160208101906150dd9190617ad2565b858061012001906150ee9190618644565b6040518663ffffffff1660e01b815260040161510e959493929190619d08565b60006040518083038186803b15801561512657600080fd5b505afa925050508015615137575060015b61522657615143619432565b806308c379a0036152155750615157619454565b806151625750615217565b615176678ad6c6220dff946760c01b613b0b565b61518a673edaf9b29bc58cfa60c01b613b0b565b60008151146151fb576151a76791345e2a34de5be160c01b613b0b565b6151bb6751e54c767bab910360c01b613b0b565b6000816040517f220266b60000000000000000000000000000000000000000000000000000000081526004016151f2929190619d8c565b60405180910390fd5b61520f67936ff6bb34bef0d560c01b613b0b565b50615221565b505b3d6000803e3d6000fd5b615227565b5b50565b615232617327565b61524667e69f7455fa7a07b360c01b616ac3565b61525a67b4cd7af03ea2c5fa60c01b616ac3565b61526e67ada53efb1dfccb7760c01b616ac3565b600061527984616ac6565b905061528f674d0f716f7bcb7b9260c01b616ac3565b6152a367d63d53a2153b304860c01b616ac3565b60006152ae84616ac6565b90506152c46722fc217c8bb3a21260c01b616ac3565b6152d867d43a06a00665043560c01b616ac3565b6000826000015190506152f567151bc2b1c770894460c01b616ac3565b6153096732841106c226c6e260c01b616ac3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361537157615351671aace643f445af3c60c01b616ac3565b61536567b767f16e441c791560c01b616ac3565b81600001519050615386565b6153856721f72ae527759e0160c01b616ac3565b5b61539a67976cb73ee93faf4060c01b616ac3565b6153ae67fbc1cf9b45ac9e0560c01b616ac3565b6000836020015190506153cb675ae02cf73427453160c01b616ac3565b6153df672f3e3d635ca3dee260c01b616ac3565b6000846040015190506153fc67d85c8bdd30a53c2060c01b616ac3565b61541067479ce7ff317d61d960c01b616ac3565b60008460200151905061542d6748cd0366f66a74d660c01b616ac3565b61544167233a1ba95415d76360c01b616ac3565b60008560400151905061545e67f891c3f91e3987cf60c01b616ac3565b61547267ee2ac2151246907660c01b616ac3565b8165ffffffffffff168465ffffffffffff1610156154a65761549e677765bdded08f417460c01b616ac3565b8193506154bb565b6154ba673db76e2382591bc460c01b616ac3565b5b6154cf67bbd9ea227d2e8b6160c01b616ac3565b6154e367269600f4d05d62c160c01b616ac3565b8065ffffffffffff168365ffffffffffff1611156155175761550f67769c64441515ae4760c01b616ac3565b80925061552c565b61552b6792508f8b38fce31860c01b616ac3565b5b61554067c4465d6321fbb3e560c01b616ac3565b61555467d764ee64c31d59fd60c01b616ac3565b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6155b867af03e0b4035ea55660c01b613b0b565b6155cc67c9620b9c790e33cb60c01b613b0b565b43600052565b6155da61730d565b6155ee67ddd75e05ea2d470b60c01b610422565b6156026714178d6d1eec377660c01b610422565b61561667ed0c0f5c0a4f897960c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061566c6796c6174e6db8a70c60c01b610422565b80600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168260000181815250506156b867a2474a1809029c6460c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff1682602001818152505050919050565b600060019050919050565b6000919050565b606061570a678ccfdf63a27f24a160c01b613b0b565b61571e67ec4fc9a45c4cbeda60c01b613b0b565b819050919050565b50565b600061573f6723710d455cbd1fc260c01b613b0b565b615753678552644400882c5660c01b613b0b565b61576767acd0ff56e29caf5760c01b613b0b565b61577b6790173f487bf921c360c01b613b0b565b60008260c0015190506157986788011b89016c87e660c01b613b0b565b6157ac67eabe9d1df1872cb860c01b613b0b565b60008360e0015190506157c96780eabf868b5a2d7860c01b613b0b565b6157dd673a9f497be6de2ad960c01b613b0b565b80820361582a576157f8678e77373db57e0bad60c01b613b0b565b61580c67e9b1eb10be1bde8160c01b613b0b565b615820671cf2ad91872d569360c01b613b0b565b8192505050615877565b61583e67e69ed61328bcf05760c01b613b0b565b61585267f003812ff22f97f660c01b613b0b565b6158666780449873cf826ce860c01b613b0b565b61587282488301616c67565b925050505b919050565b6158906794398c88f005709f60c01b613b0b565b6158a4672b03b3419c14484c60c01b613b0b565b8160000160208101906158b79190617ad2565b816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506159026793d9e770a6faaa2f60c01b613b0b565b816020013581602001818152505061592467139dbe991306ae9c60c01b613b0b565b816080013581604001818152505061594667f0718aa2010e8b9560c01b613b0b565b8160a0013581606001818152505061596867ad45b8a29a93eeab60c01b613b0b565b8160c0013581608001818152505061598a67466bf6fad93902ac60c01b613b0b565b8160e001358160c00181815250506159ac672b132ec41befa5cd60c01b613b0b565b8161010001358160e00181815250506159cf67dd742c4ce53972e660c01b613b0b565b6159e36763014b2d1488f93260c01b613b0b565b366000838061012001906159f79190618644565b91509150615a0f676a2e7bfc8710069c60c01b613b0b565b615a236780511592895b61c960c01b613b0b565b6000828290501115615b4c57615a4367eb7fb348aa1ce84260c01b613b0b565b615a576744ab1d52d3a7326f60c01b613b0b565b615a6b675c26b2f94c28f87460c01b613b0b565b615a7f679001d1e1aa36379560c01b613b0b565b6014828290501015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd90619e08565b60405180910390fd5b615ada6790a6340ef2e7fe5560c01b613b0b565b615aee67d6fdc4d38c3f1d0a60c01b613b0b565b8181600090601492615b0293929190618b30565b90615b0d9190618baf565b60601c8360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050615bae565b615b606726722d51917cb4b860c01b613b0b565b615b7467b81fb2bb3b12cb4d60c01b613b0b565b60008360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50505050565b6000615bca67aad98d6154acdcd760c01b613b0b565b615bde67b73e465bf9e52b6160c01b613b0b565b615bf267f10067438ecb862a60c01b613b0b565b615c0667c4a4fe6ede678b5760c01b613b0b565b60008073ffffffffffffffffffffffffffffffffffffffff168360a0015173ffffffffffffffffffffffffffffffffffffffff1614158015615c585750615c5767d835fc68629f38cd60c01b6156e2565b5b80615c735750615c7267117b2d6966bdaf0160c01b6156ed565b5b615c7e576001615c81565b60035b60ff169050615c9a67700816a1e3bb6d7060c01b613b0b565b615cae6744c1d1938606be1b60c01b613b0b565b6000836080015182856060015102856040015101019050615cd9671f763ace8f3bd88260c01b613b0b565b8360c00151810292505050919050565b600080615d0067d4e9699b2987ab0760c01b613b0b565b615d14675d8d1e834eef448f60c01b613b0b565b615d28672a8009d8c4675d0060c01b613b0b565b615d3c67d1a16c3013ed626460c01b613b0b565b60005a9050615d55672177cad0712c948960c01b613b0b565b615d6967df910ae4468fb24e60c01b613b0b565b600085600001519050615d8667c0879bee2d658afa60c01b613b0b565b615d9a67feb8ebb8a16f14c160c01b613b0b565b600081600001519050615db7670f5581ebd890213060c01b613b0b565b615dcb67f731688142019ef360c01b613b0b565b615de589888a8060400190615de09190618644565b616cf3565b615df967716d94d66ad0a57c60c01b613b0b565b615e0d671a28f26b5f8bf60360c01b613b0b565b60008260a001519050615e2a6729383920594cbefd60c01b613b0b565b615e3e67a10f5e1e6e0cc5f160c01b613b0b565b615e466155a4565b615e5a6733ca9099d32a694360c01b613b0b565b615e6e67356738e8d94640f260c01b613b0b565b6000615e8467f63877a5811722d860c01b613b0b565b615e9867b3c691595510b94960c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603615f7a57615ee067ce50778bc4ab94f860c01b613b0b565b615ef4678727f7e2a4b5b24960c01b613b0b565b615f0867dd1f12ecfec9826660c01b613b0b565b6000615f1384612293565b9050615f29676f78bed3432c062760c01b613b0b565b8881118015615f485750615f476749348aa66d657c5460c01b6156e2565b5b80615f635750615f6267e1b4631d968b658a60c01b6156ed565b5b615f6f57808903615f72565b60005b915050615f8f565b615f8e67277fbdb87062126f60c01b613b0b565b5b615fa3679b9f439e0fe1fd8760c01b613b0b565b615fb7676295b15d043a50e760c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff16633a871cdd85606001518c8c60200151856040518563ffffffff1660e01b8152600401615ffd93929190619f8c565b60206040518083038160008887f19350505050801561603a57506040513d601f19601f820116820180604052508101906160379190619b89565b60015b61612a57616046619432565b806308c379a0036160d7575061605a619454565b8061606557506160d9565b61607967af349b3257cee67a60c01b613b0b565b8b8160405160200161608b9190619ff0565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016160ce9291906195b0565b60405180910390fd5b505b6160ed6749f99c326384549e60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616121919061a062565b60405180910390fd5b61613e67b542a0d7e71e5c8c60c01b613b0b565b8096505061615667a32d24326b1c513a60c01b613b0b565b61616a673182b8e917179af560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603616374576161b267d40966d106ca1f5760c01b613b0b565b6161c667571f1ba350ae084a60c01b613b0b565b6161da670b792efad629a34560c01b613b0b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050616230670aab76fae7ce329860c01b613b0b565b616244674898c4c8721c6a3360c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061628b67939153321635a50460c01b613b0b565b61629f67ba578c349170678360c01b613b0b565b808a111561630c576162bb67888110dcc13924a960c01b613b0b565b6162cf678ba8141c00e1655b60c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616303919061a0dc565b60405180910390fd5b61632067b6199e7bfd865bf760c01b613b0b565b616334676cb4afd9c3644be460c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050616389565b6163886707bc50531c774ab760c01b613b0b565b5b61639d67171a32dcde207a7560c01b613b0b565b5a85039650505050505094509492505050565b606060006163c8675abf7e4ac0e494db60c01b613b0b565b6163dc67aa1a5efdea46787f60c01b613b0b565b6163f067c3a27ebce7e1f4d560c01b613b0b565b616404674ba0c76546e38a7360c01b613b0b565b60008560000151905061642167f6d1634a9dbac5d560c01b613b0b565b616435676826ba9160765dfd60c01b613b0b565b600081606001519050616452671294154b32167c9760c01b613b0b565b616466672e05d8ba9e541b5860c01b613b0b565b61647a67f25cf8fae769115960c01b613b0b565b8481116164bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016164b39061a156565b60405180910390fd5b6164d06762aeaad29e31b57660c01b613b0b565b6164e467aeda739beecf882b60c01b613b0b565b6164f8678c0a9d287bf901aa60c01b613b0b565b6000858203905061651367ab13dece76541fa960c01b613b0b565b6165276703242ac27d96239460c01b613b0b565b60008360a00151905061654467e064ed7711e4f44160c01b613b0b565b61655867bb123bccc54e13cc60c01b613b0b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506165ae6731703428f7c074ed60c01b613b0b565b6165c267ac6c000120bac21a60c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061660967af23c4bd6be76ee060c01b613b0b565b61661d67cd839a6f0c36e7ba60c01b613b0b565b8981101561668a5761663967d2cc586f1fba6ede60c01b613b0b565b61664d671630900ed293652460c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616681919061a1c2565b60405180910390fd5b61669e677b787fd8d0eec8fc60c01b613b0b565b6166b2677965fa12a09ffed060c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506166ff67c9536eaa4d6b721b60c01b613b0b565b616713673f97a3760e8e42d560c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1663f465c77e858e8e602001518e6040518563ffffffff1660e01b815260040161675593929190619f8c565b60006040518083038160008887f19350505050801561679757506040513d6000823e3d601f19601f82011682018060405250810190616794919061a260565b60015b616887576167a3619432565b806308c379a00361683457506167b7619454565b806167c25750616836565b6167d667c38841f5bb426dc460c01b613b0b565b8d816040516020016167e8919061a2e2565b6040516020818303038152906040526040517f220266b600000000000000000000000000000000000000000000000000000000815260040161682b9291906195b0565b60405180910390fd5b505b61684a67931a78f9e11717bb60c01b613b0b565b8c6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161687e919061a354565b60405180910390fd5b61689b67d768037340671b7260c01b613b0b565b8199506168b267b051c398d37aeff560c01b613b0b565b80985050505050505050509550959350505050565b60006168dd6707014686f499504560c01b613b0b565b6168f16796709f10a759b60c60c01b613b0b565b819050919050565b600080616910674a13673f083cae7d60c01b613b0b565b616924674b63ab113bc3c6f460c01b613b0b565b616938672ffe021986d2217f60c01b613b0b565b600083036169885761695467d14111b5c0dc71b060c01b613b0b565b61696867717cc1608b786d6060c01b613b0b565b61697c676bcd67da856e0d2b60c01b613b0b565b60008091509150616a29565b61699c6728b87be4bd233a0860c01b613b0b565b6169b0675f83ae33b5d720b960c01b613b0b565b6169c467afa51eaba4ada43360c01b613b0b565b60006169cf84616ac6565b90506169e5677f2983a6aeb6e19c60c01b613b0b565b806040015165ffffffffffff16421180616a0a5750806020015165ffffffffffff1642105b9150616a2067c7bf9050789fae5e60c01b613b0b565b80600001519250505b915091565b50565b6060616a47670dec2dbb958a50d860c01b616a2e565b616a5b67f7ebcbf78dfbd2e760c01b616a2e565b616a6f67cf9d9e801922f74560c01b616a2e565b36600083806101400190616a839190618644565b91509150616a9b670c9fe5e21e8be86a60c01b616a2e565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b50565b616ace617327565b616ae267445255dfc48f0c1160c01b616ac3565b616af667910e9ceb2fd1ddda60c01b616ac3565b616b0a678110ad95ab238bef60c01b616ac3565b6000829050616b2367c37597af64d819b260c01b616ac3565b616b3767745df2de1e3ff8c060c01b616ac3565b600060a084901c9050616b54675f3ae0fbd8e35c5660c01b616ac3565b616b68679197384898b1248760c01b616ac3565b60008165ffffffffffff1603616bae57616b8c676ec2d105430e80aa60c01b616ac3565b616ba0673b4825f59f411ff360c01b616ac3565b65ffffffffffff9050616bc3565b616bc267d11e3810d26f91af60c01b616ac3565b5b616bd767b9e858fecf1822cf60c01b616ac3565b616beb67d84bfe2ecd699a3c60c01b616ac3565b600060d085901c9050616c0867bf26ab64782cc21560c01b616ac3565b616c1c6716b05318dd950b3260c01b616ac3565b60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b6000616c7d6722175c0f9d46245a60c01b613b0b565b616c9167751619bcb02f97fd60c01b613b0b565b616ca567a2f19de15cde753c60c01b613b0b565b8183108015616cc45750616cc3677ff3f31aa240539460c01b6156e2565b5b80616cdf5750616cde67a156eae91ca1679a60c01b6156ed565b5b616ce95781616ceb565b825b905092915050565b616d076714b81b82e0d404e260c01b613b0b565b616d1b67ad5b2c067f5370fa60c01b613b0b565b616d2f67cb8395f833ee94b360c01b613b0b565b6000828290501461725b57616d4e673d934ef1a627c4d660c01b613b0b565b616d6267b1c545fef9fce3e760c01b613b0b565b616d7667ee209361e09d4b3060c01b613b0b565b60008360000151600001519050616d9767e453fe3e3c27ec0960c01b613b0b565b616dab67b335d211cfd6199a60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b14616e2f57616dde67d17238321e17c45860c01b613b0b565b616df2675da8a164ebc30e0260c01b613b0b565b846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616e26919061a3ce565b60405180910390fd5b616e43673be16346b366dcea60c01b613b0b565b616e5767d1050ad5ac855c1060c01b613b0b565b616e6b67516cdd3b5eb6451f60c01b613b0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516060015186866040518463ffffffff1660e01b8152600401616ed1929190618cbd565b60206040518083038160008887f1158015616ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190616f159190618cf6565b9050616f2b679ddc0b7480cf28f060c01b613b0b565b616f3f67fc851e2e35e3d69c60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603616fd857616f87671705c928229b781960c01b613b0b565b616f9b6742acc096bd718a9060c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616fcf919061a448565b60405180910390fd5b616fec67ee2c1185c379a99b60c01b613b0b565b617000677b2608bd6112326460c01b613b0b565b6170146727a18a42769c8c7660c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146170ac5761705b67fd1907cc849a07c260c01b613b0b565b61706f673adcce53dd1d53dc60c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016170a3919061a4c2565b60405180910390fd5b6170c0679cbade85ccd08c4860c01b613b0b565b6170d467613cfc3cdff81b5c60c01b613b0b565b6170e867a824c7345ac3349d60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361716c5761711b672c8b8acf7bac64f660c01b613b0b565b61712f676f72c43fa57e965a60c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401617163919061a53c565b60405180910390fd5b61718067b6e6772723fa2a5660c01b613b0b565b6171946734b6cd6bbc43764260c01b613b0b565b6171a86725edc697080da99960c01b613b0b565b600084846000906014926171be93929190618b30565b906171c99190618baf565b60601c90506171e2671ddd5ee48b1a7f4660c01b613b0b565b6171f667f1990a72ac6f6e5660c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a0015160405161724b92919061a56a565b60405180910390a3505050617270565b61726f678620bc314972512460c01b613b0b565b5b50505050565b6040518060a0016040528061728961736e565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160001515815260200160006dffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600065ffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b61740c816173f3565b811461741757600080fd5b50565b60008135905061742981617403565b92915050565b600060208284031215617445576174446173e9565b5b60006174538482850161741a565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6174af82617466565b810181811067ffffffffffffffff821117156174ce576174cd617477565b5b80604052505050565b60006174e16173df565b90506174ed82826174a6565b919050565b600067ffffffffffffffff82111561750d5761750c617477565b5b61751682617466565b9050602081019050919050565b82818337600083830152505050565b6000617545617540846174f2565b6174d7565b90508281526020810184848401111561756157617560617461565b5b61756c848285617523565b509392505050565b600082601f8301126175895761758861745c565b5b8135617599848260208601617532565b91505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006175d2826175a7565b9050919050565b6175e2816175c7565b81146175ed57600080fd5b50565b6000813590506175ff816175d9565b92915050565b6000819050919050565b61761881617605565b811461762357600080fd5b50565b6000813590506176358161760f565b92915050565b60006101008284031215617652576176516175a2565b5b61765d6101006174d7565b9050600061766d848285016175f0565b600083015250602061768184828501617626565b602083015250604061769584828501617626565b60408301525060606176a984828501617626565b60608301525060806176bd84828501617626565b60808301525060a06176d1848285016175f0565b60a08301525060c06176e584828501617626565b60c08301525060e06176f984828501617626565b60e08301525092915050565b6000819050919050565b61771881617705565b811461772357600080fd5b50565b6000813590506177358161770f565b92915050565b60006101808284031215617752576177516175a2565b5b61775c60a06174d7565b9050600061776c8482850161763b565b60008301525061010061778184828501617726565b60208301525061012061779684828501617626565b6040830152506101406177ab84828501617626565b6060830152506101606177c084828501617626565b60808301525092915050565b600080fd5b600080fd5b60008083601f8401126177ec576177eb61745c565b5b8235905067ffffffffffffffff811115617809576178086177cc565b5b602083019150836001820283011115617825576178246177d1565b5b9250929050565b6000806000806101c08587031215617847576178466173e9565b5b600085013567ffffffffffffffff811115617865576178646173ee565b5b61787187828801617574565b94505060206178828782880161773b565b9350506101a085013567ffffffffffffffff8111156178a4576178a36173ee565b5b6178b0878288016177d6565b925092505092959194509250565b6178c781617605565b82525050565b60006020820190506178e260008301846178be565b92915050565b60008083601f8401126178fe576178fd61745c565b5b8235905067ffffffffffffffff81111561791b5761791a6177cc565b5b602083019150836020820283011115617937576179366177d1565b5b9250929050565b6000617949826175a7565b9050919050565b6179598161793e565b811461796457600080fd5b50565b60008135905061797681617950565b92915050565b600080600060408486031215617995576179946173e9565b5b600084013567ffffffffffffffff8111156179b3576179b26173ee565b5b6179bf868287016178e8565b935093505060206179d286828701617967565b9150509250925092565b600080604083850312156179f3576179f26173e9565b5b6000617a0185828601617967565b9250506020617a1285828601617626565b9150509250929050565b60008083601f840112617a3257617a3161745c565b5b8235905067ffffffffffffffff811115617a4f57617a4e6177cc565b5b602083019150836020820283011115617a6b57617a6a6177d1565b5b9250929050565b600080600060408486031215617a8b57617a8a6173e9565b5b600084013567ffffffffffffffff811115617aa957617aa86173ee565b5b617ab586828701617a1c565b93509350506020617ac886828701617967565b9150509250925092565b600060208284031215617ae857617ae76173e9565b5b6000617af6848285016175f0565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b617b2281617aff565b82525050565b60008115159050919050565b617b3d81617b28565b82525050565b617b4c816173f3565b82525050565b600065ffffffffffff82169050919050565b617b6d81617b52565b82525050565b60a082016000820151617b896000850182617b19565b506020820151617b9c6020850182617b34565b506040820151617baf6040850182617b19565b506060820151617bc26060850182617b43565b506080820151617bd56080850182617b64565b50505050565b600060a082019050617bf06000830184617b73565b92915050565b600080600080600060608688031215617c1257617c116173e9565b5b600086013567ffffffffffffffff811115617c3057617c2f6173ee565b5b617c3c888289016177d6565b95509550506020617c4f888289016175f0565b935050604086013567ffffffffffffffff811115617c7057617c6f6173ee565b5b617c7c888289016177d6565b92509250509295509295909350565b60008060208385031215617ca257617ca16173e9565b5b600083013567ffffffffffffffff811115617cc057617cbf6173ee565b5b617ccc858286016177d6565b92509250509250929050565b600080fd5b60006101608284031215617cf457617cf3617cd8565b5b81905092915050565b600060208284031215617d1357617d126173e9565b5b600082013567ffffffffffffffff811115617d3157617d306173ee565b5b617d3d84828501617cdd565b91505092915050565b617d4f81617705565b82525050565b6000602082019050617d6a6000830184617d46565b92915050565b600060208284031215617d8657617d856173e9565b5b6000617d9484828501617967565b91505092915050565b60008060008060608587031215617db757617db66173e9565b5b600085013567ffffffffffffffff811115617dd557617dd46173ee565b5b617de187828801617cdd565b9450506020617df2878288016175f0565b935050604085013567ffffffffffffffff811115617e1357617e126173ee565b5b617e1f878288016177d6565b925092505092959194509250565b617e3681617aff565b82525050565b617e4581617b28565b82525050565b617e54816173f3565b82525050565b617e6381617b52565b82525050565b600060a082019050617e7e6000830188617e2d565b617e8b6020830187617e3c565b617e986040830186617e2d565b617ea56060830185617e4b565b617eb26080830184617e5a565b9695505050505050565b6000819050919050565b6000617ee1617edc617ed784617aff565b617ebc565b617605565b9050919050565b617ef181617ec6565b82525050565b6000602082019050617f0c6000830184617ee8565b92915050565b600082825260208201905092915050565b7f6d757374207370656369667920756e7374616b652064656c6179000000000000600082015250565b6000617f59601a83617f12565b9150617f6482617f23565b602082019050919050565b60006020820190508181036000830152617f8881617f4c565b9050919050565b7f63616e6e6f7420646563726561736520756e7374616b652074696d6500000000600082015250565b6000617fc5601c83617f12565b9150617fd082617f8f565b602082019050919050565b60006020820190508181036000830152617ff481617fb8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061803582617605565b915061804083617605565b925082820190508082111561805857618057617ffb565b5b92915050565b7f6e6f207374616b65207370656369666965640000000000000000000000000000600082015250565b6000618094601283617f12565b915061809f8261805e565b602082019050919050565b600060208201905081810360008301526180c381618087565b9050919050565b7f7374616b65206f766572666c6f77000000000000000000000000000000000000600082015250565b6000618100600e83617f12565b915061810b826180ca565b602082019050919050565b6000602082019050818103600083015261812f816180f3565b9050919050565b600061815161814c618147846173f3565b617ebc565b617605565b9050919050565b61816181618136565b82525050565b600060408201905061817c60008301856178be565b6181896020830184618158565b9392505050565b7f4141393220696e7465726e616c2063616c6c206f6e6c79000000000000000000600082015250565b60006181c6601783617f12565b91506181d182618190565b602082019050919050565b600060208201905081810360008301526181f5816181b9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561823657808201518184015260208101905061821b565b60008484015250505050565b600061824d826181fc565b6182578185618207565b9350618267818560208601618218565b61827081617466565b840191505092915050565b600060408201905061829060008301856178be565b81810360208301526182a28184618242565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112618306576183056182da565b5b80830191505092915050565b7f576974686472617720616d6f756e7420746f6f206c6172676500000000000000600082015250565b6000618348601983617f12565b915061835382618312565b602082019050919050565b600060208201905081810360008301526183778161833b565b9050919050565b600061838982617605565b915061839483617605565b92508282039050818111156183ac576183ab617ffb565b5b92915050565b60006183cd6183c86183c3846175a7565b617ebc565b6175a7565b9050919050565b60006183df826183b2565b9050919050565b60006183f1826183d4565b9050919050565b618401816183e6565b82525050565b600060408201905061841c60008301856183f8565b61842960208301846178be565b9392505050565b600081905092915050565b50565b600061844b600083618430565b91506184568261843b565b600082019050919050565b600061846c8261843e565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006184ac601283617f12565b91506184b782618476565b602082019050919050565b600060208201905081810360008301526184db8161849f565b9050919050565b6000823560016060038336030381126184fe576184fd6182da565b5b80830191505092915050565b60008083356001602003843603038112618527576185266182da565b5b80840192508235915067ffffffffffffffff821115618549576185486182df565b5b602083019250602082023603831315618565576185646182e4565b5b509250929050565b6000618578826175c7565b9050919050565b6185888161856d565b811461859357600080fd5b50565b6000813590506185a58161857f565b92915050565b6000602082840312156185c1576185c06173e9565b5b60006185cf84828501618596565b91505092915050565b7f4141393620696e76616c69642061676772656761746f72000000000000000000600082015250565b600061860e601783617f12565b9150618619826185d8565b602082019050919050565b6000602082019050818103600083015261863d81618601565b9050919050565b60008083356001602003843603038112618661576186606182da565b5b80840192508235915067ffffffffffffffff821115618683576186826182df565b5b60208301925060018202360383131561869f5761869e6182e4565b5b509250929050565b600082825260208201905092915050565b6000819050919050565b60006186d160208401846175f0565b905092915050565b6186e2816175c7565b82525050565b60006186f76020840184617626565b905092915050565b61870881617605565b82525050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261873a57618739618718565b5b83810192508235915060208301925067ffffffffffffffff8211156187625761876161870e565b5b60018202360383131561877857618777618713565b5b509250929050565b600082825260208201905092915050565b600061879d8385618780565b93506187aa838584617523565b6187b383617466565b840190509392505050565b600061016083016187d260008401846186c2565b6187df60008601826186d9565b506187ed60208401846186e8565b6187fa60208601826186ff565b50618808604084018461871d565b858303604087015261881b838284618791565b9250505061882c606084018461871d565b858303606087015261883f838284618791565b9250505061885060808401846186e8565b61885d60808601826186ff565b5061886b60a08401846186e8565b61887860a08601826186ff565b5061888660c08401846186e8565b61889360c08601826186ff565b506188a160e08401846186e8565b6188ae60e08601826186ff565b506188bd6101008401846186e8565b6188cb6101008601826186ff565b506188da61012084018461871d565b8583036101208701526188ee838284618791565b9250505061890061014084018461871d565b858303610140870152618914838284618791565b925050508091505092915050565b600061892e83836187be565b905092915050565b6000823560016101600383360303811261895357618952618718565b5b82810191505092915050565b6000602082019050919050565b600061897883856186a7565b93508360208402850161898a846186b8565b8060005b878110156189ce5784840389526189a58284618936565b6189af8582618922565b94506189ba8361895f565b925060208a0199505060018101905061898e565b50829750879450505050509392505050565b60006189ec8385618207565b93506189f9838584617523565b618a0283617466565b840190509392505050565b60006040820190508181036000830152618a2881868861896c565b90508181036020830152618a3d8184866189e0565b905095945050505050565b618a51816175c7565b82525050565b6000602082019050618a6c6000830184618a48565b92915050565b6000618a7d82617605565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203618aaf57618aae617ffb565b5b600182019050919050565b7f41413230206163636f756e74206e6f74206465706c6f79656400000000000000600082015250565b6000618af0601983617f12565b9150618afb82618aba565b602082019050919050565b60006020820190508181036000830152618b1f81618ae3565b9050919050565b600080fd5b600080fd5b60008085851115618b4457618b43618b26565b5b83861115618b5557618b54618b2b565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000618bbb8383618b6b565b82618bc68135618b76565b92506014821015618c0657618c017fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802618ba2565b831692505b505092915050565b7f41413330207061796d6173746572206e6f74206465706c6f7965640000000000600082015250565b6000618c44601b83617f12565b9150618c4f82618c0e565b602082019050919050565b60006020820190508181036000830152618c7381618c37565b9050919050565b6000618c87600083617f12565b9150618c928261843b565b600082019050919050565b60006020820190508181036000830152618cb681618c7a565b9050919050565b60006020820190508181036000830152618cd88184866189e0565b90509392505050565b600081519050618cf0816175d9565b92915050565b600060208284031215618d0c57618d0b6173e9565b5b6000618d1a84828501618ce1565b91505092915050565b6000606082019050618d386000830186617d46565b618d456020830185618a48565b618d5260408301846178be565b949350505050565b7f6e6f74207374616b656400000000000000000000000000000000000000000000600082015250565b6000618d90600a83617f12565b9150618d9b82618d5a565b602082019050919050565b60006020820190508181036000830152618dbf81618d83565b9050919050565b7f616c726561647920756e7374616b696e67000000000000000000000000000000600082015250565b6000618dfc601183617f12565b9150618e0782618dc6565b602082019050919050565b60006020820190508181036000830152618e2b81618def565b9050919050565b6000618e3d82617b52565b9150618e4883617b52565b9250828201905065ffffffffffff811115618e6657618e65617ffb565b5b92915050565b6000618e87618e82618e7d84617b52565b617ebc565b617605565b9050919050565b618e9781618e6c565b82525050565b6000602082019050618eb26000830184618e8e565b92915050565b7f4e6f207374616b6520746f207769746864726177000000000000000000000000600082015250565b6000618eee601483617f12565b9150618ef982618eb8565b602082019050919050565b60006020820190508181036000830152618f1d81618ee1565b9050919050565b7f6d7573742063616c6c20756e6c6f636b5374616b652829206669727374000000600082015250565b6000618f5a601d83617f12565b9150618f6582618f24565b602082019050919050565b60006020820190508181036000830152618f8981618f4d565b9050919050565b7f5374616b65207769746864726177616c206973206e6f74206475650000000000600082015250565b6000618fc6601b83617f12565b9150618fd182618f90565b602082019050919050565b60006020820190508181036000830152618ff581618fb9565b9050919050565b7f6661696c656420746f207769746864726177207374616b650000000000000000600082015250565b6000619032601883617f12565b915061903d82618ffc565b602082019050919050565b6000602082019050818103600083015261906181619025565b9050919050565b60006190748385618430565b9350619081838584617523565b82840190509392505050565b600061909a828486619068565b91508190509392505050565b600060c0820190506190bb60008301896178be565b6190c860208301886178be565b6190d56040830187617e5a565b6190e26060830186617e5a565b6190ef6080830185617e3c565b81810360a08301526191018184618242565b9050979650505050505050565b6000619119826181fc565b6191238185618780565b9350619133818560208601618218565b61913c81617466565b840191505092915050565b600060c08301600083015161915f60008601826186ff565b50602083015161917260208601826186ff565b5060408301516191856040860182617b34565b5060608301516191986060860182617b64565b5060808301516191ab6080860182617b64565b5060a083015184820360a08601526191c3828261910e565b9150508091505092915050565b6040820160008201516191e660008501826186ff565b5060208201516191f960208501826186ff565b50505050565b60408201600082015161921560008501826186ff565b50602082015161922860208501826186ff565b50505050565b60608201600082015161924460008501826186d9565b50602082015161925760208501826191ff565b50505050565b60006101408201905081810360008301526192788188619147565b905061928760208301876191d0565b61929460608301866191d0565b6192a160a08301856191d0565b6192ae60e083018461922e565b9695505050505050565b600060e08201905081810360008301526192d28187619147565b90506192e160208301866191d0565b6192ee60608301856191d0565b6192fb60a08301846191d0565b95945050505050565b7f6465706f736974206f766572666c6f7700000000000000000000000000000000600082015250565b600061933a601083617f12565b915061934582619304565b602082019050919050565b600060208201905081810360008301526193698161932d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106193b0576193af619370565b5b50565b60008190506193c18261939f565b919050565b60006193d1826193b3565b9050919050565b6193e1816193c6565b82525050565b60006060820190506193fc60008301866193d8565b818103602083015261940e8185618242565b905061941d60408301846178be565b949350505050565b60008160e01c9050919050565b600060033d11156194515760046000803e61944e600051619425565b90505b90565b600060443d106194e1576194666173df565b60043d036004823e80513d602482011167ffffffffffffffff8211171561948e5750506194e1565b808201805167ffffffffffffffff8111156194ac57505050506194e1565b80602083010160043d0385018111156194c95750505050506194e1565b6194d8826020018501866174a6565b82955050505050505b90565b7f4141353020706f73744f702072657665727465643a2000000000000000000000815250565b600081519050919050565b600081905092915050565b600061952b8261950a565b6195358185619515565b9350619545818560208601618218565b80840191505092915050565b600061955c826194e4565b60168201915061956c8284619520565b915081905092915050565b60006195828261950a565b61958c8185617f12565b935061959c818560208601618218565b6195a581617466565b840191505092915050565b60006040820190506195c560008301856178be565b81810360208301526195d78184619577565b90509392505050565b7f4141353020706f73744f70207265766572740000000000000000000000000000600082015250565b6000619616601283617f12565b9150619621826195e0565b602082019050919050565b600060408201905061964160008301846178be565b818103602083015261965281619609565b905092915050565b7f414135312070726566756e642062656c6f772061637475616c476173436f7374600082015250565b6000619690602083617f12565b915061969b8261965a565b602082019050919050565b60006040820190506196bb60008301846178be565b81810360208301526196cc81619683565b905092915050565b60006080820190506196e960008301876178be565b6196f66020830186617e3c565b61970360408301856178be565b61971060608301846178be565b95945050505050565b7f41413934206761732076616c756573206f766572666c6f770000000000000000600082015250565b600061974f601883617f12565b915061975a82619719565b602082019050919050565b6000602082019050818103600083015261977e81619742565b9050919050565b7f41413430206f76657220766572696669636174696f6e4761734c696d69740000600082015250565b60006197bb601e83617f12565b91506197c682619785565b602082019050919050565b60006040820190506197e660008301846178be565b81810360208301526197f7816197ae565b905092915050565b7f41413234207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619835601483617f12565b9150619840826197ff565b602082019050919050565b600060408201905061986060008301846178be565b818103602083015261987181619828565b905092915050565b7f414132322065787069726564206f72206e6f7420647565000000000000000000600082015250565b60006198af601783617f12565b91506198ba82619879565b602082019050919050565b60006040820190506198da60008301846178be565b81810360208301526198eb816198a2565b905092915050565b7f41413334207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619929601483617f12565b9150619934826198f3565b602082019050919050565b600060408201905061995460008301846178be565b81810360208301526199658161991c565b905092915050565b7f41413332207061796d61737465722065787069726564206f72206e6f7420647560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006199c9602183617f12565b91506199d48261996d565b604082019050919050565b60006040820190506199f460008301846178be565b8181036020830152619a05816199bc565b905092915050565b61010082016000820151619a2460008501826186d9565b506020820151619a3760208501826186ff565b506040820151619a4a60408501826186ff565b506060820151619a5d60608501826186ff565b506080820151619a7060808501826186ff565b5060a0820151619a8360a08501826186d9565b5060c0820151619a9660c08501826186ff565b5060e0820151619aa960e08501826186ff565b50505050565b619ab881617705565b82525050565b61018082016000820151619ad56000850182619a0d565b506020820151619ae9610100850182619aaf565b506040820151619afd6101208501826186ff565b506060820151619b116101408501826186ff565b506080820151619b256101608501826186ff565b50505050565b60006101c0820190508181036000830152619b478186886189e0565b9050619b566020830185619abe565b8181036101a0830152619b698184618242565b905095945050505050565b600081519050619b838161760f565b92915050565b600060208284031215619b9f57619b9e6173e9565b5b6000619bad84828501619b74565b91505092915050565b7f41413935206f7574206f66206761730000000000000000000000000000000000600082015250565b6000619bec600f83617f12565b9150619bf782619bb6565b602082019050919050565b6000604082019050619c1760008301846178be565b8181036020830152619c2881619bdf565b905092915050565b7f4141393020696e76616c69642062656e65666963696172790000000000000000600082015250565b6000619c66601883617f12565b9150619c7182619c30565b602082019050919050565b60006020820190508181036000830152619c9581619c59565b9050919050565b7f41413931206661696c65642073656e6420746f2062656e656669636961727900600082015250565b6000619cd2601f83617f12565b9150619cdd82619c9c565b602082019050919050565b60006020820190508181036000830152619d0181619cc5565b9050919050565b60006060820190508181036000830152619d238187896189e0565b9050619d326020830186618a48565b8181036040830152619d458184866189e0565b90509695505050505050565b6000819050919050565b6000619d76619d71619d6c84619d51565b617ebc565b617605565b9050919050565b619d8681619d5b565b82525050565b6000604082019050619da16000830185619d7d565b8181036020830152619db38184619577565b90509392505050565b7f4141393320696e76616c6964207061796d6173746572416e6444617461000000600082015250565b6000619df2601d83617f12565b9150619dfd82619dbc565b602082019050919050565b60006020820190508181036000830152619e2181619de5565b9050919050565b60006101608301619e3c60008401846186c2565b619e4960008601826186d9565b50619e5760208401846186e8565b619e6460208601826186ff565b50619e72604084018461871d565b8583036040870152619e85838284618791565b92505050619e96606084018461871d565b8583036060870152619ea9838284618791565b92505050619eba60808401846186e8565b619ec760808601826186ff565b50619ed560a08401846186e8565b619ee260a08601826186ff565b50619ef060c08401846186e8565b619efd60c08601826186ff565b50619f0b60e08401846186e8565b619f1860e08601826186ff565b50619f276101008401846186e8565b619f356101008601826186ff565b50619f4461012084018461871d565b858303610120870152619f58838284618791565b92505050619f6a61014084018461871d565b858303610140870152619f7e838284618791565b925050508091505092915050565b60006060820190508181036000830152619fa68186619e28565b9050619fb56020830185617d46565b619fc260408301846178be565b949350505050565b7f414132332072657665727465643a200000000000000000000000000000000000815250565b6000619ffb82619fca565b600f8201915061a00b8284619520565b915081905092915050565b7f4141323320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a04c601683617f12565b915061a0578261a016565b602082019050919050565b600060408201905061a07760008301846178be565b818103602083015261a0888161a03f565b905092915050565b7f41413231206469646e2774207061792070726566756e64000000000000000000600082015250565b600061a0c6601783617f12565b915061a0d18261a090565b602082019050919050565b600060408201905061a0f160008301846178be565b818103602083015261a1028161a0b9565b905092915050565b7f4141343120746f6f206c6974746c6520766572696669636174696f6e47617300600082015250565b600061a140601f83617f12565b915061a14b8261a10a565b602082019050919050565b6000602082019050818103600083015261a16f8161a133565b9050919050565b7f41413331207061796d6173746572206465706f73697420746f6f206c6f770000600082015250565b600061a1ac601e83617f12565b915061a1b78261a176565b602082019050919050565b600060408201905061a1d760008301846178be565b818103602083015261a1e88161a19f565b905092915050565b600061a20361a1fe846174f2565b6174d7565b90508281526020810184848401111561a21f5761a21e617461565b5b61a22a848285618218565b509392505050565b600082601f83011261a2475761a24661745c565b5b815161a25784826020860161a1f0565b91505092915050565b6000806040838503121561a2775761a2766173e9565b5b600083015167ffffffffffffffff81111561a2955761a2946173ee565b5b61a2a18582860161a232565b925050602061a2b285828601619b74565b9150509250929050565b7f414133332072657665727465643a200000000000000000000000000000000000815250565b600061a2ed8261a2bc565b600f8201915061a2fd8284619520565b915081905092915050565b7f4141333320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a33e601683617f12565b915061a3498261a308565b602082019050919050565b600060408201905061a36960008301846178be565b818103602083015261a37a8161a331565b905092915050565b7f414131302073656e64657220616c726561647920636f6e737472756374656400600082015250565b600061a3b8601f83617f12565b915061a3c38261a382565b602082019050919050565b600060408201905061a3e360008301846178be565b818103602083015261a3f48161a3ab565b905092915050565b7f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000600082015250565b600061a432601b83617f12565b915061a43d8261a3fc565b602082019050919050565b600060408201905061a45d60008301846178be565b818103602083015261a46e8161a425565b905092915050565b7f4141313420696e6974436f6465206d7573742072657475726e2073656e646572600082015250565b600061a4ac602083617f12565b915061a4b78261a476565b602082019050919050565b600060408201905061a4d760008301846178be565b818103602083015261a4e88161a49f565b905092915050565b7f4141313520696e6974436f6465206d757374206372656174652073656e646572600082015250565b600061a526602083617f12565b915061a5318261a4f0565b602082019050919050565b600060408201905061a55160008301846178be565b818103602083015261a5628161a519565b905092915050565b600060408201905061a57f6000830185618a48565b61a58c6020830184618a48565b939250505056fea26469706673582212206dae6a3dfee854481a79e705a7b23d488634e9bc0aefbf869b89869d4b5e7b1364736f6c63430008110033608060405234801561001057600080fd5b5061044f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a60048036038101906100459190610288565b610060565b6040516100579190610316565b60405180910390f35b600061007667a77071926199a6bc60c01b610216565b61008a6705db437c17f4c53160c01b610216565b61009e67f7e34fe0ef67d65660c01b610216565b600083836000906014926100b49392919061033b565b906100bf91906103ba565b60601c90506100d8679eee7b10c69e371260c01b610216565b6100ec67e915e597d60e618060c01b610216565b6000848460149080926101019392919061033b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905061015a6759fca45833adea5d60c01b610216565b61016e67d2f649902cd0246260c01b610216565b600061018467957e43ea595585a160c01b610216565b602060008351602085016000875af1905060005193506101ae67a96890a92414c3b460c01b610216565b6101c267936c0d2a6e83afc460c01b610216565b806101f8576101db67cf211eb43cb304cc60c01b610216565b6101ef67f8af295b41c5669760c01b610216565b6000935061020d565b61020c67bedaa80464ace1ed60c01b610216565b5b50505092915050565b50565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261024857610247610223565b5b8235905067ffffffffffffffff81111561026557610264610228565b5b6020830191508360018202830111156102815761028061022d565b5b9250929050565b6000806020838503121561029f5761029e610219565b5b600083013567ffffffffffffffff8111156102bd576102bc61021e565b5b6102c985828601610232565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610300826102d5565b9050919050565b610310816102f5565b82525050565b600060208201905061032b6000830184610307565b92915050565b600080fd5b600080fd5b6000808585111561034f5761034e610331565b5b838611156103605761035f610336565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006103c68383610376565b826103d18135610381565b925060148210156104115761040c7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026103ad565b831692505b50509291505056fea2646970667358221220222219afa35e7a9ea15a12342931ab42e032fb2f8ffc39aeda6c656ef722d50964736f6c63430008110033"; type EntryPointConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts b/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts index bbb796bc..10735541 100644 --- a/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts +++ b/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts @@ -32,7 +32,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50610342806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a6004803603810190610045919061017b565b610060565b6040516100579190610209565b60405180910390f35b60008083836000906014926100779392919061022e565b9061008291906102ad565b60601c905060008484601490809261009c9392919061022e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090506000602060008351602085016000875af1905060005193508061010357600093505b50505092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261013b5761013a610116565b5b8235905067ffffffffffffffff8111156101585761015761011b565b5b60208301915083600182028301111561017457610173610120565b5b9250929050565b600080602083850312156101925761019161010c565b5b600083013567ffffffffffffffff8111156101b0576101af610111565b5b6101bc85828601610125565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101f3826101c8565b9050919050565b610203816101e8565b82525050565b600060208201905061021e60008301846101fa565b92915050565b600080fd5b600080fd5b6000808585111561024257610241610224565b5b8386111561025357610252610229565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006102b98383610269565b826102c48135610274565b92506014821015610304576102ff7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026102a0565b831692505b50509291505056fea26469706673582212200778ef27a41453ce7330ffe38d46506a9cf0e8c19e33ee31a060d5426aef630464736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b5061044f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a60048036038101906100459190610288565b610060565b6040516100579190610316565b60405180910390f35b600061007667a77071926199a6bc60c01b610216565b61008a6705db437c17f4c53160c01b610216565b61009e67f7e34fe0ef67d65660c01b610216565b600083836000906014926100b49392919061033b565b906100bf91906103ba565b60601c90506100d8679eee7b10c69e371260c01b610216565b6100ec67e915e597d60e618060c01b610216565b6000848460149080926101019392919061033b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905061015a6759fca45833adea5d60c01b610216565b61016e67d2f649902cd0246260c01b610216565b600061018467957e43ea595585a160c01b610216565b602060008351602085016000875af1905060005193506101ae67a96890a92414c3b460c01b610216565b6101c267936c0d2a6e83afc460c01b610216565b806101f8576101db67cf211eb43cb304cc60c01b610216565b6101ef67f8af295b41c5669760c01b610216565b6000935061020d565b61020c67bedaa80464ace1ed60c01b610216565b5b50505092915050565b50565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261024857610247610223565b5b8235905067ffffffffffffffff81111561026557610264610228565b5b6020830191508360018202830111156102815761028061022d565b5b9250929050565b6000806020838503121561029f5761029e610219565b5b600083013567ffffffffffffffff8111156102bd576102bc61021e565b5b6102c985828601610232565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610300826102d5565b9050919050565b610310816102f5565b82525050565b600060208201905061032b6000830184610307565b92915050565b600080fd5b600080fd5b6000808585111561034f5761034e610331565b5b838611156103605761035f610336565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006103c68383610376565b826103d18135610381565b925060148210156104115761040c7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026103ad565b831692505b50509291505056fea2646970667358221220222219afa35e7a9ea15a12342931ab42e032fb2f8ffc39aeda6c656ef722d50964736f6c63430008110033"; type SenderCreatorConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/index.ts b/src/contracts/factories/src/aa-4337/index.ts index c4af0896..cd1e08e5 100644 --- a/src/contracts/factories/src/aa-4337/index.ts +++ b/src/contracts/factories/src/aa-4337/index.ts @@ -2,6 +2,7 @@ /* tslint:disable */ /* eslint-disable */ export * as bls from "./bls"; +export * as callback from "./callback"; export * as core from "./core"; export * as interfaces from "./interfaces"; export * as samples from "./samples"; diff --git a/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts index 1b411ee0..83e684ad 100644 --- a/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts @@ -456,7 +456,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620032fb380380620032fb833981810160405281019062000037919062000234565b80620000586200004c620000a460201b60201c565b620000ac60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200009d6200017060201b60201c565b5062000266565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001e882620001bb565b9050919050565b6000620001fc82620001db565b9050919050565b6200020e81620001ef565b81146200021a57600080fd5b50565b6000815190506200022e8162000203565b92915050565b6000602082840312156200024d576200024c620001b6565b5b60006200025d848285016200021d565b91505092915050565b608051613048620002b3600039600081816104c40152818161055b01528181610ace01528181610afa01528181610b8401528181610c3901528181610eaf01526111af01526130486000f3fe6080604052600436106101355760003560e01c8063addd5099116100ab578063c399ec881161006f578063c399ec88146103de578063cc9c837c14610409578063cd8f80c214610432578063d0e30db014610449578063f2fde38b14610453578063f465c77e1461047c57610135565b8063addd5099146102f9578063b0d691fe14610336578063bb9fe6bf14610361578063c23a5cea14610378578063c23f001f146103a157610135565b80635476bd72116100fd5780635476bd7214610223578063715018a61461024c578063796d4371146102635780638da5cb5b1461028e5780639ed0fb68146102b9578063a9a23409146102d057610135565b80630396cb601461013a578063205c287814610156578063382edd9e1461017f578063493b0170146101a85780634a6f84cf146101e6575b600080fd5b610154600480360381019061014f9190611bc2565b6104ba565b005b34801561016257600080fd5b5061017d60048036038101906101789190611c83565b610551565b005b34801561018b57600080fd5b506101a660048036038101906101a19190611d3f565b6105ea565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190611d92565b6107bb565b6040516101dd929190611de1565b60405180910390f35b3480156101f257600080fd5b5061020d60048036038101906102089190611e0a565b610886565b60405161021a9190611e37565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190611e90565b61089e565b005b34801561025857600080fd5b506102616109f6565b005b34801561026f57600080fd5b50610278610a0a565b6040516102859190611e37565b60405180910390f35b34801561029a57600080fd5b506102a3610a10565b6040516102b09190611edf565b60405180910390f35b3480156102c557600080fd5b506102ce610a39565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190611f84565b610a7f565b005b34801561030557600080fd5b50610320600480360381019061031b9190611ff8565b610a99565b60405161032d9190612084565b60405180910390f35b34801561034257600080fd5b5061034b610acc565b60405161035891906120c0565b60405180910390f35b34801561036d57600080fd5b50610376610af0565b005b34801561038457600080fd5b5061039f600480360381019061039a91906120db565b610b7a565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190611d92565b610c10565b6040516103d59190611e37565b60405180910390f35b3480156103ea57600080fd5b506103f3610c35565b6040516104009190611e37565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190611d3f565b610cd6565b005b34801561043e57600080fd5b50610447610e66565b005b610451610ead565b005b34801561045f57600080fd5b5061047a60048036038101906104759190611e0a565b610f3b565b005b34801561048857600080fd5b506104a3600480360381019061049e9190612163565b610fbf565b6040516104b192919061226b565b60405180910390f35b6104c2610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161051c91906122aa565b6000604051808303818588803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b505050505050565b610559610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016105b49291906122d4565b600060405180830381600087803b1580156105ce57600080fd5b505af11580156105e2573d6000803e3d6000fd5b505050505050565b6106173330838673ffffffffffffffffffffffffffffffffffffffff16611060909392919063ffffffff16565b600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd9061235a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461077291906123a9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156107b6576107b5610e66565b5b505050565b600080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b60036020528060005260406000206000915090505481565b6108a6610fe2565b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b9061244b565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6109fe610fe2565b610a0860006110e9565b565b6188b881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610a876111ad565b610a938484848461123d565b50505050565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610af8610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b6057600080fd5b505af1158015610b74573d6000803e3d6000fd5b50505050565b610b82610fe2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610bdb919061246b565b600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b5050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c909190611edf565b602060405180830381865afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061249b565b905090565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015610d645750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205443115b610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a9061253a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2f919061255a565b92505081905550610e6182828573ffffffffffffffffffffffffffffffffffffffff166114289092919063ffffffff16565b505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f079190611edf565b6000604051808303818588803b158015610f2057600080fd5b505af1158015610f34573d6000803e3d6000fd5b5050505050565b610f43610fe2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612600565b60405180910390fd5b610fbc816110e9565b50565b60606000610fcb6111ad565b610fd68585856114ae565b91509150935093915050565b610fea611722565b73ffffffffffffffffffffffffffffffffffffffff16611008610a10565b73ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110559061266c565b60405180910390fd5b565b6110e3846323b872dd60e01b8585856040516024016110819392919061268c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061172a565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061270f565b60405180910390fd5b565b60008060008060008787810190611254919061272f565b9450945094509450945060008183856188b861127091906127aa565b8961127b91906123a9565b61128591906127aa565b61128f9190612833565b90506002808111156112a4576112a3612864565b5b8a60028111156112b7576112b6612864565b5b146112ee576112e98630838873ffffffffffffffffffffffffffffffffffffffff16611060909392919063ffffffff16565b611382565b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461137a919061255a565b925050819055505b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113cc610a10565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141591906123a9565b9250508190555050505050505050505050565b6114a98363a9059cbb60e01b8484604051602401611447929190612893565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061172a565b505050565b606060006188b88560a00135116114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061292e565b60405180910390fd5b3660008680610120019061150e919061295d565b9150915060288282905014611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90612a32565b60405180910390fd5b60008282601490809261156d93929190612a5c565b906115789190612adb565b60601c90506000611588896117f1565b905060006115968389611801565b905060006115a38b611959565b90506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90612bac565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90612c3e565b60405180910390fd5b828482848c6040516020016116ff959493929190612c7f565b604051602081830303815290604052600097509750505050505050935093915050565b600033905090565b600061178c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119959092919063ffffffff16565b90506000815111156117ec57808060200190518101906117ac9190612d0a565b6117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290612da9565b60405180910390fd5b5b505050565b6000808235905080915050919050565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90612e3b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663d1eca9cf846040518263ffffffff1660e01b815260040161190f9190611e37565b602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611950919061249b565b91505092915050565b6000808260e001359050600083610100013590508082141561197f578192505050611990565b61198b824883016119ad565b925050505b919050565b60606119a484846000856119c6565b90509392505050565b60008183106119bc57816119be565b825b905092915050565b606082471015611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290612ecd565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a349190612f29565b60006040518083038185875af1925050503d8060008114611a71576040519150601f19603f3d011682016040523d82523d6000602084013e611a76565b606091505b5091509150611a8787838387611a93565b92505050949350505050565b60608315611af657600083511415611aee57611aae85611b09565b611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490612f8c565b60405180910390fd5b5b829050611b01565b611b008383611b2c565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115611b3f5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b739190612ff0565b60405180910390fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b611b9f81611b86565b8114611baa57600080fd5b50565b600081359050611bbc81611b96565b92915050565b600060208284031215611bd857611bd7611b7c565b5b6000611be684828501611bad565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c1a82611bef565b9050919050565b611c2a81611c0f565b8114611c3557600080fd5b50565b600081359050611c4781611c21565b92915050565b6000819050919050565b611c6081611c4d565b8114611c6b57600080fd5b50565b600081359050611c7d81611c57565b92915050565b60008060408385031215611c9a57611c99611b7c565b5b6000611ca885828601611c38565b9250506020611cb985828601611c6e565b9150509250929050565b6000611cce82611bef565b9050919050565b6000611ce082611cc3565b9050919050565b611cf081611cd5565b8114611cfb57600080fd5b50565b600081359050611d0d81611ce7565b92915050565b611d1c81611cc3565b8114611d2757600080fd5b50565b600081359050611d3981611d13565b92915050565b600080600060608486031215611d5857611d57611b7c565b5b6000611d6686828701611cfe565b9350506020611d7786828701611d2a565b9250506040611d8886828701611c6e565b9150509250925092565b60008060408385031215611da957611da8611b7c565b5b6000611db785828601611cfe565b9250506020611dc885828601611d2a565b9150509250929050565b611ddb81611c4d565b82525050565b6000604082019050611df66000830185611dd2565b611e036020830184611dd2565b9392505050565b600060208284031215611e2057611e1f611b7c565b5b6000611e2e84828501611d2a565b91505092915050565b6000602082019050611e4c6000830184611dd2565b92915050565b6000611e5d82611cc3565b9050919050565b611e6d81611e52565b8114611e7857600080fd5b50565b600081359050611e8a81611e64565b92915050565b60008060408385031215611ea757611ea6611b7c565b5b6000611eb585828601611cfe565b9250506020611ec685828601611e7b565b9150509250929050565b611ed981611cc3565b82525050565b6000602082019050611ef46000830184611ed0565b92915050565b60038110611f0757600080fd5b50565b600081359050611f1981611efa565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f4457611f43611f1f565b5b8235905067ffffffffffffffff811115611f6157611f60611f24565b5b602083019150836001820283011115611f7d57611f7c611f29565b5b9250929050565b60008060008060608587031215611f9e57611f9d611b7c565b5b6000611fac87828801611f0a565b945050602085013567ffffffffffffffff811115611fcd57611fcc611b81565b5b611fd987828801611f2e565b93509350506040611fec87828801611c6e565b91505092959194509250565b60006020828403121561200e5761200d611b7c565b5b600061201c84828501611cfe565b91505092915050565b6000819050919050565b600061204a61204561204084611bef565b612025565b611bef565b9050919050565b600061205c8261202f565b9050919050565b600061206e82612051565b9050919050565b61207e81612063565b82525050565b60006020820190506120996000830184612075565b92915050565b60006120aa82612051565b9050919050565b6120ba8161209f565b82525050565b60006020820190506120d560008301846120b1565b92915050565b6000602082840312156120f1576120f0611b7c565b5b60006120ff84828501611c38565b91505092915050565b600080fd5b6000610160828403121561212457612123612108565b5b81905092915050565b6000819050919050565b6121408161212d565b811461214b57600080fd5b50565b60008135905061215d81612137565b92915050565b60008060006060848603121561217c5761217b611b7c565b5b600084013567ffffffffffffffff81111561219a57612199611b81565b5b6121a68682870161210d565b93505060206121b78682870161214e565b92505060406121c886828701611c6e565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561220c5780820151818401526020810190506121f1565b8381111561221b576000848401525b50505050565b6000601f19601f8301169050919050565b600061223d826121d2565b61224781856121dd565b93506122578185602086016121ee565b61226081612221565b840191505092915050565b600060408201905081810360008301526122858185612232565b90506122946020830184611dd2565b9392505050565b6122a481611b86565b82525050565b60006020820190506122bf600083018461229b565b92915050565b6122ce81611c0f565b82525050565b60006040820190506122e960008301856122c5565b6122f66020830184611dd2565b9392505050565b600082825260208201905092915050565b7f756e737570706f7274656420746f6b656e000000000000000000000000000000600082015250565b60006123446011836122fd565b915061234f8261230e565b602082019050919050565b6000602082019050818103600083015261237381612337565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123b482611c4d565b91506123bf83611c4d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123f4576123f361237a565b5b828201905092915050565b7f546f6b656e20616c726561647920736574000000000000000000000000000000600082015250565b60006124356011836122fd565b9150612440826123ff565b602082019050919050565b6000602082019050818103600083015261246481612428565b9050919050565b600060208201905061248060008301846122c5565b92915050565b60008151905061249581611c57565b92915050565b6000602082840312156124b1576124b0611b7c565b5b60006124bf84828501612486565b91505092915050565b7f4465706f7369745061796d61737465723a206d75737420756e6c6f636b546f6b60008201527f656e4465706f7369740000000000000000000000000000000000000000000000602082015250565b60006125246029836122fd565b915061252f826124c8565b604082019050919050565b6000602082019050818103600083015261255381612517565b9050919050565b600061256582611c4d565b915061257083611c4d565b9250828210156125835761258261237a565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125ea6026836122fd565b91506125f58261258e565b604082019050919050565b60006020820190508181036000830152612619816125dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126566020836122fd565b915061266182612620565b602082019050919050565b6000602082019050818103600083015261268581612649565b9050919050565b60006060820190506126a16000830186611ed0565b6126ae6020830185611ed0565b6126bb6040830184611dd2565b949350505050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b60006126f96015836122fd565b9150612704826126c3565b602082019050919050565b60006020820190508181036000830152612728816126ec565b9050919050565b600080600080600060a0868803121561274b5761274a611b7c565b5b600061275988828901611c38565b955050602061276a88828901611cfe565b945050604061277b88828901611c6e565b935050606061278c88828901611c6e565b925050608061279d88828901611c6e565b9150509295509295909350565b60006127b582611c4d565b91506127c083611c4d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127f9576127f861237a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061283e82611c4d565b915061284983611c4d565b92508261285957612858612804565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006040820190506128a86000830185611ed0565b6128b56020830184611dd2565b9392505050565b7f4465706f7369745061796d61737465723a2067617320746f6f206c6f7720666f60008201527f7220706f73744f70000000000000000000000000000000000000000000000000602082015250565b60006129186028836122fd565b9150612923826128bc565b604082019050919050565b600060208201905081810360008301526129478161290b565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261297a5761297961294e565b5b80840192508235915067ffffffffffffffff82111561299c5761299b612953565b5b6020830192506001820236038313156129b8576129b7612958565b5b509250929050565b7f4465706f7369745061796d61737465723a207061796d6173746572416e64446160008201527f7461206d757374207370656369667920746f6b656e0000000000000000000000602082015250565b6000612a1c6035836122fd565b9150612a27826129c0565b604082019050919050565b60006020820190508181036000830152612a4b81612a0f565b9050919050565b600080fd5b600080fd5b60008085851115612a7057612a6f612a52565b5b83861115612a8157612a80612a57565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000612ae78383612a97565b82612af28135612aa2565b92506014821015612b3257612b2d7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802612ace565b831692505b505092915050565b7f4465706f7369745061796d61737465723a206465706f736974206e6f74206c6f60008201527f636b656400000000000000000000000000000000000000000000000000000000602082015250565b6000612b966024836122fd565b9150612ba182612b3a565b604082019050919050565b60006020820190508181036000830152612bc581612b89565b9050919050565b7f4465706f7369745061796d61737465723a206465706f73697420746f6f206c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c286021836122fd565b9150612c3382612bcc565b604082019050919050565b60006020820190508181036000830152612c5781612c1b565b9050919050565b6000612c6982612051565b9050919050565b612c7981612c5e565b82525050565b600060a082019050612c946000830188611ed0565b612ca16020830187612c70565b612cae6040830186611dd2565b612cbb6060830185611dd2565b612cc86080830184611dd2565b9695505050505050565b60008115159050919050565b612ce781612cd2565b8114612cf257600080fd5b50565b600081519050612d0481612cde565b92915050565b600060208284031215612d2057612d1f611b7c565b5b6000612d2e84828501612cf5565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612d93602a836122fd565b9150612d9e82612d37565b604082019050919050565b60006020820190508181036000830152612dc281612d86565b9050919050565b7f4465706f7369745061796d61737465723a20756e737570706f7274656420746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b6000612e256023836122fd565b9150612e3082612dc9565b604082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612eb76026836122fd565b9150612ec282612e5b565b604082019050919050565b60006020820190508181036000830152612ee681612eaa565b9050919050565b600081905092915050565b6000612f03826121d2565b612f0d8185612eed565b9350612f1d8185602086016121ee565b80840191505092915050565b6000612f358284612ef8565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f76601d836122fd565b9150612f8182612f40565b602082019050919050565b60006020820190508181036000830152612fa581612f69565b9050919050565b600081519050919050565b6000612fc282612fac565b612fcc81856122fd565b9350612fdc8185602086016121ee565b612fe581612221565b840191505092915050565b6000602082019050818103600083015261300a8184612fb7565b90509291505056fea2646970667358221220564f46e54864f353c5e54067b622e2e40ac076e8611079341ed0f61970e61f1064736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b5060405162003fc938038062003fc98339818101604052810190620000379190620002fe565b80620000586200004c6200013060201b60201c565b6200013860201b60201c565b6200007467aabb336c9ce83de860c01b620001fc60201b60201c565b62000090672d07becd259a4ef060c01b620001fc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620000e167dcfcf6ad8763daa360c01b620001ff60201b60201c565b620000fd67c99e34ede829f35c60c01b620001ff60201b60201c565b620001196702307d97776cb34b60c01b620001ff60201b60201c565b620001296200020260201b60201c565b5062000330565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b6200021e676a3346090667b18160c01b620001ff60201b60201c565b6200023a67d2aa0993f8464ceb60c01b620001ff60201b60201c565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002b28262000285565b9050919050565b6000620002c682620002a5565b9050919050565b620002d881620002b9565b8114620002e457600080fd5b50565b600081519050620002f881620002cd565b92915050565b60006020828403121562000317576200031662000280565b5b60006200032784828501620002e7565b91505092915050565b608051613c4c6200037d600039600081816105280152818161062301528181610e1901528181610ea901528181610f97015281816110880152818161140201526117bb0152613c4c6000f3fe6080604052600436106101355760003560e01c8063addd5099116100ab578063c399ec881161006f578063c399ec88146103de578063cc9c837c14610409578063cd8f80c214610432578063d0e30db014610449578063f2fde38b14610453578063f465c77e1461047c57610135565b8063addd5099146102f9578063b0d691fe14610336578063bb9fe6bf14610361578063c23a5cea14610378578063c23f001f146103a157610135565b80635476bd72116100fd5780635476bd7214610223578063715018a61461024c578063796d4371146102635780638da5cb5b1461028e5780639ed0fb68146102b9578063a9a23409146102d057610135565b80630396cb601461013a578063205c287814610156578063382edd9e1461017f578063493b0170146101a85780634a6f84cf146101e6575b600080fd5b610154600480360381019061014f9190612809565b6104ba565b005b34801561016257600080fd5b5061017d600480360381019061017891906128ca565b6105b5565b005b34801561018b57600080fd5b506101a660048036038101906101a19190612986565b6106b2565b005b3480156101b457600080fd5b506101cf60048036038101906101ca91906129d9565b61099e565b6040516101dd929190612a28565b60405180910390f35b3480156101f257600080fd5b5061020d60048036038101906102089190612a51565b610aa5565b60405161021a9190612a7e565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190612ad7565b610abd565b005b34801561025857600080fd5b50610261610cb5565b005b34801561026f57600080fd5b50610278610cc9565b6040516102859190612a7e565b60405180910390f35b34801561029a57600080fd5b506102a3610ccf565b6040516102b09190612b26565b60405180910390f35b3480156102c557600080fd5b506102ce610cf8565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190612bcb565b610d66565b005b34801561030557600080fd5b50610320600480360381019061031b9190612c3f565b610de4565b60405161032d9190612ccb565b60405180910390f35b34801561034257600080fd5b5061034b610e17565b6040516103589190612d07565b60405180910390f35b34801561036d57600080fd5b50610376610e3b565b005b34801561038457600080fd5b5061039f600480360381019061039a9190612d22565b610f29565b005b3480156103ad57600080fd5b506103c860048036038101906103c391906129d9565b611023565b6040516103d59190612a7e565b60405180910390f35b3480156103ea57600080fd5b506103f3611048565b6040516104009190612a7e565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190612986565b611125565b005b34801561043e57600080fd5b50610447611355565b005b6104516113c4565b005b34801561045f57600080fd5b5061047a60048036038101906104759190612a51565b61148e565b005b34801561048857600080fd5b506104a3600480360381019061049e9190612daa565b611511565b6040516104b1929190612ea9565b60405180910390f35b6104ce67b8237d27482ab06b60c01b611598565b6104d661159b565b6104ea67e2f107173549500460c01b611598565b6104fe6701033209d47e5b2460c01b611598565b61051267dcd4652c61f0b32d60c01b611598565b61052667eae392c3eb511cc760c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016105809190612ee8565b6000604051808303818588803b15801561059957600080fd5b505af11580156105ad573d6000803e3d6000fd5b505050505050565b6105c9672907e6d97c3d1da360c01b611598565b6105d161159b565b6105e5678ac019c63563710260c01b611598565b6105f967da1f1c840719888260c01b611598565b61060d67bc135ce98e9f326f60c01b611598565b61062167532d977f60999f3e60c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161067c929190612f12565b600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b505050505050565b6106c6672ea5a254429360fc60c01b611619565b6106da67b000fd81d9e7142360c01b611619565b6106ee67e9e81e2be5f1e65760c01b611619565b61071b3330838673ffffffffffffffffffffffffffffffffffffffff1661161c909392919063ffffffff16565b61072f67200bf7d251da350860c01b611619565b61074367878f27560106d7be60c01b611619565b6107576776db519a2c86570660c01b611619565b600073ffffffffffffffffffffffffffffffffffffffff16600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c90612f98565b60405180910390fd5b6108396768a0556d18202fd360c01b611619565b61084d677c729dd50fd9e69a60c01b611619565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108d99190612fe7565b925050819055506108f4672a96f0ca2e7fb76860c01b611619565b6109086782a69d800a27dad360c01b611619565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109845761094f679d6d32fb3e6d302360c01b611619565b61096367ea14e3e8466148da60c01b611619565b6109776764345f826448256660c01b611619565b61097f611355565b610999565b61099867377c56e5e35eb73660c01b611619565b5b505050565b6000806109b567869c304d6d64445a60c01b611619565b6109c9672ec3e1df74be84cf60c01b611619565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150610a5c67d8f192540dd4ba2760c01b611619565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509250929050565b60036020528060005260406000206000915090505481565b610ad1671a35a8ebad88574f60c01b611619565b610ad961159b565b610aed676912e9c63c9b7c7a60c01b611619565b610b016776df69f4b05124fa60c01b611619565b610b1567830a6ec744c35c6560c01b611619565b610b2967096fb504246ca48060c01b611619565b610b3d67178ce4b5b5599efc60c01b611619565b600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290613067565b60405180910390fd5b610c1f677ebf795669e6eea260c01b611619565b610c3367e0d3a581e3bfe21e60c01b611619565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610cbd61159b565b610cc760006116a5565b565b6188b881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d0c676a3346090667b18160c01b611619565b610d2067d2aa0993f8464ceb60c01b611619565b43600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610d7a672cf57c41b8b89fcb60c01b611598565b610d8e6799497fbe705cd9f760c01b611598565b610da2679b4512fe9e58bae960c01b611598565b610daa611769565b610dbe6793ce2f3709fe770560c01b611598565b610dd26790067c65a6f5d3a860c01b611598565b610dde8484848461185d565b50505050565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e4f67ec8a9719e7b677d060c01b611598565b610e5761159b565b610e6b67672cc496b6067cea60c01b611598565b610e7f674fdbd001b77629ae60c01b611598565b610e93677362eae3491c0ae160c01b611598565b610ea76797f9e99fb1d4b33860c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0f57600080fd5b505af1158015610f23573d6000803e3d6000fd5b50505050565b610f3d67c9ef1b986fb51fe860c01b611598565b610f4561159b565b610f5967de53cad8928d67f560c01b611598565b610f6d677af1d989d252676f60c01b611598565b610f81676fd423196847dbb160c01b611598565b610f9567097023434434ee0460c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610fee9190613087565b600060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b5050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b600061105e67f6be01970597753160c01b611598565b611072673f87ae81816372b460c01b611598565b61108667bd328ab4ce68c2fb60c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110df9190612b26565b602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112091906130b7565b905090565b61113967257333198d1d385660c01b611619565b61114d67fd98853292accf6a60c01b611619565b611161676f62bf32b04459d660c01b611619565b611175676ca9641d02a9981b60c01b611619565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156112035750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205443115b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613156565b60405180910390fd5b61125667200c16e7439ec92f60c01b611619565b61126a670e5b5cc7421c157360c01b611619565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112f69190613176565b92505081905550611311671a88b8c7d3497ec360c01b611619565b6113256739237eaa89577a6660c01b611619565b61135082828573ffffffffffffffffffffffffffffffffffffffff16611b4c9092919063ffffffff16565b505050565b611369671d17c31d1f4d720260c01b611619565b61137d671c6c49758117297460c01b611619565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6113d8673943ebd1bec8d2d660c01b611598565b6113ec6702fc4196924a47ac60c01b611598565b611400675d10604969f00bcf60c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b815260040161145a9190612b26565b6000604051808303818588803b15801561147357600080fd5b505af1158015611487573d6000803e3d6000fd5b5050505050565b61149661159b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc9061321c565b60405180910390fd5b61150e816116a5565b50565b606060006115296791cf27427781cd8860c01b611598565b61153d676434b0ee41880ab260c01b611598565b61155167f2c91afe86e9062d60c01b611598565b611559611769565b61156d6723ccedb6dfbcc30860c01b611598565b61158167287492035946b96c60c01b611598565b61158c858585611bd2565b91509150935093915050565b50565b6115a361209e565b73ffffffffffffffffffffffffffffffffffffffff166115c1610ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90613288565b60405180910390fd5b565b50565b61169f846323b872dd60e01b85858560405160240161163d939291906132a8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120a6565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61177d6793fe0ed3ca04f82b60c01b611598565b611791678abd782107e62dce60c01b611598565b6117a567b9c2ce2852bf0cf360c01b611598565b6117b967f8314810c2ffd6e460c01b611598565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061332b565b60405180910390fd5b61185b677eb1fed1a5060b5e60c01b611598565b565b61187167d7c074f4d06aa03960c01b611619565b6118856759e23dc38a5a867460c01b611619565b6118996748c2b54b526c11e060c01b611619565b600080600080600087878101906118b0919061334b565b945094509450945094506118ce67b236b81acc4a46e460c01b611619565b6118e2671041d1142338e00b60c01b611619565b60008183856188b86118f491906133c6565b896118ff9190612fe7565b61190991906133c6565b6119139190613437565b90506119296739bcab31cbce323960c01b611619565b61193d67aba07915b0a9129b60c01b611619565b6002808111156119505761194f613468565b5b8a600281111561196357611962613468565b5b146119d65761197c670621e6b92fef52e760c01b611619565b6119906703cfc15f97fe1c6560c01b611619565b6119a467796b54b4244a830260c01b611619565b6119d18630838873ffffffffffffffffffffffffffffffffffffffff1661161c909392919063ffffffff16565b611a92565b6119ea679770a5d90b1b0af560c01b611619565b6119fe6792c95d06ac75a6c760c01b611619565b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8a9190613176565b925050819055505b611aa6672f7ccc030425110060c01b611619565b80600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611af0610ccf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b399190612fe7565b9250508190555050505050505050505050565b611bcd8363a9059cbb60e01b8484604051602401611b6b929190613497565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120a6565b505050565b60606000611bea67e142e752610c9b9060c01b611619565b611bfe6734f6ae82aa487b8b60c01b611619565b611c12674d192846d7d2292860c01b611619565b611c2667e95f3e6e98d047db60c01b611619565b611c3a67e8b796e8f2b07aa860c01b611619565b6188b88560a0013511611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613532565b60405180910390fd5b611c9667b16cfcf76fd8c8a160c01b611619565b611caa6797d60e932312e26d60c01b611619565b611cbe675635cc74f9891b2260c01b611619565b36600086806101200190611cd29190613561565b91509150611cea6789fd201ff250a7ca60c01b611619565b611cfe6746775bbdfd10b7f960c01b611619565b611d1267b522038f442459cb60c01b611619565b60288282905014611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90613636565b60405180910390fd5b611d6c67769bf92cc57e97e360c01b611619565b611d80679c80f1a301a811e560c01b611619565b611d946706c64a3c66b3687460c01b611619565b600082826014908092611da993929190613660565b90611db491906136df565b60601c9050611dcd676e715bb93afb90ce60c01b611619565b611de167a2f794e72edc9a7460c01b611619565b6000611dec8961216d565b9050611e026762a41431d640771a60c01b611619565b611e166724471e5f81974d6660c01b611619565b6000611e2283896121f6565b9050611e38678c2f128d23c0d8db60c01b611619565b611e4c67598280fd3f8461b160c01b611619565b6000611e578b612402565b9050611e6d675448888dbfb4d85a60c01b611619565b611e81678030f40e1771a98460c01b611619565b611e9567fd13302bd66d75e260c01b611619565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906137b0565b60405180910390fd5b611f2b671aeb0d54769185a260c01b611619565b611f3f67e1535054299f9c2a60c01b611619565b611f5367ec8cff6f082f1dbb60c01b611619565b611f6767b2ec294184c9912c60c01b611619565b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613842565b60405180910390fd5b61203a67166ea3619ef4b60d60c01b611619565b61204e67c64055219cea050e60c01b611619565b6120626766bf57d3b1c5cbeb60c01b611619565b828482848c60405160200161207b959493929190613883565b604051602081830303815290604052600097509750505050505050935093915050565b600033905090565b6000612108826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125559092919063ffffffff16565b90506000815111156121685780806020019051810190612128919061390e565b612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e906139ad565b60405180910390fd5b5b505050565b600061218367e1c1c6be6d21e0b660c01b61256d565b61219767169e881823fa915860c01b61256d565b6121ab675cfc74aca58d577760c01b61256d565b60006121c167ee6cead2c727cb3b60c01b61256d565b823590506121d967d47ac8b49cb9c10f60c01b61256d565b6121ed67f19fd641611eb47860c01b61256d565b80915050919050565b600061220c67f53b4145c1d17f2d60c01b611619565b6122206740dc297d234ee9ba60c01b611619565b61223467e74608f8c00cabe460c01b611619565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506122ac6796ff36f8f86dbbc260c01b611619565b6122c067e8725aaebc0818d760c01b611619565b6122d46778a71ea3857fbe4d60c01b611619565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90613a3f565b60405180910390fd5b61235767763f4a2b4dc77c6e60c01b611619565b61236b67eb03ae8f596dfb2460c01b611619565b61237f6711c6008ad263845560c01b611619565b8073ffffffffffffffffffffffffffffffffffffffff1663d1eca9cf846040518263ffffffff1660e01b81526004016123b89190612a7e565b602060405180830381865afa1580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f991906130b7565b91505092915050565b600061241867d951ee1a7fe1929660c01b61256d565b61242c6741f471dc8ecaa9f060c01b61256d565b612440679a0967417a03ecef60c01b61256d565b61245467d7ffe07df2d0d08960c01b61256d565b60008260e0013590506124716731db66aea20254e660c01b61256d565b61248567a62d19e5b1ae148460c01b61256d565b600083610100013590506124a367e925c30058a91a3060c01b61256d565b6124b7672c43a756abed810960c01b61256d565b808203612504576124d267c9ed2f558a258ac860c01b61256d565b6124e6677aaa3d7be38c7a5560c01b61256d565b6124fa67fbaf3f43485d889960c01b61256d565b8192505050612550565b612518678f27a7e1ffddfbc660c01b61256d565b61252b668dc5be0f0544b760c01b61256d565b61253f67e6e72b8816aefe7460c01b61256d565b61254b82488301612570565b925050505b919050565b606061256484846000856125fc565b90509392505050565b50565b600061258667411a62535e39f6e460c01b61256d565b61259a678c8eb10c0b4992b760c01b61256d565b6125ae67c43b1432989e4cb760c01b61256d565b81831080156125cd57506125cc679851e31cf22796be60c01b6126c9565b5b806125e857506125e76726d9e35bccba9fba60c01b6126d4565b5b6125f257816125f4565b825b905092915050565b606082471015612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890613ad1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161266a9190613b2d565b60006040518083038185875af1925050503d80600081146126a7576040519150601f19603f3d011682016040523d82523d6000602084013e6126ac565b606091505b50915091506126bd878383876126db565b92505050949350505050565b600060019050919050565b6000919050565b6060831561273d576000835103612735576126f585612750565b612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b90613b90565b60405180910390fd5b5b829050612748565b6127478383612773565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156127865781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba9190613bf4565b60405180910390fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b6127e6816127cd565b81146127f157600080fd5b50565b600081359050612803816127dd565b92915050565b60006020828403121561281f5761281e6127c3565b5b600061282d848285016127f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286182612836565b9050919050565b61287181612856565b811461287c57600080fd5b50565b60008135905061288e81612868565b92915050565b6000819050919050565b6128a781612894565b81146128b257600080fd5b50565b6000813590506128c48161289e565b92915050565b600080604083850312156128e1576128e06127c3565b5b60006128ef8582860161287f565b9250506020612900858286016128b5565b9150509250929050565b600061291582612836565b9050919050565b60006129278261290a565b9050919050565b6129378161291c565b811461294257600080fd5b50565b6000813590506129548161292e565b92915050565b6129638161290a565b811461296e57600080fd5b50565b6000813590506129808161295a565b92915050565b60008060006060848603121561299f5761299e6127c3565b5b60006129ad86828701612945565b93505060206129be86828701612971565b92505060406129cf868287016128b5565b9150509250925092565b600080604083850312156129f0576129ef6127c3565b5b60006129fe85828601612945565b9250506020612a0f85828601612971565b9150509250929050565b612a2281612894565b82525050565b6000604082019050612a3d6000830185612a19565b612a4a6020830184612a19565b9392505050565b600060208284031215612a6757612a666127c3565b5b6000612a7584828501612971565b91505092915050565b6000602082019050612a936000830184612a19565b92915050565b6000612aa48261290a565b9050919050565b612ab481612a99565b8114612abf57600080fd5b50565b600081359050612ad181612aab565b92915050565b60008060408385031215612aee57612aed6127c3565b5b6000612afc85828601612945565b9250506020612b0d85828601612ac2565b9150509250929050565b612b208161290a565b82525050565b6000602082019050612b3b6000830184612b17565b92915050565b60038110612b4e57600080fd5b50565b600081359050612b6081612b41565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b8b57612b8a612b66565b5b8235905067ffffffffffffffff811115612ba857612ba7612b6b565b5b602083019150836001820283011115612bc457612bc3612b70565b5b9250929050565b60008060008060608587031215612be557612be46127c3565b5b6000612bf387828801612b51565b945050602085013567ffffffffffffffff811115612c1457612c136127c8565b5b612c2087828801612b75565b93509350506040612c33878288016128b5565b91505092959194509250565b600060208284031215612c5557612c546127c3565b5b6000612c6384828501612945565b91505092915050565b6000819050919050565b6000612c91612c8c612c8784612836565b612c6c565b612836565b9050919050565b6000612ca382612c76565b9050919050565b6000612cb582612c98565b9050919050565b612cc581612caa565b82525050565b6000602082019050612ce06000830184612cbc565b92915050565b6000612cf182612c98565b9050919050565b612d0181612ce6565b82525050565b6000602082019050612d1c6000830184612cf8565b92915050565b600060208284031215612d3857612d376127c3565b5b6000612d468482850161287f565b91505092915050565b600080fd5b60006101608284031215612d6b57612d6a612d4f565b5b81905092915050565b6000819050919050565b612d8781612d74565b8114612d9257600080fd5b50565b600081359050612da481612d7e565b92915050565b600080600060608486031215612dc357612dc26127c3565b5b600084013567ffffffffffffffff811115612de157612de06127c8565b5b612ded86828701612d54565b9350506020612dfe86828701612d95565b9250506040612e0f868287016128b5565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e53578082015181840152602081019050612e38565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e7b82612e19565b612e858185612e24565b9350612e95818560208601612e35565b612e9e81612e5f565b840191505092915050565b60006040820190508181036000830152612ec38185612e70565b9050612ed26020830184612a19565b9392505050565b612ee2816127cd565b82525050565b6000602082019050612efd6000830184612ed9565b92915050565b612f0c81612856565b82525050565b6000604082019050612f276000830185612f03565b612f346020830184612a19565b9392505050565b600082825260208201905092915050565b7f756e737570706f7274656420746f6b656e000000000000000000000000000000600082015250565b6000612f82601183612f3b565b9150612f8d82612f4c565b602082019050919050565b60006020820190508181036000830152612fb181612f75565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ff282612894565b9150612ffd83612894565b925082820190508082111561301557613014612fb8565b5b92915050565b7f546f6b656e20616c726561647920736574000000000000000000000000000000600082015250565b6000613051601183612f3b565b915061305c8261301b565b602082019050919050565b6000602082019050818103600083015261308081613044565b9050919050565b600060208201905061309c6000830184612f03565b92915050565b6000815190506130b18161289e565b92915050565b6000602082840312156130cd576130cc6127c3565b5b60006130db848285016130a2565b91505092915050565b7f4465706f7369745061796d61737465723a206d75737420756e6c6f636b546f6b60008201527f656e4465706f7369740000000000000000000000000000000000000000000000602082015250565b6000613140602983612f3b565b915061314b826130e4565b604082019050919050565b6000602082019050818103600083015261316f81613133565b9050919050565b600061318182612894565b915061318c83612894565b92508282039050818111156131a4576131a3612fb8565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613206602683612f3b565b9150613211826131aa565b604082019050919050565b60006020820190508181036000830152613235816131f9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613272602083612f3b565b915061327d8261323c565b602082019050919050565b600060208201905081810360008301526132a181613265565b9050919050565b60006060820190506132bd6000830186612b17565b6132ca6020830185612b17565b6132d76040830184612a19565b949350505050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000613315601583612f3b565b9150613320826132df565b602082019050919050565b6000602082019050818103600083015261334481613308565b9050919050565b600080600080600060a08688031215613367576133666127c3565b5b60006133758882890161287f565b955050602061338688828901612945565b9450506040613397888289016128b5565b93505060606133a8888289016128b5565b92505060806133b9888289016128b5565b9150509295509295909350565b60006133d182612894565b91506133dc83612894565b92508282026133ea81612894565b9150828204841483151761340157613400612fb8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344282612894565b915061344d83612894565b92508261345d5761345c613408565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006040820190506134ac6000830185612b17565b6134b96020830184612a19565b9392505050565b7f4465706f7369745061796d61737465723a2067617320746f6f206c6f7720666f60008201527f7220706f73744f70000000000000000000000000000000000000000000000000602082015250565b600061351c602883612f3b565b9150613527826134c0565b604082019050919050565b6000602082019050818103600083015261354b8161350f565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261357e5761357d613552565b5b80840192508235915067ffffffffffffffff8211156135a05761359f613557565b5b6020830192506001820236038313156135bc576135bb61355c565b5b509250929050565b7f4465706f7369745061796d61737465723a207061796d6173746572416e64446160008201527f7461206d757374207370656369667920746f6b656e0000000000000000000000602082015250565b6000613620603583612f3b565b915061362b826135c4565b604082019050919050565b6000602082019050818103600083015261364f81613613565b9050919050565b600080fd5b600080fd5b6000808585111561367457613673613656565b5b838611156136855761368461365b565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006136eb838361369b565b826136f681356136a6565b92506014821015613736576137317fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026136d2565b831692505b505092915050565b7f4465706f7369745061796d61737465723a206465706f736974206e6f74206c6f60008201527f636b656400000000000000000000000000000000000000000000000000000000602082015250565b600061379a602483612f3b565b91506137a58261373e565b604082019050919050565b600060208201905081810360008301526137c98161378d565b9050919050565b7f4465706f7369745061796d61737465723a206465706f73697420746f6f206c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061382c602183612f3b565b9150613837826137d0565b604082019050919050565b6000602082019050818103600083015261385b8161381f565b9050919050565b600061386d82612c98565b9050919050565b61387d81613862565b82525050565b600060a0820190506138986000830188612b17565b6138a56020830187613874565b6138b26040830186612a19565b6138bf6060830185612a19565b6138cc6080830184612a19565b9695505050505050565b60008115159050919050565b6138eb816138d6565b81146138f657600080fd5b50565b600081519050613908816138e2565b92915050565b600060208284031215613924576139236127c3565b5b6000613932848285016138f9565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613997602a83612f3b565b91506139a28261393b565b604082019050919050565b600060208201905081810360008301526139c68161398a565b9050919050565b7f4465706f7369745061796d61737465723a20756e737570706f7274656420746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a29602383612f3b565b9150613a34826139cd565b604082019050919050565b60006020820190508181036000830152613a5881613a1c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613abb602683612f3b565b9150613ac682613a5f565b604082019050919050565b60006020820190508181036000830152613aea81613aae565b9050919050565b600081905092915050565b6000613b0782612e19565b613b118185613af1565b9350613b21818560208601612e35565b80840191505092915050565b6000613b398284613afc565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b7a601d83612f3b565b9150613b8582613b44565b602082019050919050565b60006020820190508181036000830152613ba981613b6d565b9050919050565b600081519050919050565b6000613bc682613bb0565b613bd08185612f3b565b9350613be0818560208601612e35565b613be981612e5f565b840191505092915050565b60006020820190508181036000830152613c0e8184613bbb565b90509291505056fea264697066735822122078abf7e0aa92d2579e746fd969972c21e87007e6efc7e965601a593b63eae58e64736f6c63430008110033"; type DepositPaymasterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts deleted file mode 100644 index 87ff9116..00000000 --- a/src/contracts/factories/src/aa-4337/samples/SimpleAccountFactory__factory.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../../common"; -import type { - SimpleAccountFactory, - SimpleAccountFactoryInterface, -} from "../../../../src/aa-4337/samples/SimpleAccountFactory"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "_entryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "accountImplementation", - outputs: [ - { - internalType: "contract SimpleAccount", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - ], - name: "createAccount", - outputs: [ - { - internalType: "contract SimpleAccount", - name: "ret", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "uint256", - name: "salt", - type: "uint256", - }, - ], - name: "getAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162004ffc38038062004ffc833981810160405281019062000037919062000171565b62000053672226ac95ea43c36560c01b620000e260201b60201c565b6200006f67775c95abe0aa979860c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a91906200020e565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200022b565b50565b613984806200167883390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b6000620001398262000118565b9050919050565b6200014b816200012c565b81146200015757600080fd5b50565b6000815190506200016b8162000140565b92915050565b6000602082840312156200018a5762000189620000f3565b5b60006200019a848285016200015a565b91505092915050565b6000819050919050565b6000620001ce620001c8620001c284620000f8565b620001a3565b620000f8565b9050919050565b6000620001e282620001ad565b9050919050565b6000620001f682620001d5565b9050919050565b6200020881620001e9565b82525050565b6000602082019050620002256000830184620001fd565b92915050565b608051611424620002546000396000818160db0152818161024e015261038101526114246000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b5780635fbfb9cf146200006d5780638cb84e1814620000a3575b600080fd5b62000055620000d9565b6040516200006491906200052f565b60405180910390f35b6200008b6004803603810190620000859190620005d1565b620000fd565b6040516200009a91906200052f565b60405180910390f35b620000c16004803603810190620000bb9190620005d1565b6200030d565b604051620000d0919062000629565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b600062000115679ac70da3cd845a3a60c01b62000451565b6200012b6799c81b097f1b305060c01b62000451565b6200014167bdbf56b66e54104960c01b62000451565b60006200014f84846200030d565b90506200016767f3741095896b688260c01b62000451565b6200017d67356179bea4e18d2560c01b62000451565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620001af672cf9d329540526ec60c01b62000451565b620001c567494517e2742e736660c01b62000451565b60008111156200021c57620001e567c4de6ebc1cb7368360c01b62000451565b620001fb67b4d46d777bd8024860c01b62000451565b6200021167cca68a1361cfc4d560c01b62000451565b819250505062000307565b6200023267a8529df9d9ec3a5060c01b62000451565b620002486787774aba857aa68760c01b62000451565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008660405160240162000280919062000629565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002d39062000496565b620002e0929190620006ea565b8190604051809103906000f590508015801562000301573d6000803e3d6000fd5b50925050505b92915050565b60006200032567a29ce20595e5508260c01b62000451565b6200033b67ece81d43d2cf706760c01b62000451565b6200035167bc40628dbdea6b3160c01b62000451565b620004498260001b604051806020016200036b9062000496565b6020820181038252601f19601f820116604052507f000000000000000000000000000000000000000000000000000000000000000086604051602401620003b3919062000629565b60405160208183030381529060405263c4d66de860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516020016200040b929190620006ea565b6040516020818303038152906040526040516020016200042d92919062000760565b6040516020818303038152906040528051906020012062000454565b905092915050565b50565b6000620004638383306200046b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200078983390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004ef620004e9620004e384620004a4565b620004c4565b620004a4565b9050919050565b60006200050382620004ce565b9050919050565b60006200051782620004f6565b9050919050565b62000529816200050a565b82525050565b60006020820190506200054660008301846200051e565b92915050565b600080fd5b60006200055e82620004a4565b9050919050565b620005708162000551565b81146200057c57600080fd5b50565b600081359050620005908162000565565b92915050565b6000819050919050565b620005ab8162000596565b8114620005b757600080fd5b50565b600081359050620005cb81620005a0565b92915050565b60008060408385031215620005eb57620005ea6200054c565b5b6000620005fb858286016200057f565b92505060206200060e85828601620005ba565b9150509250929050565b620006238162000551565b82525050565b600060208201905062000640600083018462000618565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200068257808201518184015260208101905062000665565b8381111562000692576000848401525b50505050565b6000601f19601f8301169050919050565b6000620006b68262000646565b620006c2818562000651565b9350620006d481856020860162000662565b620006df8162000698565b840191505092915050565b600060408201905062000701600083018562000618565b8181036020830152620007158184620006a9565b90509392505050565b600081905092915050565b6000620007368262000646565b6200074281856200071e565b93506200075481856020860162000662565b80840191505092915050565b60006200076e828562000729565b91506200077c828462000729565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205c8cd8a78006d2a61c090240e2d04d15726cfcc807c0df3d4f6af8560c4ae08764736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209603e16951cfd497c395837fa957ae1a8da09f5ed9500f76038a12245e5cb98964736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039843803806200398483398181016040528101906200006a91906200026d565b6200008667e236899807012fad60c01b6200012560201b60201c565b620000a2670e5c6885a269e25060c01b6200012560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620000f26721442c76cf437bc460c01b6200012560201b60201c565b6200010e67575c2a8a70ee263c60c01b6200012560201b60201c565b6200011e6200012860201b60201c565b5062000383565b50565b600060019054906101000a900460ff16156200017b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001729062000326565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001e4919062000366565b60405180910390a15b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022182620001f4565b9050919050565b6000620002358262000214565b9050919050565b620002478162000228565b81146200025357600080fd5b50565b60008151905062000267816200023c565b92915050565b600060208284031215620002865762000285620001ef565b5b6000620002968482850162000256565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200030e6027836200029f565b91506200031b82620002b0565b604082019050919050565b600060208201905081810360008301526200034181620002ff565b9050919050565b600060ff82169050919050565b620003608162000348565b82525050565b60006020820190506200037d600083018462000355565b92915050565b60805160a0516135b8620003cc60003960008181610c3c0152611b7a0152600081816104c9015281816105580152818161097601528181610a050152610ab501526135b86000f3fe6080604052600436106100c65760003560e01c806352d1902d1161007f578063b0d691fe11610059578063b0d691fe14610231578063b61d27f61461025c578063c399ec8814610285578063c4d66de8146102b0576100cd565b806352d1902d146101b05780638da5cb5b146101db578063affed0e014610206576100cd565b806318dfb3c7146100d25780633659cfe6146100fb5780633a871cdd146101245780634a58db19146101615780634d44560d1461016b5780634f1ef28614610194576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100f960048036038101906100f49190612273565b6102d9565b005b34801561010757600080fd5b50610122600480360381019061011d9190612352565b6104c7565b005b34801561013057600080fd5b5061014b60048036038101906101469190612410565b610650565b604051610158919061248e565b60405180910390f35b61016961078f565b005b34801561017757600080fd5b50610192600480360381019061018d91906124e7565b610840565b005b6101ae60048036038101906101a99190612668565b610974565b005b3480156101bc57600080fd5b506101c5610ab1565b6040516101d291906126d3565b60405180910390f35b3480156101e757600080fd5b506101f0610b6a565b6040516101fd91906126fd565b60405180910390f35b34801561021257600080fd5b5061021b610b90565b604051610228919061248e565b60405180910390f35b34801561023d57600080fd5b50610246610bfc565b6040516102539190612777565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906127e8565b610c60565b005b34801561029157600080fd5b5061029a610d21565b6040516102a7919061248e565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190612352565b610de5565b005b6102ed67546848a3c5b3f73860c01b610f89565b6103016753efada159d4cd4560c01b610f89565b6103156734079e686a9cb03560c01b610f89565b61031d610f8c565b6103316732e2f8ab2cb49ff060c01b610f89565b61034567d8fde5a555ab20b260c01b610f89565b610359671322da22e1ab1e1160c01b610f89565b8181905084849050146103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610398906128b9565b60405180910390fd5b6103b567fb2fe48ef707ad7160c01b610f89565b6103c967c8d0b2db45874f8060c01b610f89565b6103dd67ac5214eaf6dd9bbd60c01b610f89565b60005b848490508110156104c0576103ff67c7feee239b47870b60c01b610f89565b61041367ef867efcae378f5c60c01b610f89565b6104ad858583818110610429576104286128d9565b5b905060200201602081019061043e9190612352565b6000858585818110610453576104526128d9565b5b90506020028101906104659190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b80806104b8906129a9565b9150506103e0565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661059561121b565b73ffffffffffffffffffffffffffffffffffffffff16146105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e290612af6565b60405180910390fd5b6105f481611272565b61064d81600067ffffffffffffffff8111156106135761061261253d565b5b6040519080825280601f01601f1916602001820160405280156106455781602001600182028036833780820191505090505b5060006112cd565b50565b600061066667cc5c47196db5bd6160c01b61143b565b61067a678b55e749b3c352ab60c01b61143b565b61068e67e6442311764077fa60c01b61143b565b61069661143e565b6106aa671589e0478f7a186060c01b61143b565b6106b48484611519565b90506106ca67d37e8b3807985e7360c01b61143b565b6106de67c2c62d2bb50a980360c01b61143b565b60008480604001906106f09190612917565b905014156107425761070c6714643eaa19656f6660c01b61143b565b61072067cc382f158ab6697a60c01b61143b565b610734674eed3335c27922c660c01b61143b565b61073d846116d4565b610757565b610756672064a1156b0a7c3160c01b61143b565b5b61076b67f68d6061ffc7c0c960c01b61143b565b61077f67bcbc4a08bf13f3b260c01b61143b565b610788826117e6565b9392505050565b6107a367f09d2eb586b30e3160c01b610f89565b6107b767adcd03aa01933f5d60c01b610f89565b6107cb671b7af626582ba27260c01b610f89565b6107d3610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b815260040161080c91906126fd565b6000604051808303818588803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b5050505050565b61085467a4b8b212eba4763360c01b610f89565b61086867c1a85f365e95d34d60c01b610f89565b61087c6790b5229d734a941c60c01b610f89565b61089067ac3f074a4efdca6b60c01b610f89565b610898611927565b6108ac6798f9934e6ef7cbdb60c01b610f89565b6108c067e105cf1835a3cbf760c01b610f89565b6108d467f6d867ceaa041b4d60c01b610f89565b6108e867f4c16aa93970ab1860c01b610f89565b6108fc6799f0d47c2e8fc45e60c01b610f89565b610904610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161093e929190612b25565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a4261121b565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612af6565b60405180910390fd5b610aa182611272565b610aad828260016112cd565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612bc0565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ba6671081c828c013517c60c01b610f89565b610bba67ff98dad8cadf3d9a60c01b610f89565b610bce675e20c6fc536cd58060c01b610f89565b600160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000610c12673dcfe60a9f5f5da860c01b610f89565b610c26678331e2da03262f5460c01b610f89565b610c3a67d782c2e8006a9a4960c01b610f89565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b610c7467b73e6846f32599a860c01b610f89565b610c886723bab6b7c9557bb260c01b610f89565b610c9c67c978b9390b92acfa60c01b610f89565b610ca4610f8c565b610cb86758c04d70e2c0fe0760c01b610f89565b610ccc6758a54e8acfb0b3f060c01b610f89565b610d1b848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b50505050565b6000610d37673fefbc09e2d65fcc60c01b610f89565b610d4b674ac24fed240dae7f60c01b610f89565b610d5f675ac9d6ff41bf388b60c01b610f89565b610d67610bfc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d9f91906126fd565b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de09190612bf5565b905090565b610df967089085103b5d40c760c01b610f89565b60008060019054906101000a900460ff16159050808015610e2a5750600160008054906101000a900460ff1660ff16105b80610e575750610e3930611a8b565b158015610e565750600160008054906101000a900460ff1660ff16145b5b610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612c94565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ed3576001600060016101000a81548160ff0219169083151502179055505b610ee7674e573be3273a425960c01b610f89565b610efb67b04e9ca74a1dc70f60c01b610f89565b610f0f67a41c241defa654ec60c01b610f89565b610f2367722539ebdccfc8b960c01b610f89565b610f2c82611aae565b8015610f855760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f7c9190612cfc565b60405180910390a15b5050565b50565b610fa067bfd421e6631a158760c01b610f89565b610fb467845ea3fb25be09b260c01b610f89565b610fc867dae3f2bf40dea43060c01b610f89565b610fdc67a3421c0f70c6c2ad60c01b610f89565b610fe4610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561102e575061102d67d4e2eb5ba6c238d260c01b611bde565b5b806110a257506001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156110a157506110a0673131787c58fb0cdb60c01b611bde565b5b5b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612d63565b60405180910390fd5b6110f5671069db5f496dbd0660c01b610f89565b565b61110b67263035bb37aa06d160c01b610f89565b61111f674da9f9d954c1951760c01b610f89565b61113367640cbd2d5dc7c75e60c01b610f89565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161115c9190612dfd565b60006040518083038185875af1925050503d8060008114611199576040519150601f19603f3d011682016040523d82523d6000602084013e61119e565b606091505b50915091506111b7674b631257e68216eb60c01b610f89565b6111cb6783ebeb59e2f34cca60c01b610f89565b81611200576111e46759f30e531f9ea25f60c01b610f89565b6111f8674692c14c59360cde60c01b610f89565b805160208201fd5b6112146766b3697559da2bf460c01b610f89565b5050505050565b60006112497f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112866751144b62438d57cf60c01b610f89565b61129a670ac2cb6355a53b8d60c01b610f89565b6112ae67ed2e3f300a9c276860c01b610f89565b6112c267095aa869c694ffe960c01b610f89565b6112ca611927565b50565b6112f97f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611bf3565b60000160009054906101000a900460ff161561131d5761131883611bfd565b611436565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561138557506040513d601f19601f820116820180604052508101906113829190612e29565b60015b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ec8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612f5a565b60405180910390fd5b50611435838383611cb6565b5b505050565b50565b61145267ab1249ee5f609c5960c01b61143b565b61146667e9d28ffc5217f49460c01b61143b565b61147a677f62f43d3fcc921960c01b61143b565b61148e67b585e78c9c1baca960c01b61143b565b611496610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612fec565b60405180910390fd5b611517671deaffe1e91532d360c01b61143b565b565b600061152f6720ac98e939de350760c01b610f89565b611543672ae6921274c7893b60c01b610f89565b6115576792d083c11849074160c01b610f89565b600061156283611ce2565b905061157867b4d983dfa8310faf60c01b610f89565b61158c67dd9daa918030a7df60c01b610f89565b6115f2848061014001906115a09190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d1290919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5761165a674c82ebdca0fc26e860c01b610f89565b61166e675c163536e5ff386260c01b610f89565b611682670568bc5424c23ea860c01b610f89565b60019150506116ce565b6116a06764fd947bcf85ae9a60c01b610f89565b6116b467ec16d317d6d40e3760c01b610f89565b6116c86732d44e11cf5a804660c01b610f89565b60009150505b92915050565b6116e8678566f17aeb82b25660c01b610f89565b6116fc67d9f70333b53965e960c01b610f89565b61171067236d25bd80d0bc0f60c01b610f89565b611724670754a3f296541a8260c01b610f89565b80602001356001600081819054906101000a90046bffffffffffffffffffffffff168092919061175390613024565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906130a5565b60405180910390fd5b6117e36727f3136213cd9d6d60c01b610f89565b50565b6117fa67ca47e48c745f218060c01b61143b565b61180e67aa4dcb26a8800d8160c01b61143b565b61182267583cd7cbacafaf0f60c01b61143b565b6000811461190f5761183e6725200ee2f571393960c01b61143b565b61185267687ed2003b3b530260c01b61143b565b61186667f40eed13435d849860c01b61143b565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118ae906130eb565b600060405180830381858888f193505050503d80600081146118ec576040519150601f19603f3d011682016040523d82523d6000602084013e6118f1565b606091505b5050905061190967ca15a910c2f1fd6f60c01b61143b565b50611924565b61192367e4cf72238c35b10360c01b61143b565b5b50565b61193b670c0c800354d9600160c01b610f89565b61194f67acd6c58705f889b960c01b610f89565b6119636733d2f0ed41d5acdf60c01b610f89565b611977678ad299c73bae7f0660c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156119e457506119e367c90b615b2a8e569c60c01b611bde565b5b80611a3657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611a355750611a3467237645d75bc6b30460c01b611bde565b5b5b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061314c565b60405180910390fd5b611a8967e6e48ef418f50e1c60c01b610f89565b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611ac2675e194caffffc89c960c01b610f89565b611ad667dc82b8d1a8907c3160c01b610f89565b806001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2b671b44aec3248ff5c460c01b610f89565b611b3f67b4aaa1288b890b5b60c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de60405160405180910390a350565b600060019050919050565b6000819050919050565b6000819050919050565b611c0681611a8b565b611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906131de565b60405180910390fd5b80611c727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cbf83611d39565b600082511180611ccc5750805b15611cdd57611cdb8383611d88565b505b505050565b600081604051602001611cf59190613276565b604051602081830303815290604052805190602001209050919050565b6000806000611d218585611db5565b91509150611d2e81611e07565b819250505092915050565b611d4281611bfd565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611dad838360405180606001604052806027815260200161355c60279139611f75565b905092915050565b600080604183511415611df75760008060006020860151925060408601519150606086015160001a9050611deb87828585611ffb565b94509450505050611e00565b60006002915091505b9250929050565b60006004811115611e1b57611e1a61329c565b5b816004811115611e2e57611e2d61329c565b5b1415611e3957611f72565b60016004811115611e4d57611e4c61329c565b5b816004811115611e6057611e5f61329c565b5b1415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613317565b60405180910390fd5b60026004811115611eb557611eb461329c565b5b816004811115611ec857611ec761329c565b5b1415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613383565b60405180910390fd5b60036004811115611f1d57611f1c61329c565b5b816004811115611f3057611f2f61329c565b5b1415611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613415565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f9f9190612dfd565b600060405180830381855af49150503d8060008114611fda576040519150601f19603f3d011682016040523d82523d6000602084013e611fdf565b606091505b5091509150611ff0868383876120de565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156120365760006003915091506120d5565b60006001878787876040516000815260200160405260405161205b9493929190613444565b6020604051602081039080840390855afa15801561207d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cc576000600192509250506120d5565b80600092509250505b94509492505050565b6060831561214157600083511415612139576120f985611a8b565b612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906134d5565b60405180910390fd5b5b82905061214c565b61214b8383612154565b5b949350505050565b6000825111156121675781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b9190613539565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126121dd576121dc6121b8565b5b8235905067ffffffffffffffff8111156121fa576121f96121bd565b5b602083019150836020820283011115612216576122156121c2565b5b9250929050565b60008083601f840112612233576122326121b8565b5b8235905067ffffffffffffffff8111156122505761224f6121bd565b5b60208301915083602082028301111561226c5761226b6121c2565b5b9250929050565b6000806000806040858703121561228d5761228c6121ae565b5b600085013567ffffffffffffffff8111156122ab576122aa6121b3565b5b6122b7878288016121c7565b9450945050602085013567ffffffffffffffff8111156122da576122d96121b3565b5b6122e68782880161221d565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231f826122f4565b9050919050565b61232f81612314565b811461233a57600080fd5b50565b60008135905061234c81612326565b92915050565b600060208284031215612368576123676121ae565b5b60006123768482850161233d565b91505092915050565b600080fd5b6000610160828403121561239b5761239a61237f565b5b81905092915050565b6000819050919050565b6123b7816123a4565b81146123c257600080fd5b50565b6000813590506123d4816123ae565b92915050565b6000819050919050565b6123ed816123da565b81146123f857600080fd5b50565b60008135905061240a816123e4565b92915050565b600080600060608486031215612429576124286121ae565b5b600084013567ffffffffffffffff811115612447576124466121b3565b5b61245386828701612384565b9350506020612464868287016123c5565b9250506040612475868287016123fb565b9150509250925092565b612488816123da565b82525050565b60006020820190506124a3600083018461247f565b92915050565b60006124b4826122f4565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b600080604083850312156124fe576124fd6121ae565b5b600061250c858286016124d2565b925050602061251d858286016123fb565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125758261252c565b810181811067ffffffffffffffff821117156125945761259361253d565b5b80604052505050565b60006125a76121a4565b90506125b3828261256c565b919050565b600067ffffffffffffffff8211156125d3576125d261253d565b5b6125dc8261252c565b9050602081019050919050565b82818337600083830152505050565b600061260b612606846125b8565b61259d565b90508281526020810184848401111561262757612626612527565b5b6126328482856125e9565b509392505050565b600082601f83011261264f5761264e6121b8565b5b813561265f8482602086016125f8565b91505092915050565b6000806040838503121561267f5761267e6121ae565b5b600061268d8582860161233d565b925050602083013567ffffffffffffffff8111156126ae576126ad6121b3565b5b6126ba8582860161263a565b9150509250929050565b6126cd816123a4565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6126f781612314565b82525050565b600060208201905061271260008301846126ee565b92915050565b6000819050919050565b600061273d612738612733846122f4565b612718565b6122f4565b9050919050565b600061274f82612722565b9050919050565b600061276182612744565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b60008083601f8401126127a8576127a76121b8565b5b8235905067ffffffffffffffff8111156127c5576127c46121bd565b5b6020830191508360018202830111156127e1576127e06121c2565b5b9250929050565b60008060008060608587031215612802576128016121ae565b5b60006128108782880161233d565b9450506020612821878288016123fb565b935050604085013567ffffffffffffffff811115612842576128416121b3565b5b61284e87828801612792565b925092505092959194509250565b600082825260208201905092915050565b7f77726f6e67206172726179206c656e6774687300000000000000000000000000600082015250565b60006128a360138361285c565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261293457612933612908565b5b80840192508235915067ffffffffffffffff8211156129565761295561290d565b5b60208301925060018202360383131561297257612971612912565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b4826123da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129e7576129e661297a565b5b600182019050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612a4e602c8361285c565b9150612a59826129f2565b604082019050919050565b60006020820190508181036000830152612a7d81612a41565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ae0602c8361285c565b9150612aeb82612a84565b604082019050919050565b60006020820190508181036000830152612b0f81612ad3565b9050919050565b612b1f816124a9565b82525050565b6000604082019050612b3a6000830185612b16565b612b47602083018461247f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612baa60388361285c565b9150612bb582612b4e565b604082019050919050565b60006020820190508181036000830152612bd981612b9d565b9050919050565b600081519050612bef816123e4565b92915050565b600060208284031215612c0b57612c0a6121ae565b5b6000612c1984828501612be0565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612c7e602e8361285c565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612ce6612ce1612cdc84612cb4565b612718565b612cbe565b9050919050565b612cf681612ccb565b82525050565b6000602082019050612d116000830184612ced565b92915050565b7f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74600082015250565b6000612d4d60208361285c565b9150612d5882612d17565b602082019050919050565b60006020820190508181036000830152612d7c81612d40565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612db7578082015181840152602081019050612d9c565b83811115612dc6576000848401525b50505050565b6000612dd782612d83565b612de18185612d8e565b9350612df1818560208601612d99565b80840191505092915050565b6000612e098284612dcc565b915081905092915050565b600081519050612e23816123ae565b92915050565b600060208284031215612e3f57612e3e6121ae565b5b6000612e4d84828501612e14565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612eb2602e8361285c565b9150612ebd82612e56565b604082019050919050565b60006020820190508181036000830152612ee181612ea5565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612f4460298361285c565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612fd660248361285c565b9150612fe182612f7a565b604082019050919050565b6000602082019050818103600083015261300581612fc9565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061302f8261300c565b91506bffffffffffffffffffffffff82141561304e5761304d61297a565b5b600182019050919050565b7f6163636f756e743a20696e76616c6964206e6f6e636500000000000000000000600082015250565b600061308f60168361285c565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b50565b60006130d5600083612d8e565b91506130e0826130c5565b600082019050919050565b60006130f6826130c8565b9150819050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613136600a8361285c565b915061314182613100565b602082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006131c8602d8361285c565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061323f601c836131fe565b915061324a82613209565b601c82019050919050565b6000819050919050565b61327061326b826123a4565b613255565b82525050565b600061328182613232565b915061328d828461325f565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061330160188361285c565b915061330c826132cb565b602082019050919050565b60006020820190508181036000830152613330816132f4565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061336d601f8361285c565b915061337882613337565b602082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ff60228361285c565b915061340a826133a3565b604082019050919050565b6000602082019050818103600083015261342e816133f2565b9050919050565b61343e81612cbe565b82525050565b600060808201905061345960008301876126c4565b6134666020830186613435565b61347360408301856126c4565b61348060608301846126c4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006134bf601d8361285c565b91506134ca82613489565b602082019050919050565b600060208201905081810360008301526134ee816134b2565b9050919050565b600081519050919050565b600061350b826134f5565b613515818561285c565b9350613525818560208601612d99565b61352e8161252c565b840191505092915050565b600060208201905081810360008301526135538184613500565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d15b7d1346a3528350a214376c0ce8c50b5131822417d37282d9db07d885ede364736f6c634300080c0033"; - -type SimpleAccountFactoryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SimpleAccountFactoryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SimpleAccountFactory__factory extends ContractFactory { - constructor(...args: SimpleAccountFactoryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _entryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - _entryPoint, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _entryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(_entryPoint, overrides || {}); - } - override attach(address: string): SimpleAccountFactory { - return super.attach(address) as SimpleAccountFactory; - } - override connect(signer: Signer): SimpleAccountFactory__factory { - return super.connect(signer) as SimpleAccountFactory__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SimpleAccountFactoryInterface { - return new utils.Interface(_abi) as SimpleAccountFactoryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SimpleAccountFactory { - return new Contract( - address, - _abi, - signerOrProvider - ) as SimpleAccountFactory; - } -} diff --git a/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts b/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts deleted file mode 100644 index 90a15f54..00000000 --- a/src/contracts/factories/src/aa-4337/samples/SimpleAccount__factory.ts +++ /dev/null @@ -1,421 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../../common"; -import type { - SimpleAccount, - SimpleAccountInterface, -} from "../../../../src/aa-4337/samples/SimpleAccount"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "beacon", - type: "address", - }, - ], - name: "BeaconUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "SimpleAccountInitialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "anOwner", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "validationData", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039843803806200398483398181016040528101906200006a91906200026d565b6200008667e236899807012fad60c01b6200012560201b60201c565b620000a2670e5c6885a269e25060c01b6200012560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620000f26721442c76cf437bc460c01b6200012560201b60201c565b6200010e67575c2a8a70ee263c60c01b6200012560201b60201c565b6200011e6200012860201b60201c565b5062000383565b50565b600060019054906101000a900460ff16156200017b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001729062000326565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001e4919062000366565b60405180910390a15b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022182620001f4565b9050919050565b6000620002358262000214565b9050919050565b620002478162000228565b81146200025357600080fd5b50565b60008151905062000267816200023c565b92915050565b600060208284031215620002865762000285620001ef565b5b6000620002968482850162000256565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200030e6027836200029f565b91506200031b82620002b0565b604082019050919050565b600060208201905081810360008301526200034181620002ff565b9050919050565b600060ff82169050919050565b620003608162000348565b82525050565b60006020820190506200037d600083018462000355565b92915050565b60805160a0516135b8620003cc60003960008181610c3c0152611b7a0152600081816104c9015281816105580152818161097601528181610a050152610ab501526135b86000f3fe6080604052600436106100c65760003560e01c806352d1902d1161007f578063b0d691fe11610059578063b0d691fe14610231578063b61d27f61461025c578063c399ec8814610285578063c4d66de8146102b0576100cd565b806352d1902d146101b05780638da5cb5b146101db578063affed0e014610206576100cd565b806318dfb3c7146100d25780633659cfe6146100fb5780633a871cdd146101245780634a58db19146101615780634d44560d1461016b5780634f1ef28614610194576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100f960048036038101906100f49190612273565b6102d9565b005b34801561010757600080fd5b50610122600480360381019061011d9190612352565b6104c7565b005b34801561013057600080fd5b5061014b60048036038101906101469190612410565b610650565b604051610158919061248e565b60405180910390f35b61016961078f565b005b34801561017757600080fd5b50610192600480360381019061018d91906124e7565b610840565b005b6101ae60048036038101906101a99190612668565b610974565b005b3480156101bc57600080fd5b506101c5610ab1565b6040516101d291906126d3565b60405180910390f35b3480156101e757600080fd5b506101f0610b6a565b6040516101fd91906126fd565b60405180910390f35b34801561021257600080fd5b5061021b610b90565b604051610228919061248e565b60405180910390f35b34801561023d57600080fd5b50610246610bfc565b6040516102539190612777565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906127e8565b610c60565b005b34801561029157600080fd5b5061029a610d21565b6040516102a7919061248e565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190612352565b610de5565b005b6102ed67546848a3c5b3f73860c01b610f89565b6103016753efada159d4cd4560c01b610f89565b6103156734079e686a9cb03560c01b610f89565b61031d610f8c565b6103316732e2f8ab2cb49ff060c01b610f89565b61034567d8fde5a555ab20b260c01b610f89565b610359671322da22e1ab1e1160c01b610f89565b8181905084849050146103a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610398906128b9565b60405180910390fd5b6103b567fb2fe48ef707ad7160c01b610f89565b6103c967c8d0b2db45874f8060c01b610f89565b6103dd67ac5214eaf6dd9bbd60c01b610f89565b60005b848490508110156104c0576103ff67c7feee239b47870b60c01b610f89565b61041367ef867efcae378f5c60c01b610f89565b6104ad858583818110610429576104286128d9565b5b905060200201602081019061043e9190612352565b6000858585818110610453576104526128d9565b5b90506020028101906104659190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b80806104b8906129a9565b9150506103e0565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661059561121b565b73ffffffffffffffffffffffffffffffffffffffff16146105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e290612af6565b60405180910390fd5b6105f481611272565b61064d81600067ffffffffffffffff8111156106135761061261253d565b5b6040519080825280601f01601f1916602001820160405280156106455781602001600182028036833780820191505090505b5060006112cd565b50565b600061066667cc5c47196db5bd6160c01b61143b565b61067a678b55e749b3c352ab60c01b61143b565b61068e67e6442311764077fa60c01b61143b565b61069661143e565b6106aa671589e0478f7a186060c01b61143b565b6106b48484611519565b90506106ca67d37e8b3807985e7360c01b61143b565b6106de67c2c62d2bb50a980360c01b61143b565b60008480604001906106f09190612917565b905014156107425761070c6714643eaa19656f6660c01b61143b565b61072067cc382f158ab6697a60c01b61143b565b610734674eed3335c27922c660c01b61143b565b61073d846116d4565b610757565b610756672064a1156b0a7c3160c01b61143b565b5b61076b67f68d6061ffc7c0c960c01b61143b565b61077f67bcbc4a08bf13f3b260c01b61143b565b610788826117e6565b9392505050565b6107a367f09d2eb586b30e3160c01b610f89565b6107b767adcd03aa01933f5d60c01b610f89565b6107cb671b7af626582ba27260c01b610f89565b6107d3610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b815260040161080c91906126fd565b6000604051808303818588803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b5050505050565b61085467a4b8b212eba4763360c01b610f89565b61086867c1a85f365e95d34d60c01b610f89565b61087c6790b5229d734a941c60c01b610f89565b61089067ac3f074a4efdca6b60c01b610f89565b610898611927565b6108ac6798f9934e6ef7cbdb60c01b610f89565b6108c067e105cf1835a3cbf760c01b610f89565b6108d467f6d867ceaa041b4d60c01b610f89565b6108e867f4c16aa93970ab1860c01b610f89565b6108fc6799f0d47c2e8fc45e60c01b610f89565b610904610bfc565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161093e929190612b25565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fa90612a64565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a4261121b565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612af6565b60405180910390fd5b610aa182611272565b610aad828260016112cd565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612bc0565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ba6671081c828c013517c60c01b610f89565b610bba67ff98dad8cadf3d9a60c01b610f89565b610bce675e20c6fc536cd58060c01b610f89565b600160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000610c12673dcfe60a9f5f5da860c01b610f89565b610c26678331e2da03262f5460c01b610f89565b610c3a67d782c2e8006a9a4960c01b610f89565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b610c7467b73e6846f32599a860c01b610f89565b610c886723bab6b7c9557bb260c01b610f89565b610c9c67c978b9390b92acfa60c01b610f89565b610ca4610f8c565b610cb86758c04d70e2c0fe0760c01b610f89565b610ccc6758a54e8acfb0b3f060c01b610f89565b610d1b848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110f7565b50505050565b6000610d37673fefbc09e2d65fcc60c01b610f89565b610d4b674ac24fed240dae7f60c01b610f89565b610d5f675ac9d6ff41bf388b60c01b610f89565b610d67610bfc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d9f91906126fd565b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de09190612bf5565b905090565b610df967089085103b5d40c760c01b610f89565b60008060019054906101000a900460ff16159050808015610e2a5750600160008054906101000a900460ff1660ff16105b80610e575750610e3930611a8b565b158015610e565750600160008054906101000a900460ff1660ff16145b5b610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612c94565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ed3576001600060016101000a81548160ff0219169083151502179055505b610ee7674e573be3273a425960c01b610f89565b610efb67b04e9ca74a1dc70f60c01b610f89565b610f0f67a41c241defa654ec60c01b610f89565b610f2367722539ebdccfc8b960c01b610f89565b610f2c82611aae565b8015610f855760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f7c9190612cfc565b60405180910390a15b5050565b50565b610fa067bfd421e6631a158760c01b610f89565b610fb467845ea3fb25be09b260c01b610f89565b610fc867dae3f2bf40dea43060c01b610f89565b610fdc67a3421c0f70c6c2ad60c01b610f89565b610fe4610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561102e575061102d67d4e2eb5ba6c238d260c01b611bde565b5b806110a257506001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156110a157506110a0673131787c58fb0cdb60c01b611bde565b5b5b6110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612d63565b60405180910390fd5b6110f5671069db5f496dbd0660c01b610f89565b565b61110b67263035bb37aa06d160c01b610f89565b61111f674da9f9d954c1951760c01b610f89565b61113367640cbd2d5dc7c75e60c01b610f89565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161115c9190612dfd565b60006040518083038185875af1925050503d8060008114611199576040519150601f19603f3d011682016040523d82523d6000602084013e61119e565b606091505b50915091506111b7674b631257e68216eb60c01b610f89565b6111cb6783ebeb59e2f34cca60c01b610f89565b81611200576111e46759f30e531f9ea25f60c01b610f89565b6111f8674692c14c59360cde60c01b610f89565b805160208201fd5b6112146766b3697559da2bf460c01b610f89565b5050505050565b60006112497f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112866751144b62438d57cf60c01b610f89565b61129a670ac2cb6355a53b8d60c01b610f89565b6112ae67ed2e3f300a9c276860c01b610f89565b6112c267095aa869c694ffe960c01b610f89565b6112ca611927565b50565b6112f97f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611bf3565b60000160009054906101000a900460ff161561131d5761131883611bfd565b611436565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561138557506040513d601f19601f820116820180604052508101906113829190612e29565b60015b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90612ec8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612f5a565b60405180910390fd5b50611435838383611cb6565b5b505050565b50565b61145267ab1249ee5f609c5960c01b61143b565b61146667e9d28ffc5217f49460c01b61143b565b61147a677f62f43d3fcc921960c01b61143b565b61148e67b585e78c9c1baca960c01b61143b565b611496610bfc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90612fec565b60405180910390fd5b611517671deaffe1e91532d360c01b61143b565b565b600061152f6720ac98e939de350760c01b610f89565b611543672ae6921274c7893b60c01b610f89565b6115576792d083c11849074160c01b610f89565b600061156283611ce2565b905061157867b4d983dfa8310faf60c01b610f89565b61158c67dd9daa918030a7df60c01b610f89565b6115f2848061014001906115a09190612917565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d1290919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5761165a674c82ebdca0fc26e860c01b610f89565b61166e675c163536e5ff386260c01b610f89565b611682670568bc5424c23ea860c01b610f89565b60019150506116ce565b6116a06764fd947bcf85ae9a60c01b610f89565b6116b467ec16d317d6d40e3760c01b610f89565b6116c86732d44e11cf5a804660c01b610f89565b60009150505b92915050565b6116e8678566f17aeb82b25660c01b610f89565b6116fc67d9f70333b53965e960c01b610f89565b61171067236d25bd80d0bc0f60c01b610f89565b611724670754a3f296541a8260c01b610f89565b80602001356001600081819054906101000a90046bffffffffffffffffffffffff168092919061175390613024565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906130a5565b60405180910390fd5b6117e36727f3136213cd9d6d60c01b610f89565b50565b6117fa67ca47e48c745f218060c01b61143b565b61180e67aa4dcb26a8800d8160c01b61143b565b61182267583cd7cbacafaf0f60c01b61143b565b6000811461190f5761183e6725200ee2f571393960c01b61143b565b61185267687ed2003b3b530260c01b61143b565b61186667f40eed13435d849860c01b61143b565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118ae906130eb565b600060405180830381858888f193505050503d80600081146118ec576040519150601f19603f3d011682016040523d82523d6000602084013e6118f1565b606091505b5050905061190967ca15a910c2f1fd6f60c01b61143b565b50611924565b61192367e4cf72238c35b10360c01b61143b565b5b50565b61193b670c0c800354d9600160c01b610f89565b61194f67acd6c58705f889b960c01b610f89565b6119636733d2f0ed41d5acdf60c01b610f89565b611977678ad299c73bae7f0660c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156119e457506119e367c90b615b2a8e569c60c01b611bde565b5b80611a3657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611a355750611a3467237645d75bc6b30460c01b611bde565b5b5b611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c9061314c565b60405180910390fd5b611a8967e6e48ef418f50e1c60c01b610f89565b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611ac2675e194caffffc89c960c01b610f89565b611ad667dc82b8d1a8907c3160c01b610f89565b806001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2b671b44aec3248ff5c460c01b610f89565b611b3f67b4aaa1288b890b5b60c01b610f89565b6001600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de60405160405180910390a350565b600060019050919050565b6000819050919050565b6000819050919050565b611c0681611a8b565b611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c906131de565b60405180910390fd5b80611c727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611be9565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cbf83611d39565b600082511180611ccc5750805b15611cdd57611cdb8383611d88565b505b505050565b600081604051602001611cf59190613276565b604051602081830303815290604052805190602001209050919050565b6000806000611d218585611db5565b91509150611d2e81611e07565b819250505092915050565b611d4281611bfd565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611dad838360405180606001604052806027815260200161355c60279139611f75565b905092915050565b600080604183511415611df75760008060006020860151925060408601519150606086015160001a9050611deb87828585611ffb565b94509450505050611e00565b60006002915091505b9250929050565b60006004811115611e1b57611e1a61329c565b5b816004811115611e2e57611e2d61329c565b5b1415611e3957611f72565b60016004811115611e4d57611e4c61329c565b5b816004811115611e6057611e5f61329c565b5b1415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613317565b60405180910390fd5b60026004811115611eb557611eb461329c565b5b816004811115611ec857611ec761329c565b5b1415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613383565b60405180910390fd5b60036004811115611f1d57611f1c61329c565b5b816004811115611f3057611f2f61329c565b5b1415611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613415565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f9f9190612dfd565b600060405180830381855af49150503d8060008114611fda576040519150601f19603f3d011682016040523d82523d6000602084013e611fdf565b606091505b5091509150611ff0868383876120de565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156120365760006003915091506120d5565b60006001878787876040516000815260200160405260405161205b9493929190613444565b6020604051602081039080840390855afa15801561207d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120cc576000600192509250506120d5565b80600092509250505b94509492505050565b6060831561214157600083511415612139576120f985611a8b565b612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906134d5565b60405180910390fd5b5b82905061214c565b61214b8383612154565b5b949350505050565b6000825111156121675781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b9190613539565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126121dd576121dc6121b8565b5b8235905067ffffffffffffffff8111156121fa576121f96121bd565b5b602083019150836020820283011115612216576122156121c2565b5b9250929050565b60008083601f840112612233576122326121b8565b5b8235905067ffffffffffffffff8111156122505761224f6121bd565b5b60208301915083602082028301111561226c5761226b6121c2565b5b9250929050565b6000806000806040858703121561228d5761228c6121ae565b5b600085013567ffffffffffffffff8111156122ab576122aa6121b3565b5b6122b7878288016121c7565b9450945050602085013567ffffffffffffffff8111156122da576122d96121b3565b5b6122e68782880161221d565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231f826122f4565b9050919050565b61232f81612314565b811461233a57600080fd5b50565b60008135905061234c81612326565b92915050565b600060208284031215612368576123676121ae565b5b60006123768482850161233d565b91505092915050565b600080fd5b6000610160828403121561239b5761239a61237f565b5b81905092915050565b6000819050919050565b6123b7816123a4565b81146123c257600080fd5b50565b6000813590506123d4816123ae565b92915050565b6000819050919050565b6123ed816123da565b81146123f857600080fd5b50565b60008135905061240a816123e4565b92915050565b600080600060608486031215612429576124286121ae565b5b600084013567ffffffffffffffff811115612447576124466121b3565b5b61245386828701612384565b9350506020612464868287016123c5565b9250506040612475868287016123fb565b9150509250925092565b612488816123da565b82525050565b60006020820190506124a3600083018461247f565b92915050565b60006124b4826122f4565b9050919050565b6124c4816124a9565b81146124cf57600080fd5b50565b6000813590506124e1816124bb565b92915050565b600080604083850312156124fe576124fd6121ae565b5b600061250c858286016124d2565b925050602061251d858286016123fb565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125758261252c565b810181811067ffffffffffffffff821117156125945761259361253d565b5b80604052505050565b60006125a76121a4565b90506125b3828261256c565b919050565b600067ffffffffffffffff8211156125d3576125d261253d565b5b6125dc8261252c565b9050602081019050919050565b82818337600083830152505050565b600061260b612606846125b8565b61259d565b90508281526020810184848401111561262757612626612527565b5b6126328482856125e9565b509392505050565b600082601f83011261264f5761264e6121b8565b5b813561265f8482602086016125f8565b91505092915050565b6000806040838503121561267f5761267e6121ae565b5b600061268d8582860161233d565b925050602083013567ffffffffffffffff8111156126ae576126ad6121b3565b5b6126ba8582860161263a565b9150509250929050565b6126cd816123a4565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6126f781612314565b82525050565b600060208201905061271260008301846126ee565b92915050565b6000819050919050565b600061273d612738612733846122f4565b612718565b6122f4565b9050919050565b600061274f82612722565b9050919050565b600061276182612744565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b60008083601f8401126127a8576127a76121b8565b5b8235905067ffffffffffffffff8111156127c5576127c46121bd565b5b6020830191508360018202830111156127e1576127e06121c2565b5b9250929050565b60008060008060608587031215612802576128016121ae565b5b60006128108782880161233d565b9450506020612821878288016123fb565b935050604085013567ffffffffffffffff811115612842576128416121b3565b5b61284e87828801612792565b925092505092959194509250565b600082825260208201905092915050565b7f77726f6e67206172726179206c656e6774687300000000000000000000000000600082015250565b60006128a360138361285c565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261293457612933612908565b5b80840192508235915067ffffffffffffffff8211156129565761295561290d565b5b60208301925060018202360383131561297257612971612912565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129b4826123da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129e7576129e661297a565b5b600182019050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612a4e602c8361285c565b9150612a59826129f2565b604082019050919050565b60006020820190508181036000830152612a7d81612a41565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ae0602c8361285c565b9150612aeb82612a84565b604082019050919050565b60006020820190508181036000830152612b0f81612ad3565b9050919050565b612b1f816124a9565b82525050565b6000604082019050612b3a6000830185612b16565b612b47602083018461247f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612baa60388361285c565b9150612bb582612b4e565b604082019050919050565b60006020820190508181036000830152612bd981612b9d565b9050919050565b600081519050612bef816123e4565b92915050565b600060208284031215612c0b57612c0a6121ae565b5b6000612c1984828501612be0565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612c7e602e8361285c565b9150612c8982612c22565b604082019050919050565b60006020820190508181036000830152612cad81612c71565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612ce6612ce1612cdc84612cb4565b612718565b612cbe565b9050919050565b612cf681612ccb565b82525050565b6000602082019050612d116000830184612ced565b92915050565b7f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74600082015250565b6000612d4d60208361285c565b9150612d5882612d17565b602082019050919050565b60006020820190508181036000830152612d7c81612d40565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612db7578082015181840152602081019050612d9c565b83811115612dc6576000848401525b50505050565b6000612dd782612d83565b612de18185612d8e565b9350612df1818560208601612d99565b80840191505092915050565b6000612e098284612dcc565b915081905092915050565b600081519050612e23816123ae565b92915050565b600060208284031215612e3f57612e3e6121ae565b5b6000612e4d84828501612e14565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000612eb2602e8361285c565b9150612ebd82612e56565b604082019050919050565b60006020820190508181036000830152612ee181612ea5565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000612f4460298361285c565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000612fd660248361285c565b9150612fe182612f7a565b604082019050919050565b6000602082019050818103600083015261300581612fc9565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061302f8261300c565b91506bffffffffffffffffffffffff82141561304e5761304d61297a565b5b600182019050919050565b7f6163636f756e743a20696e76616c6964206e6f6e636500000000000000000000600082015250565b600061308f60168361285c565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b50565b60006130d5600083612d8e565b91506130e0826130c5565b600082019050919050565b60006130f6826130c8565b9150819050919050565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000613136600a8361285c565b915061314182613100565b602082019050919050565b6000602082019050818103600083015261316581613129565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006131c8602d8361285c565b91506131d38261316c565b604082019050919050565b600060208201905081810360008301526131f7816131bb565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061323f601c836131fe565b915061324a82613209565b601c82019050919050565b6000819050919050565b61327061326b826123a4565b613255565b82525050565b600061328182613232565b915061328d828461325f565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061330160188361285c565b915061330c826132cb565b602082019050919050565b60006020820190508181036000830152613330816132f4565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061336d601f8361285c565b915061337882613337565b602082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ff60228361285c565b915061340a826133a3565b604082019050919050565b6000602082019050818103600083015261342e816133f2565b9050919050565b61343e81612cbe565b82525050565b600060808201905061345960008301876126c4565b6134666020830186613435565b61347360408301856126c4565b61348060608301846126c4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006134bf601d8361285c565b91506134ca82613489565b602082019050919050565b600060208201905081810360008301526134ee816134b2565b9050919050565b600081519050919050565b600061350b826134f5565b613515818561285c565b9350613525818560208601612d99565b61352e8161252c565b840191505092915050565b600060208201905081810360008301526135538184613500565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d15b7d1346a3528350a214376c0ce8c50b5131822417d37282d9db07d885ede364736f6c634300080c0033"; - -type SimpleAccountConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SimpleAccountConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SimpleAccount__factory extends ContractFactory { - constructor(...args: SimpleAccountConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - anEntryPoint, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(anEntryPoint, overrides || {}); - } - override attach(address: string): SimpleAccount { - return super.attach(address) as SimpleAccount; - } - override connect(signer: Signer): SimpleAccount__factory { - return super.connect(signer) as SimpleAccount__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SimpleAccountInterface { - return new utils.Interface(_abi) as SimpleAccountInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SimpleAccount { - return new Contract(address, _abi, signerOrProvider) as SimpleAccount; - } -} diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts index 88c95d07..70a438db 100644 --- a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts +++ b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts @@ -41,11 +41,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "owner", @@ -75,11 +70,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "owner", @@ -105,7 +95,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b506040516200555f3803806200555f83398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b614003806200155c83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516113ca620001926000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b154c3ffc7110e8c6ea6ca766e29ec620b1647851e431a63e392598f5211f5a964736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620040033803806200400383398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613e796200018a60003960008181610b360152610dc7015260008181610bf201528181610c8101528181610ee201528181610f7101526110210152613e796000f3fe6080604052600436106101695760003560e01c80634a58db19116100d15780638da5cb5b1161008a578063b61d27f611610064578063b61d27f61461051a578063c0c53b8b14610543578063c399ec881461056c578063f23a6e611461059757610170565b80638da5cb5b14610499578063affed0e0146104c4578063b0d691fe146104ef57610170565b80634a58db19146103c95780634d44560d146103d35780634f1ef286146103fc57806352d1902d1461041857806379cbc5fa146104435780637b1039991461046e57610170565b806320c13b0b1161012357806320c13b0b14610293578063245a7bfc146102d0578063249cb3fa146102fb5780633659cfe6146103385780633a871cdd146103615780633ad59dbc1461039e57610170565b806223de2914610175578063150b7a021461019e5780631626ba7e146101db57806318dfb3c7146102185780631a5da6c8146102415780631b71bb6e1461026a57610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c600480360381019061019791906122f9565b6105d4565b005b3480156101aa57600080fd5b506101c560048036038101906101c091906123c8565b610619565b6040516101d2919061248b565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906124dc565b61062e565b60405161020f919061248b565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e8565b610711565b005b34801561024d57600080fd5b5061026860048036038101906102639190612669565b610823565b005b34801561027657600080fd5b50610291600480360381019061028c9190612669565b610937565b005b34801561029f57600080fd5b506102ba60048036038101906102b59190612696565b610a4e565b6040516102c7919061248b565b60405180910390f35b3480156102dc57600080fd5b506102e5610b34565b6040516102f29190612726565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612741565b610b58565b60405161032f9190612790565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612669565b610bf0565b005b34801561036d57600080fd5b50610388600480360381019061038391906127d0565b610d79565b604051610395919061284e565b60405180910390f35b3480156103aa57600080fd5b506103b3610dc3565b6040516103c09190612726565b60405180910390f35b6103d1610deb565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906128a7565b610e60565b005b61041660048036038101906104119190612a28565b610ee0565b005b34801561042457600080fd5b5061042d61101d565b60405161043a9190612790565b60405180910390f35b34801561044f57600080fd5b506104586110d6565b6040516104659190612726565b60405180910390f35b34801561047a57600080fd5b506104836110fa565b6040516104909190612726565b60405180910390f35b3480156104a557600080fd5b506104ae611123565b6040516104bb9190612726565b60405180910390f35b3480156104d057600080fd5b506104d9611149565b6040516104e6919061284e565b60405180910390f35b3480156104fb57600080fd5b50610504611179565b6040516105119190612ae3565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612afe565b6111a3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612bb0565b611200565b005b34801561057857600080fd5b5061058161134a565b60405161058e919061284e565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612c03565b6113d2565b6040516105cb919061248b565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161060793929190612c9d565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106909493929190612d12565b602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190612d8a565b6106e25763ffffffff60e01b610708565b6040516020016106f190612e0e565b604051602081830303815290604052805190602001205b90509392505050565b6107196113e8565b818190508484905014610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890612ea6565b60405180910390fd5b60005b8484905081101561081c5761080985858381811061078557610784612ec6565b5b905060200201602081019061079a9190612669565b60008585858181106107af576107ae612ec6565b5b90506020028101906107c19190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b808061081490612f96565b915050610764565b5050505050565b61082b61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089290613051565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108ec929190613071565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61093f61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a69061310c565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a02929190613071565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ab295949392919061312c565b602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190612d8a565b610b045763ffffffff60e01b610b2a565b604051602001610b13906131c1565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b6a90613222565b6040516020818303038152906040528051906020012084148015610bb957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610be657604051602001610bcd90613283565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c769061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610cbe611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061339c565b60405180910390fd5b610d1d8161165a565b610d7681600067ffffffffffffffff811115610d3c57610d3b6128fd565b5b6040519080825280601f01601f191660200182016040528015610d6e5781602001600182028036833780820191505090505b506000611665565b50565b6000610d836117d3565b610d8d848461184a565b90506000848060400190610da19190612f04565b90501415610db357610db284611928565b5b610dbc826119d6565b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610df3611179565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e2c9190612726565b6000604051808303818588803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b5050505050565b610e6861153b565b610e70611179565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610eaa9291906133cb565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f669061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610fae611603565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061339c565b60405180910390fd5b61100d8261165a565b61101982826001611665565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613466565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ab6113e8565b6111fa848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b50505050565b60008060159054906101000a900460ff1615905080801561123357506001600060149054906101000a900460ff1660ff16105b80611262575061124230611a72565b15801561126157506001600060149054906101000a900460ff1660ff16145b5b6112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134f8565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156112df576001600060156101000a81548160ff0219169083151502179055505b6112eb84846000611a95565b80156113445760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161133b9190613560565b60405180910390a15b50505050565b6000611354611179565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161138c9190612726565b602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd9190613590565b905090565b600063f23a6e6160e01b90509695505050505050565b6113f0611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147657506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061362f565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114e091906136c9565b60006040518083038185875af1925050503d806000811461151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b50915091508161153457805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c257503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061372c565b60405180910390fd5b565b60006116317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166261153b565b50565b6116917f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611c3b565b60000160009054906101000a900460ff16156116b5576116b083611c45565b6117ce565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561171d57506040513d601f19601f8201168201806040525081019061171a9190613761565b60015b61175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613800565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613892565b60405180910390fd5b506117cd838383611cfe565b5b505050565b6117db611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90613924565b60405180910390fd5b565b60008061185683611d2a565b90506118be8480610140019061186c9190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d5a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576001915050611922565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906119579061395c565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906139dd565b60405180910390fd5b50565b60008114611a6f5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611a2690613a23565b600060405180830381858888f193505050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611c4e81611a72565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613aaa565b60405180910390fd5b80611cba7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0783611d81565b600082511180611d145750805b15611d2557611d238383611dd0565b505b505050565b600081604051602001611d3d9190613b37565b604051602081830303815290604052805190602001209050919050565b6000806000611d698585611dfd565b91509150611d7681611e4f565b819250505092915050565b611d8a81611c45565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611df58383604051806060016040528060278152602001613e1d60279139611fbd565b905092915050565b600080604183511415611e3f5760008060006020860151925060408601519150606086015160001a9050611e3387828585612043565b94509450505050611e48565b60006002915091505b9250929050565b60006004811115611e6357611e62613b5d565b5b816004811115611e7657611e75613b5d565b5b1415611e8157611fba565b60016004811115611e9557611e94613b5d565b5b816004811115611ea857611ea7613b5d565b5b1415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613bd8565b60405180910390fd5b60026004811115611efd57611efc613b5d565b5b816004811115611f1057611f0f613b5d565b5b1415611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613c44565b60405180910390fd5b60036004811115611f6557611f64613b5d565b5b816004811115611f7857611f77613b5d565b5b1415611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613cd6565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611fe791906136c9565b600060405180830381855af49150503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b509150915061203886838387612126565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561207e57600060039150915061211d565b6000600187878787604051600081526020016040526040516120a39493929190613d05565b6020604051602081039080840390855afa1580156120c5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121145760006001925092505061211d565b80600092509250505b94509492505050565b60608315612189576000835114156121815761214185611a72565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613d96565b60405180910390fd5b5b829050612194565b612193838361219c565b5b949350505050565b6000825111156121af5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39190613dfa565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061222b82612200565b9050919050565b61223b81612220565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126122b9576122b8612294565b5b8235905067ffffffffffffffff8111156122d6576122d5612299565b5b6020830191508360018202830111156122f2576122f161229e565b5b9250929050565b60008060008060008060008060c0898b031215612319576123186121f6565b5b60006123278b828c01612249565b98505060206123388b828c01612249565b97505060406123498b828c01612249565b965050606061235a8b828c0161227f565b955050608089013567ffffffffffffffff81111561237b5761237a6121fb565b5b6123878b828c016122a3565b945094505060a089013567ffffffffffffffff8111156123aa576123a96121fb565b5b6123b68b828c016122a3565b92509250509295985092959890939650565b6000806000806000608086880312156123e4576123e36121f6565b5b60006123f288828901612249565b955050602061240388828901612249565b94505060406124148882890161227f565b935050606086013567ffffffffffffffff811115612435576124346121fb565b5b612441888289016122a3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61248581612450565b82525050565b60006020820190506124a0600083018461247c565b92915050565b6000819050919050565b6124b9816124a6565b81146124c457600080fd5b50565b6000813590506124d6816124b0565b92915050565b6000806000604084860312156124f5576124f46121f6565b5b6000612503868287016124c7565b935050602084013567ffffffffffffffff811115612524576125236121fb565b5b612530868287016122a3565b92509250509250925092565b60008083601f84011261255257612551612294565b5b8235905067ffffffffffffffff81111561256f5761256e612299565b5b60208301915083602082028301111561258b5761258a61229e565b5b9250929050565b60008083601f8401126125a8576125a7612294565b5b8235905067ffffffffffffffff8111156125c5576125c4612299565b5b6020830191508360208202830111156125e1576125e061229e565b5b9250929050565b60008060008060408587031215612602576126016121f6565b5b600085013567ffffffffffffffff8111156126205761261f6121fb565b5b61262c8782880161253c565b9450945050602085013567ffffffffffffffff81111561264f5761264e6121fb565b5b61265b87828801612592565b925092505092959194509250565b60006020828403121561267f5761267e6121f6565b5b600061268d84828501612249565b91505092915050565b600080600080604085870312156126b0576126af6121f6565b5b600085013567ffffffffffffffff8111156126ce576126cd6121fb565b5b6126da878288016122a3565b9450945050602085013567ffffffffffffffff8111156126fd576126fc6121fb565b5b612709878288016122a3565b925092505092959194509250565b61272081612220565b82525050565b600060208201905061273b6000830184612717565b92915050565b60008060408385031215612758576127576121f6565b5b6000612766858286016124c7565b925050602061277785828601612249565b9150509250929050565b61278a816124a6565b82525050565b60006020820190506127a56000830184612781565b92915050565b600080fd5b600061016082840312156127c7576127c66127ab565b5b81905092915050565b6000806000606084860312156127e9576127e86121f6565b5b600084013567ffffffffffffffff811115612807576128066121fb565b5b612813868287016127b0565b9350506020612824868287016124c7565b92505060406128358682870161227f565b9150509250925092565b6128488161225e565b82525050565b6000602082019050612863600083018461283f565b92915050565b600061287482612200565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b600080604083850312156128be576128bd6121f6565b5b60006128cc85828601612892565b92505060206128dd8582860161227f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612935826128ec565b810181811067ffffffffffffffff82111715612954576129536128fd565b5b80604052505050565b60006129676121ec565b9050612973828261292c565b919050565b600067ffffffffffffffff821115612993576129926128fd565b5b61299c826128ec565b9050602081019050919050565b82818337600083830152505050565b60006129cb6129c684612978565b61295d565b9050828152602081018484840111156129e7576129e66128e7565b5b6129f28482856129a9565b509392505050565b600082601f830112612a0f57612a0e612294565b5b8135612a1f8482602086016129b8565b91505092915050565b60008060408385031215612a3f57612a3e6121f6565b5b6000612a4d85828601612249565b925050602083013567ffffffffffffffff811115612a6e57612a6d6121fb565b5b612a7a858286016129fa565b9150509250929050565b6000819050919050565b6000612aa9612aa4612a9f84612200565b612a84565b612200565b9050919050565b6000612abb82612a8e565b9050919050565b6000612acd82612ab0565b9050919050565b612add81612ac2565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b60008060008060608587031215612b1857612b176121f6565b5b6000612b2687828801612249565b9450506020612b378782880161227f565b935050604085013567ffffffffffffffff811115612b5857612b576121fb565b5b612b64878288016122a3565b925092505092959194509250565b6000612b7d82612220565b9050919050565b612b8d81612b72565b8114612b9857600080fd5b50565b600081359050612baa81612b84565b92915050565b600080600060608486031215612bc957612bc86121f6565b5b6000612bd786828701612b9b565b9350506020612be886828701612249565b9250506040612bf986828701612249565b9150509250925092565b60008060008060008060a08789031215612c2057612c1f6121f6565b5b6000612c2e89828a01612249565b9650506020612c3f89828a01612249565b9550506040612c5089828a0161227f565b9450506060612c6189828a0161227f565b935050608087013567ffffffffffffffff811115612c8257612c816121fb565b5b612c8e89828a016122a3565b92509250509295509295509295565b6000606082019050612cb26000830186612717565b612cbf6020830185612717565b612ccc604083018461283f565b949350505050565b600082825260208201905092915050565b6000612cf18385612cd4565b9350612cfe8385846129a9565b612d07836128ec565b840190509392505050565b6000606082019050612d276000830187612717565b612d346020830186612781565b8181036040830152612d47818486612ce5565b905095945050505050565b60008115159050919050565b612d6781612d52565b8114612d7257600080fd5b50565b600081519050612d8481612d5e565b92915050565b600060208284031215612da057612d9f6121f6565b5b6000612dae84828501612d75565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612df8601f83612db7565b9150612e0382612dc2565b601f82019050919050565b6000612e1982612deb565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612e90603383612e23565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612f2157612f20612ef5565b5b80840192508235915067ffffffffffffffff821115612f4357612f42612efa565b5b602083019250600182023603831315612f5f57612f5e612eff565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa18261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fd457612fd3612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061303b603183612e23565b915061304682612fdf565b604082019050919050565b6000602082019050818103600083015261306a8161302e565b9050919050565b60006040820190506130866000830185612717565b6130936020830184612717565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006130f6603383612e23565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b60006060820190506131416000830188612717565b8181036020830152613154818688612ce5565b90508181036040830152613169818486612ce5565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006131ab601d83612db7565b91506131b682613175565b601d82019050919050565b60006131cc8261319e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061320c601583612db7565b9150613217826131d6565b601582019050919050565b600061322d826131ff565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b600061326d601483612db7565b915061327882613237565b601482019050919050565b600061328e82613260565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006132f4602c83612e23565b91506132ff82613298565b604082019050919050565b60006020820190508181036000830152613323816132e7565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613386602c83612e23565b91506133918261332a565b604082019050919050565b600060208201905081810360008301526133b581613379565b9050919050565b6133c581612869565b82525050565b60006040820190506133e060008301856133bc565b6133ed602083018461283f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613450603883612e23565b915061345b826133f4565b604082019050919050565b6000602082019050818103600083015261347f81613443565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006134e2602e83612e23565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b6000819050919050565b600060ff82169050919050565b600061354a61354561354084613518565b612a84565b613522565b9050919050565b61355a8161352f565b82525050565b60006020820190506135756000830184613551565b92915050565b60008151905061358a81612268565b92915050565b6000602082840312156135a6576135a56121f6565b5b60006135b48482850161357b565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613619602983612e23565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613683578082015181840152602081019050613668565b83811115613692576000848401525b50505050565b60006136a38261364f565b6136ad818561365a565b93506136bd818560208601613665565b80840191505092915050565b60006136d58284613698565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613716601c83612e23565b9150613721826136e0565b602082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b60008151905061375b816124b0565b92915050565b600060208284031215613777576137766121f6565b5b60006137858482850161374c565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006137ea602e83612e23565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061387c602983612e23565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612e23565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061396782613944565b91506bffffffffffffffffffffffff82141561398657613985612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006139c7601f83612e23565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b50565b6000613a0d60008361365a565b9150613a18826139fd565b600082019050919050565b6000613a2e82613a00565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613a94602d83612e23565b9150613a9f82613a38565b604082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613b00601c83612db7565b9150613b0b82613aca565b601c82019050919050565b6000819050919050565b613b31613b2c826124a6565b613b16565b82525050565b6000613b4282613af3565b9150613b4e8284613b20565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613bc2601883612e23565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613c2e601f83612e23565b9150613c3982613bf8565b602082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc0602283612e23565b9150613ccb82613c64565b604082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b613cff81613522565b82525050565b6000608082019050613d1a6000830187612781565b613d276020830186613cf6565b613d346040830185612781565b613d416060830184612781565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d80601d83612e23565b9150613d8b82613d4a565b602082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b600081519050919050565b6000613dcc82613db6565b613dd68185612e23565b9350613de6818560208601613665565b613def816128ec565b840191505092915050565b60006020820190508181036000830152613e148184613dc1565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c0d173128a7be508d830d455354150c9883cf63f98f48007a01cf1d9cf05f5e464736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b506040516200831f3803806200831f83398181016040528101906200003791906200015d565b62000053677f4b6a44e431ee3b60c01b620000e260201b60201c565b6200006f677857292382bba2f860c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a9190620001a0565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001bd565b50565b616c6c80620016b383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b620001378162000118565b81146200014357600080fd5b50565b60008151905062000157816200012c565b92915050565b600060208284031215620001765762000175620000f3565b5b6000620001868482850162000146565b91505092915050565b6200019a8162000118565b82525050565b6000602082019050620001b760008301846200018f565b92915050565b6080516114cc620001e76000396000818161014d01528181610222015261039601526114cc6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806308a6354e146200004b57806311464fbe14620000815780631230aea214620000a3575b600080fd5b62000069600480360381019062000063919062000595565b620000d9565b60405162000078919062000602565b60405180910390f35b6200008b62000220565b6040516200009a91906200068a565b60405180910390f35b620000c16004803603810190620000bb919062000595565b62000244565b604051620000d091906200068a565b60405180910390f35b6000620000f167377377f0176acc8d60c01b62000458565b620001076719eec81cb0b350e660c01b62000458565b6200011d67a390009600425a0260c01b62000458565b620002178260001b6040518060200162000137906200049d565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000878760405160240162000181929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001d9929190620007a7565b604051602081830303815290604052604051602001620001fb9291906200081d565b604051602081830303815290604052805190602001206200045b565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006200025c674935bc1a09e3db8460c01b62000458565b620002726775fc8133634ed74a60c01b62000458565b62000288670efdb3b7474e2b4c60c01b62000458565b600062000297858585620000d9565b9050620002af670f6894e8e2b19ce360c01b62000458565b620002c567cfbb3e0ac8136b8b60c01b62000458565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620002f76748a7a7111d8771f660c01b62000458565b6200030d67901ec3c236b8b32560c01b62000458565b600081111562000364576200032d671686ea47f942606a60c01b62000458565b62000343674d2fc3d1c1e0463860c01b62000458565b620003596758c869b2622fdb1060c01b62000458565b819250505062000451565b6200037a67eb3cbcf36af5a69e60c01b62000458565b62000390679ab57c499459112260c01b62000458565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008787604051602401620003ca929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200041d906200049d565b6200042a929190620007a7565b8190604051809103906000f59050801580156200044b573d6000803e3d6000fd5b50925050505b9392505050565b50565b60006200046a83833062000472565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c51806200084683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004dd82620004b0565b9050919050565b6000620004f182620004d0565b9050919050565b6200050381620004e4565b81146200050f57600080fd5b50565b6000813590506200052381620004f8565b92915050565b6200053481620004d0565b81146200054057600080fd5b50565b600081359050620005548162000529565b92915050565b6000819050919050565b6200056f816200055a565b81146200057b57600080fd5b50565b6000813590506200058f8162000564565b92915050565b600080600060608486031215620005b157620005b0620004ab565b5b6000620005c18682870162000512565b9350506020620005d48682870162000543565b9250506040620005e7868287016200057e565b9150509250925092565b620005fc81620004d0565b82525050565b6000602082019050620006196000830184620005f1565b92915050565b6000819050919050565b60006200064a620006446200063e84620004b0565b6200061f565b620004b0565b9050919050565b60006200065e8262000629565b9050919050565b6000620006728262000651565b9050919050565b620006848162000665565b82525050565b6000602082019050620006a1600083018462000679565b92915050565b6000620006b48262000629565b9050919050565b6000620006c882620006a7565b9050919050565b620006da81620006bb565b82525050565b6000604082019050620006f76000830185620006cf565b620007066020830184620005f1565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007495780820151818401526020810190506200072c565b60008484015250505050565b6000601f19601f8301169050919050565b600062000773826200070d565b6200077f818562000718565b93506200079181856020860162000729565b6200079c8162000755565b840191505092915050565b6000604082019050620007be6000830185620005f1565b8181036020830152620007d2818462000766565b90509392505050565b600081905092915050565b6000620007f3826200070d565b620007ff8185620007db565b93506200081181856020860162000729565b80840191505092915050565b60006200082b8285620007e6565b9150620008398284620007e6565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b7ad04ccfe8208274630af979d828e906b773e758ddf5553abf45bbdbd63c50964736f6c6343000811003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162006c6c38038062006c6c83398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea670a3b6c08930709a560c01b6200020b60201b60201c565b6200010667d0ec5ebfd5f1ef8260c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616895620003d76000396000818161191d0152611cd70152600081816119d301528181611a61015281816120890152818161211701526121c701526168956000f3fe6080604052600436106101c55760003560e01c80634a58db19116100f757806398ef1ed811610095578063b61d27f611610064578063b61d27f6146106a8578063bc197c81146106d1578063c399ec881461070e578063f23a6e611461073957610224565b806398ef1ed8146105ec578063a526d83b14610629578063affed0e014610652578063b0d691fe1461067d57610224565b806352d1902d116100d157806352d1902d146105325780637065cb481461055d57806371404156146105865780638f068430146105af57610224565b80634a58db19146104e35780634d44560d146104ed5780634f1ef2861461051657610224565b80631b71bb6e116101645780633659cfe61161013e5780633659cfe6146104295780633a871cdd146104525780633ad59dbc1461048f578063485cc955146104ba57610224565b80631b71bb6e14610398578063245a7bfc146103c15780632f54bf6e146103ec57610224565b8063150b7a02116101a0578063150b7a02146102cc57806316d4340114610309578063173825d91461034657806318dfb3c71461036f57610224565b806223de291461022957806301ffc9a7146102525780630c68ba211461028f57610224565b36610224576101de67290bbd319612162360c01b610776565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b919061476a565b610779565b005b34801561025e57600080fd5b5061027960048036038101906102749190614891565b610797565b60405161028691906148d9565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906148f4565b61097c565b6040516102c391906148d9565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190614921565b610a0e565b60405161030091906149b8565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190614a35565b610a5e565b60405161033d91906148d9565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906148f4565b611437565b005b34801561037b57600080fd5b5061039660048036038101906103919190614b69565b6114ff565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906148f4565b61173d565b005b3480156103cd57600080fd5b506103d661191b565b6040516103e39190614bf9565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906148f4565b61193f565b60405161042091906148d9565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b91906148f4565b6119d1565b005b34801561045e57600080fd5b5061047960048036038101906104749190614c39565b611b59565b6040516104869190614cb7565b60405180910390f35b34801561049b57600080fd5b506104a4611c97565b6040516104b19190614bf9565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614d10565b611cfb565b005b6104eb611ea2565b005b3480156104f957600080fd5b50610514600480360381019061050f9190614d8e565b611f53565b005b610530600480360381019061052b9190614f0f565b612087565b005b34801561053e57600080fd5b506105476121c3565b6040516105549190614f7a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906148f4565b61227c565b005b34801561059257600080fd5b506105ad60048036038101906105a891906148f4565b612344565b005b3480156105bb57600080fd5b506105d660048036038101906105d19190614f95565b61240c565b6040516105e391906148d9565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190614f95565b6124d9565b60405161062091906148d9565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906148f4565b612702565b005b34801561065e57600080fd5b506106676127ca565b6040516106749190614cb7565b60405180910390f35b34801561068957600080fd5b50610692612836565b60405161069f9190615068565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190615083565b61289c565b005b3480156106dd57600080fd5b506106f860048036038101906106f3919061514d565b6129ad565b60405161070591906149b8565b60405180910390f35b34801561071a57600080fd5b50610723612a01565b6040516107309190614cb7565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190615229565b612ac5565b60405161076d91906149b8565b60405180910390f35b50565b61078d671278753381487ed660c01b612b17565b5050505050505050565b60006107ad67f20d647ea02d480060c01b612b17565b6107c167ffb589296d687db060c01b612b17565b6107d56727ecf9b318901df560c01b612b17565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108525750610851675d4be9b73183ad3f60c01b612b1a565b5b806108f257507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108d557506108d4674cb5733a4ebd736b60c01b612b1a565b5b80156108f157506108f067927753031b1e765d60c01b612b1a565b5b5b8061097557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015610974575061097366bc16169e90631c60c01b612b1a565b5b5b9050919050565b6000610992679a530c869daa649060c01b612b25565b6109a6677819779a5121f4ad60c01b612b25565b6109ba67dcc814792f5595a060c01b612b25565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a236642558288c0c26a60c01b612b17565b610a37670cd59c881166cff460c01b612b17565b610a4b67d8d160ce8c3ef4cc60c01b612b17565b63150b7a0260e01b905095945050505050565b6000610a746777258f39a67c0acd60c01b612b28565b610a8867c9d3460cf31b367060c01b612b28565b610a9c67301450deda14998860c01b612b28565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610acc67ec35fa0e327aba3360c01b612b28565b610ae06757c603851350fa0960c01b612b28565b6060610af667ed7102d9c731614b60c01b612b28565b610b0a67260c95324dc5522a60c01b612b28565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b4291906152f2565b908a8a905092610b5493929190615330565b90610b5f9190615383565b149050610b7667adb0f8e971c6f00460c01b612b28565b610b8a6775ac95bff94d832360c01b612b28565b8015610dd757610ba467b7ce1fa3f7f6604d60c01b612b28565b610bb8679fc1490a6707ce8260c01b612b28565b610bcc679cbd4322f03dcb3060c01b612b28565b6000610be2677c50636fd0d78e6e60c01b612b28565b610bf667b6c96f6498872fdd60c01b612b28565b6060610c0c67d225012c278bc14960c01b612b28565b888860009060208c8c9050610c2191906152f2565b92610c2e93929190615330565b810190610c3b91906153e2565b809650819350829450505050610c5b67414eafbc10d5dfd460c01b612b28565b610c6f679735072f1875e8c560c01b612b28565b60008503610dbb57610c8b67ece2f114e83cba5460c01b612b28565b610c9f67bb4b7709950fab6560c01b612b28565b610cb367e556fd7ed728116b60c01b612b28565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610cdb91906154de565b6000604051808303816000865af19150503d8060008114610d18576040519150601f19603f3d011682016040523d82523d6000602084013e610d1d565b606091505b5091509150610d36675bb7adbcacc27af760c01b612b28565b610d4a67925a11ac41b1a62f60c01b612b28565b81610da057610d63674b9b350a0c4e240d60c01b612b28565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d97919061553f565b60405180910390fd5b610db467270a9300cfb5deb160c01b612b28565b5050610dd0565b610dcf6719ddea40eb9c9d5e60c01b612b28565b5b5050610e47565b610deb671617c5f7b544c15460c01b612b28565b610dff67152cf4f885c3c7bd60c01b612b28565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e5b678968ba2400116cd160c01b612b28565b610e6f67d26f37fb13c4702060c01b612b28565b808015610e8c5750610e8b67e672c6829c01435e60c01b612b2b565b5b80610eb35750600083118015610eb25750610eb1672f1034641526e8e560c01b612b2b565b5b5b1561112357610ecc6787b8bb2f9d833b2360c01b612b28565b610ee06748ed04b5790955de60c01b612b28565b610ef467c07d3098ed811b0e60c01b612b28565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f2f929190615561565b602060405180830381865afa925050508015610f6957506040513d601f19601f82011682018060405250810190610f6691906155a6565b60015b610ff0573d8060008114610f99576040519150601f19603f3d011682016040523d82523d6000602084013e610f9e565b606091505b50610fb3672c516c89798db2e060c01b612b28565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610fe7919061553f565b60405180910390fd5b611004677a7dc9015ade993760c01b612b28565b611018676bd30bd513db1c1260c01b612b28565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614905061107867f77b76e97cdda63e60c01b612b28565b61108c67f2ac3b0c93d4d96060c01b612b28565b6000851480156110995750825b80156110a3575086155b156110da576110bc6732203bac67e9a5c660c01b612b28565b6110d067bacd05270bf834fa60c01b612b28565b806000526001601ffd5b6110ee67db508d98998fd4cb60c01b612b28565b61110267bd809f1f7297a39860c01b612b28565b611116671166c1324f0a4d4360c01b612b28565b809550505050505061142e565b61113767fb73a16ec6f828a360c01b612b28565b61114b67124b4f67fba3948f60c01b612b28565b61115f67a72081e2c67a966a60c01b612b28565b611173670ab810c1358d671760c01b612b28565b604187879050146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090615656565b60405180910390fd5b6111cd67c0b4b2b739bdbc3e60c01b612b28565b6111e1670f81a533fa5be34e60c01b612b28565b6111f567657c1339b273a74660c01b612b28565b6000878760009060209261120b93929190615330565b906112169190615383565b905061122c67dc3d3b49fc92cadb60c01b612b28565b6112406752ae34fa8263b21b60c01b612b28565b6000888860209060409261125693929190615330565b906112619190615383565b905061127767301232fd22fb824c60c01b612b28565b61128b67f519c889a1cef68c60c01b612b28565b6000898960408181106112a1576112a0615676565b5b9050013560f81c60f81b60f81c90506112c4679a20c64fb3f7324360c01b612b28565b6112d8678a031af26ced764160c01b612b28565b601b8160ff16141580156112f05750601c8160ff1614155b1561136c5761130967cd922db48d204f9b60c01b612b28565b61131d67833a8605e20290ce60c01b612b28565b61133167b3da6c39eac2834e60c01b612b28565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390615717565b60405180910390fd5b611380675514297355562d4860c01b612b28565b6113946757b333f889b6e2b360c01b612b28565b6113a8676603fc4d7122128560c01b612b28565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113e29493929190615753565b6020604051602081039080840390855afa158015611404573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b61144b6706cea3225e159afe60c01b610776565b61145f67768e02f4b4fe93d060c01b610776565b61147367bcb43f0f61fb5a1260c01b610776565b6114876705112cc091d04b2260c01b610776565b61148f612b36565b6114a3677b6146229717de8560c01b610776565b6114b7671a91445bcd7d6a3660c01b610776565b6114cb67087786fe3118ce4560c01b610776565b6114df6712ac3ecdf13b356f60c01b610776565b6114f3676a822ec913ef224160c01b610776565b6114fc81612c9a565b50565b611513670b312c177376d2f160c01b610776565b61152767526a718f37dbef7960c01b610776565b61153b67bc0095b6ec842fe060c01b610776565b61154f6765a7b825dc91e38260c01b610776565b611557612f16565b61156b67e65dfa654e10de0360c01b610776565b61157f6738751a29e4bbac9a60c01b610776565b6115936764a3e3565274624260c01b610776565b6115a767e3532f2d278ffcc460c01b610776565b6115bb67b28c9cc66aedc63960c01b610776565b6115cf674c0d2e74d59320d660c01b610776565b818190508484905014611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e9061580a565b60405180910390fd5b61162b6733f49bcf3f677de260c01b610776565b61163f67fda055a3194df47960c01b610776565b611653670ca2693ca40a9c3d60c01b610776565b60005b848490508110156117365761167567e45fe9f7a89384cd60c01b610776565b611689677885f77483c8c7a360c01b610776565b61172385858381811061169f5761169e615676565b5b90506020020160208101906116b491906148f4565b60008585858181106116c9576116c8615676565b5b90506020028101906116db9190615839565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613039565b808061172e9061589c565b915050611656565b5050505050565b61175167b0e8e7fc3aed8bf060c01b610776565b611765671246157b9919312560c01b610776565b61177967cbfddca365f5dede60c01b610776565b61178161315d565b61179567ab4f446b15a2b75360c01b610776565b6117a967140f31a12b03a20160c01b610776565b6117bd67c2cd95be620e67ae60c01b610776565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390615956565b60405180910390fd5b611840674b99dae5f525e91060c01b610776565b61185467897f79a11a9b512360c01b610776565b61186867f01df9d5178d9e0460c01b610776565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118bb929190615976565b60405180910390a16118d76705fb80e775388d3f60c01b610776565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006119556784c34e023fb786f860c01b613279565b611969670d806432bac21d3b60c01b613279565b61197d679da5a6f8cf654dc360c01b613279565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690615a11565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611a9e61327c565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90615aa3565b60405180910390fd5b611afd816132d3565b611b5681600067ffffffffffffffff811115611b1c57611b1b614de4565b5b6040519080825280601f01601f191660200182016040528015611b4e5781602001600182028036833780820191505090505b50600061332e565b50565b6000611b6f674a0b745640aaacbe60c01b61349c565b611b83673643bc4d265e004d60c01b61349c565b611b9767be21e9c3510eef0760c01b61349c565b611b9f61349f565b611bb3670d9ae78f9ca6bca160c01b61349c565b611bbd848461357a565b9050611bd367bac743df019f783060c01b61349c565b611be7674633441562cbb38260c01b61349c565b6000848060400190611bf99190615839565b905003611c4a57611c1467b9f604ce3adf50f460c01b61349c565b611c286740dc8d2be550a2ae60c01b61349c565b611c3c678d7f5bf9351f5d3760c01b61349c565b611c45846136ed565b611c5f565b611c5e67493644fd2e2f359760c01b61349c565b5b611c7367f86dd1b6eddb849360c01b61349c565b611c8767e338ec934ff31c9e60c01b61349c565b611c90826137ff565b9392505050565b6000611cad6774973d5ca7e43fcd60c01b613940565b611cc16704961682a02a68be60c01b613940565b611cd567c16622bec5480b9660c01b613940565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b611d0f673d7cb9a88db0860060c01b613940565b60008060019054906101000a900460ff16159050808015611d405750600160008054906101000a900460ff1660ff16105b80611d6d5750611d4f30613943565b158015611d6c5750600160008054906101000a900460ff1660ff16145b5b611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390615b35565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611de9576001600060016101000a81548160ff0219169083151502179055505b611dfd67eed416eaa65ec2eb60c01b613940565b611e11678a62c0573210ae3460c01b613940565b611e2567b3fb8a06c3e79c0260c01b613940565b611e39674eaf0872e436566660c01b613940565b611e44836000613966565b8015611e9d5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611e949190615b90565b60405180910390a15b505050565b611eb667a987bf12f6bf98ab60c01b610776565b611eca671fbaaa4dbb3f884d60c01b610776565b611ede67e797a3f7fa46660c60c01b610776565b611ee6612836565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611f1f9190614bf9565b6000604051808303818588803b158015611f3857600080fd5b505af1158015611f4c573d6000803e3d6000fd5b5050505050565b611f6767fbabf181d33082b660c01b610776565b611f7b67bee35484a90cfd2660c01b610776565b611f8f673ceb9bb2daab856d60c01b610776565b611fa36791fab911752e5b5c60c01b610776565b611fab61315d565b611fbf672877b8446bdb5f0060c01b610776565b611fd3676c6fc7cbb8b3b97860c01b610776565b611fe767eb87ca9da684e3db60c01b610776565b611ffb673d9d17fec85dda7860c01b610776565b61200f675017b987e5f4e1e060c01b610776565b612017612836565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401612051929190615bba565b600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90615a11565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661215461327c565b73ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615aa3565b60405180910390fd5b6121b3826132d3565b6121bf8282600161332e565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90615c55565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61229067b4c2b632b250bc6360c01b610776565b6122a467768e02f4b4fe93d060c01b610776565b6122b867bcb43f0f61fb5a1260c01b610776565b6122cc6705112cc091d04b2260c01b610776565b6122d4612b36565b6122e8677b6146229717de8560c01b610776565b6122fc6732bce9776427685f60c01b610776565b612310675c4d3c86a9602c6f60c01b610776565b612324670877748d77ec420260c01b610776565b6123386732ccb44361bec49260c01b610776565b61234181613aa8565b50565b612358676bacc25ce52307dd60c01b610776565b61236c67bee35484a90cfd2660c01b610776565b612380673ceb9bb2daab856d60c01b610776565b6123946791fab911752e5b5c60c01b610776565b61239c61315d565b6123b0672877b8446bdb5f0060c01b610776565b6123c467edec01844939018360c01b610776565b6123d8672d1676c1874371c960c01b610776565b6123ec6767895a735b76188060c01b610776565b6124006762377381d2b1f71460c01b610776565b61240981613c66565b50565b600061242267a69e23ef0cf0d80560c01b612b28565b6124366789508a17c1e5baf860c01b612b28565b61244a67f0e90fa9dac9b5a260c01b612b28565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b815260040161248c959493929190615ca2565b6020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190615d05565b9050949350505050565b60006124ef678cc395c88e3ae24060c01b612b28565b612503670e6cd08ae62d699160c01b612b28565b612517671a6d203d14bbeb3560c01b612b28565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612559959493929190615ca2565b6020604051808303816000875af192505050801561259557506040513d601f19601f820116820180604052508101906125929190615d05565b60015b6126cd573d80600081146125c5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ca565b606091505b506125df6763fa3d4afb8cd55b60c01b612b28565b6125f367c78e77a5e38dc67760c01b612b28565b60008151905061260d67a2319ac582c5f8b960c01b612b28565b612621679d791f94f379b3d460c01b612b28565b600181036126a15761263d674b6df8afb2c0610f60c01b612b28565b612651671241dc8732fa093a60c01b612b28565b600160f81b8260008151811061266a57612669615676565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506126fa565b6126b567fb87cb9c02294f9f60c01b612b28565b6126c96773311759eab4f85760c01b612b28565b8082fd5b6126e1672f68b0ad8fd39c0a60c01b612b28565b6126f567ba867e4ef348d1a360c01b612b28565b809150505b949350505050565b612716675a98b12456966aba60c01b610776565b61272a67bee35484a90cfd2660c01b610776565b61273e673ceb9bb2daab856d60c01b610776565b6127526791fab911752e5b5c60c01b610776565b61275a61315d565b61276e672877b8446bdb5f0060c01b610776565b61278267915d8b16ac69ed9860c01b610776565b612796671f5e91ee5a02596360c01b610776565b6127aa674b8e9096393c06f860c01b610776565b6127be67301fc09d047c18d960c01b610776565b6127c781613e24565b50565b60006127e067e6997cbe175ef33460c01b610776565b6127f4677a25fccec1173dd960c01b610776565b61280867431301e0e2e31e9060c01b610776565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061284c67f561f09cfc8827bd60c01b610776565b612860673350b6d208da79ee60c01b610776565b612874671896327d0b3f375a60c01b610776565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6128b067e2dda3667fd3757160c01b610776565b6128c467526a718f37dbef7960c01b610776565b6128d867bc0095b6ec842fe060c01b610776565b6128ec6765a7b825dc91e38260c01b610776565b6128f4612f16565b61290867e65dfa654e10de0360c01b610776565b61291c67aeaf6d5fe58842a960c01b610776565b61293067370ad7169464cc0060c01b610776565b6129446739a00ff772ffbf9060c01b610776565b6129586792e03ae1c25d108960c01b610776565b6129a7848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613039565b50505050565b60006129c367f6036d4dbbf1553b60c01b612b17565b6129d767e574cfd0134a53a360c01b612b17565b6129eb67481cad8a93626dbc60c01b612b17565b63bc197c8160e01b905098975050505050505050565b6000612a17673908573a227c011760c01b610776565b612a2b67f95a3d25f4a4d56660c01b610776565b612a3f6701732dbf20a7ffe360c01b610776565b612a47612836565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612a7f9190614bf9565b602060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190615d47565b905090565b6000612adb67d55e6083e458695760c01b612b17565b612aef67229756682a8526f660c01b612b17565b612b03672d0f5a7f66d6c2a060c01b612b17565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612b4a67216671dc6f7d651060c01b610776565b612b5e67fc696b44f549a3bd60c01b610776565b612b72677d2f775bb38d794b60c01b610776565b612b86672c1b7774324d16e460c01b610776565b612b8f3361193f565b8015612bab5750612baa679d6b1a88bd04a29560c01b6140a2565b5b80612c1957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612bfc5750612bfb67c1169fb68056496660c01b6140a2565b5b8015612c185750612c1767290c2b81e499218360c01b6140a2565b5b5b80612c455750612c283361097c565b8015612c445750612c436777d0513cc85b13d160c01b6140a2565b5b5b612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b90615de6565b60405180910390fd5b612c9867023020f196fe710560c01b610776565b565b612cae67595c0e9f3251c28760c01b613279565b612cc2676c9e8facf275455460c01b613279565b612cd6675fd1ba867bad8d9060c01b613279565b612cea675d4405176a4c718660c01b613279565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f90615e52565b60405180910390fd5b612d6c678d884950e2a04aa760c01b613279565b612d80672dca0c18590376fc60c01b613279565b612d9467a4f7a20d65860e4d60c01b613279565b612da8675167170fc48a61af60c01b613279565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90615ebe565b60405180910390fd5b612e4867d711364ae0826ec060c01b613279565b612e5c670a57bd871732b8ad60c01b613279565b612e70675d1d32267273ab9260c01b613279565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612e9f9190614bf9565b60405180910390a1612ebb67dcc232605f03b59860c01b613279565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612f2a6731b64f8837124c3160c01b610776565b612f3e67648db564106906a760c01b610776565b612f5267c4dbbfd60bd1214960c01b610776565b612f666701512b58157c381b60c01b610776565b612f6e612836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612fb85750612fb76747f66328b063331a60c01b6140a2565b5b80612fe45750612fc73361193f565b8015612fe35750612fe267e429b1ab88ceb31060c01b6140a2565b5b5b613023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301a90615f50565b60405180910390fd5b6130376762f06635bf7b4acd60c01b610776565b565b61304d67bdfd46f0589b81c760c01b610776565b61306167b0457063cebd82a360c01b610776565b613075675b626d0fcf3aa6ce60c01b610776565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161309e91906154de565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b50915091506130f9672fb56cccf4f3b66560c01b610776565b61310d6747166df0733c52e860c01b610776565b81613142576131266719461c9227bd654a60c01b610776565b61313a6767b989a4f1f2a8f560c01b610776565b805160208201fd5b61315667c859f4ceb5b7418760c01b610776565b5050505050565b61317167851edf0db3fe6a8060c01b610776565b61318567765412b7902e3abf60c01b610776565b61319967151d6c3106b9e49760c01b610776565b6131ad671b070d07d4380e9a60c01b610776565b6131b63361193f565b80156131d257506131d167d5ef82e5a5d379e060c01b6140a2565b5b8061322457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156132235750613222670cc2ae0862027a8c60c01b6140a2565b5b5b613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a90615fbc565b60405180910390fd5b61327767362a52eb7781e15260c01b610776565b565b50565b60006132aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6140ad565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6132e7675b243153b1324c8660c01b610776565b6132fb67703050f3f8cbae0160c01b610776565b61330f67096f3ba87c8df4a960c01b610776565b61332367360d12c388c6eb2e60c01b610776565b61332b61315d565b50565b61335a7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b6140b7565b60000160009054906101000a900460ff161561337e57613379836140c1565b613497565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156133e657506040513d601f19601f820116820180604052508101906133e39190615ff1565b60015b613425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341c90616090565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461348a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348190616122565b60405180910390fd5b5061349683838361417a565b5b505050565b50565b6134b367e67927338dfde90a60c01b61349c565b6134c7670e51b57b7e9b4da560c01b61349c565b6134db67e3f66e826ec687ff60c01b61349c565b6134ef6792d1df458e7acb7960c01b61349c565b6134f7612836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906161b4565b60405180910390fd5b61357867f59af56761c9812d60c01b61349c565b565b600061359067c29ba408c7eee76560c01b610776565b6135a4673c1aef8cecb8edf860c01b610776565b6135b867edc08ed16faddf6a60c01b610776565b60006135c3836141a6565b90506135d967fcbbf19e6a4683c460c01b610776565b6135ed6765a9159f51e099f460c01b610776565b61365b613656858061014001906136049190615839565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836141d690919063ffffffff16565b61193f565b6136a55761367367682feb9fbb195d8360c01b610776565b61368767514af5066901f36e60c01b610776565b61369b670bad72a866512a0460c01b610776565b60019150506136e7565b6136b967025800585b55a6ff60c01b610776565b6136cd6705b3b124a394a8c460c01b610776565b6136e1678bad695b7ee735c860c01b610776565b60009150505b92915050565b61370167f347b6eb768867bd60c01b610776565b61371567e4b8fad4d2d1902a60c01b610776565b6137296722ce8514c24b563d60c01b610776565b61373d676bd35fd711427f6d60c01b610776565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff168092919061376c906161ec565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df9061626c565b60405180910390fd5b6137fc675143066244fa845f60c01b610776565b50565b61381367cc5c47196db5bd6160c01b61349c565b613827678b55e749b3c352ab60c01b61349c565b61383b67e6442311764077fa60c01b61349c565b6000811461392857613857671589e0478f7a186060c01b61349c565b61386b67d37e8b3807985e7360c01b61349c565b61387f67c2c62d2bb50a980360c01b61349c565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516138c7906162b2565b600060405180830381858888f193505050503d8060008114613905576040519150601f19603f3d011682016040523d82523d6000602084013e61390a565b606091505b505090506139226714643eaa19656f6660c01b61349c565b5061393d565b61393c67cc382f158ab6697a60c01b61349c565b5b50565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61397a6703748e24ba0bf9ec60c01b610776565b61398e670bc8db960be8c07860c01b610776565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506139e367019acf8eca98742f60c01b610776565b6139f767ffb0ee9b4a9774fe60c01b610776565b613a0081613aa8565b613a14675b78c5bf4202c90360c01b610776565b613a286725b6d74483d24a8260c01b610776565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613abc6717c7d6a68a08773960c01b613279565b613ad067cc8de6b882acb1a360c01b613279565b613ae4671ec2242cb4213daf60c01b613279565b613af867e7bfe4742339224760c01b613279565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7c90616313565b60405180910390fd5b613b99676270d7427db14f5b60c01b613279565b613bad6704aa357520b4416d60c01b613279565b613bc1672b9382deb815da6060c01b613279565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613bf09190614bf9565b60405180910390a1613c0c67c36c72a8ecc3a90660c01b613279565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613c7a67c36ba9a4464b6ea960c01b612b25565b613c8e67dbc59bf60721ec3760c01b612b25565b613ca267a9b899a25d7f84f360c01b612b25565b613cb6676ccf2b04ef43fe2c60c01b612b25565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d399061637f565b60405180910390fd5b613d56677f234f21a7a7167460c01b612b25565b613d6a675dad748d723fc1a560c01b612b25565b613d7e67bcc423d1b918455e60c01b612b25565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613dad9190614bf9565b60405180910390a1613dc967ea5e8a43da197a0d60c01b612b25565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613e3867473271421f468fd260c01b612b25565b613e4c6792976a0e8d69a1f860c01b612b25565b613e606722fdc4cd5a73662060c01b612b25565b613e74677f1705d0822221e360c01b612b25565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eda90616411565b60405180910390fd5b613ef767d29ec12c81e5975160c01b612b25565b613f0b675ce58ff31b29be9c60c01b612b25565b613f1f67e300c4231196178660c01b612b25565b613f336756d066aad6d03b2860c01b612b25565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb79061647d565b60405180910390fd5b613fd467ceace18cb99efb4860c01b612b25565b613fe867b298b03df19232ce60c01b612b25565b613ffc6771c3a697a02cf77360c01b612b25565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9698160405161402b9190614bf9565b60405180910390a1614047673094a602565cca5360c01b612b25565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b6140ca81613943565b614109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141009061650f565b60405180910390fd5b806141367f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6140ad565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b614183836141fd565b6000825111806141905750805b156141a15761419f838361424c565b505b505050565b6000816040516020016141b991906165a7565b604051602081830303815290604052805190602001209050919050565b60008060006141e58585614279565b915091506141f2816142ca565b819250505092915050565b614206816140c1565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614271838360405180606001604052806027815260200161683960279139614430565b905092915050565b60008060418351036142ba5760008060006020860151925060408601519150606086015160001a90506142ae878285856144b6565b945094505050506142c3565b60006002915091505b9250929050565b600060048111156142de576142dd6165cd565b5b8160048111156142f1576142f06165cd565b5b031561442d576001600481111561430b5761430a6165cd565b5b81600481111561431e5761431d6165cd565b5b0361435e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435590616648565b60405180910390fd5b60026004811115614372576143716165cd565b5b816004811115614385576143846165cd565b5b036143c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143bc906166b4565b60405180910390fd5b600360048111156143d9576143d86165cd565b5b8160048111156143ec576143eb6165cd565b5b0361442c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161442390616746565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161445a91906154de565b600060405180830381855af49150503d8060008114614495576040519150601f19603f3d011682016040523d82523d6000602084013e61449a565b606091505b50915091506144ab86838387614598565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156144f157600060039150915061458f565b6000600187878787604051600081526020016040526040516145169493929190615753565b6020604051602081039080840390855afa158015614538573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036145865760006001925092505061458f565b80600092509250505b94509492505050565b606083156145fa5760008351036145f2576145b285613943565b6145f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145e8906167b2565b60405180910390fd5b5b829050614605565b614604838361460d565b5b949350505050565b6000825111156146205781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146549190616816565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061469c82614671565b9050919050565b6146ac81614691565b81146146b757600080fd5b50565b6000813590506146c9816146a3565b92915050565b6000819050919050565b6146e2816146cf565b81146146ed57600080fd5b50565b6000813590506146ff816146d9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261472a57614729614705565b5b8235905067ffffffffffffffff8111156147475761474661470a565b5b6020830191508360018202830111156147635761476261470f565b5b9250929050565b60008060008060008060008060c0898b03121561478a57614789614667565b5b60006147988b828c016146ba565b98505060206147a98b828c016146ba565b97505060406147ba8b828c016146ba565b96505060606147cb8b828c016146f0565b955050608089013567ffffffffffffffff8111156147ec576147eb61466c565b5b6147f88b828c01614714565b945094505060a089013567ffffffffffffffff81111561481b5761481a61466c565b5b6148278b828c01614714565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61486e81614839565b811461487957600080fd5b50565b60008135905061488b81614865565b92915050565b6000602082840312156148a7576148a6614667565b5b60006148b58482850161487c565b91505092915050565b60008115159050919050565b6148d3816148be565b82525050565b60006020820190506148ee60008301846148ca565b92915050565b60006020828403121561490a57614909614667565b5b6000614918848285016146ba565b91505092915050565b60008060008060006080868803121561493d5761493c614667565b5b600061494b888289016146ba565b955050602061495c888289016146ba565b945050604061496d888289016146f0565b935050606086013567ffffffffffffffff81111561498e5761498d61466c565b5b61499a88828901614714565b92509250509295509295909350565b6149b281614839565b82525050565b60006020820190506149cd60008301846149a9565b92915050565b6000819050919050565b6149e6816149d3565b81146149f157600080fd5b50565b600081359050614a03816149dd565b92915050565b614a12816148be565b8114614a1d57600080fd5b50565b600081359050614a2f81614a09565b92915050565b600080600080600060808688031215614a5157614a50614667565b5b6000614a5f888289016146ba565b9550506020614a70888289016149f4565b945050604086013567ffffffffffffffff811115614a9157614a9061466c565b5b614a9d88828901614714565b93509350506060614ab088828901614a20565b9150509295509295909350565b60008083601f840112614ad357614ad2614705565b5b8235905067ffffffffffffffff811115614af057614aef61470a565b5b602083019150836020820283011115614b0c57614b0b61470f565b5b9250929050565b60008083601f840112614b2957614b28614705565b5b8235905067ffffffffffffffff811115614b4657614b4561470a565b5b602083019150836020820283011115614b6257614b6161470f565b5b9250929050565b60008060008060408587031215614b8357614b82614667565b5b600085013567ffffffffffffffff811115614ba157614ba061466c565b5b614bad87828801614abd565b9450945050602085013567ffffffffffffffff811115614bd057614bcf61466c565b5b614bdc87828801614b13565b925092505092959194509250565b614bf381614691565b82525050565b6000602082019050614c0e6000830184614bea565b92915050565b600080fd5b60006101608284031215614c3057614c2f614c14565b5b81905092915050565b600080600060608486031215614c5257614c51614667565b5b600084013567ffffffffffffffff811115614c7057614c6f61466c565b5b614c7c86828701614c19565b9350506020614c8d868287016149f4565b9250506040614c9e868287016146f0565b9150509250925092565b614cb1816146cf565b82525050565b6000602082019050614ccc6000830184614ca8565b92915050565b6000614cdd82614691565b9050919050565b614ced81614cd2565b8114614cf857600080fd5b50565b600081359050614d0a81614ce4565b92915050565b60008060408385031215614d2757614d26614667565b5b6000614d3585828601614cfb565b9250506020614d46858286016146ba565b9150509250929050565b6000614d5b82614671565b9050919050565b614d6b81614d50565b8114614d7657600080fd5b50565b600081359050614d8881614d62565b92915050565b60008060408385031215614da557614da4614667565b5b6000614db385828601614d79565b9250506020614dc4858286016146f0565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614e1c82614dd3565b810181811067ffffffffffffffff82111715614e3b57614e3a614de4565b5b80604052505050565b6000614e4e61465d565b9050614e5a8282614e13565b919050565b600067ffffffffffffffff821115614e7a57614e79614de4565b5b614e8382614dd3565b9050602081019050919050565b82818337600083830152505050565b6000614eb2614ead84614e5f565b614e44565b905082815260208101848484011115614ece57614ecd614dce565b5b614ed9848285614e90565b509392505050565b600082601f830112614ef657614ef5614705565b5b8135614f06848260208601614e9f565b91505092915050565b60008060408385031215614f2657614f25614667565b5b6000614f34858286016146ba565b925050602083013567ffffffffffffffff811115614f5557614f5461466c565b5b614f6185828601614ee1565b9150509250929050565b614f74816149d3565b82525050565b6000602082019050614f8f6000830184614f6b565b92915050565b60008060008060608587031215614faf57614fae614667565b5b6000614fbd878288016146ba565b9450506020614fce878288016149f4565b935050604085013567ffffffffffffffff811115614fef57614fee61466c565b5b614ffb87828801614714565b925092505092959194509250565b6000819050919050565b600061502e61502961502484614671565b615009565b614671565b9050919050565b600061504082615013565b9050919050565b600061505282615035565b9050919050565b61506281615047565b82525050565b600060208201905061507d6000830184615059565b92915050565b6000806000806060858703121561509d5761509c614667565b5b60006150ab878288016146ba565b94505060206150bc878288016146f0565b935050604085013567ffffffffffffffff8111156150dd576150dc61466c565b5b6150e987828801614714565b925092505092959194509250565b60008083601f84011261510d5761510c614705565b5b8235905067ffffffffffffffff81111561512a5761512961470a565b5b6020830191508360208202830111156151465761514561470f565b5b9250929050565b60008060008060008060008060a0898b03121561516d5761516c614667565b5b600061517b8b828c016146ba565b985050602061518c8b828c016146ba565b975050604089013567ffffffffffffffff8111156151ad576151ac61466c565b5b6151b98b828c016150f7565b9650965050606089013567ffffffffffffffff8111156151dc576151db61466c565b5b6151e88b828c016150f7565b9450945050608089013567ffffffffffffffff81111561520b5761520a61466c565b5b6152178b828c01614714565b92509250509295985092959890939650565b60008060008060008060a0878903121561524657615245614667565b5b600061525489828a016146ba565b965050602061526589828a016146ba565b955050604061527689828a016146f0565b945050606061528789828a016146f0565b935050608087013567ffffffffffffffff8111156152a8576152a761466c565b5b6152b489828a01614714565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152fd826146cf565b9150615308836146cf565b92508282039050818111156153205761531f6152c3565b5b92915050565b600080fd5b600080fd5b6000808585111561534457615343615326565b5b838611156153555761535461532b565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061538f838361536b565b8261539a81356149d3565b925060208210156153da576153d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615376565b831692505b505092915050565b6000806000606084860312156153fb576153fa614667565b5b600061540986828701614d79565b935050602084013567ffffffffffffffff81111561542a5761542961466c565b5b61543686828701614ee1565b925050604084013567ffffffffffffffff8111156154575761545661466c565b5b61546386828701614ee1565b9150509250925092565b600081519050919050565b600081905092915050565b60005b838110156154a1578082015181840152602081019050615486565b60008484015250505050565b60006154b88261546d565b6154c28185615478565b93506154d2818560208601615483565b80840191505092915050565b60006154ea82846154ad565b915081905092915050565b600082825260208201905092915050565b60006155118261546d565b61551b81856154f5565b935061552b818560208601615483565b61553481614dd3565b840191505092915050565b600060208201905081810360008301526155598184615506565b905092915050565b60006040820190506155766000830185614f6b565b81810360208301526155888184615506565b90509392505050565b6000815190506155a081614865565b92915050565b6000602082840312156155bc576155bb614667565b5b60006155ca84828501615591565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615640603a836155d3565b915061564b826155e4565b604082019050919050565b6000602082019050818103600083015261566f81615633565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615701602d836155d3565b915061570c826156a5565b604082019050919050565b60006020820190508181036000830152615730816156f4565b9050919050565b600060ff82169050919050565b61574d81615737565b82525050565b60006080820190506157686000830187614f6b565b6157756020830186615744565b6157826040830185614f6b565b61578f6060830184614f6b565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006157f46033836155d3565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126158565761585561582a565b5b80840192508235915067ffffffffffffffff8211156158785761587761582f565b5b60208301925060018202360383131561589457615893615834565b5b509250929050565b60006158a7826146cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d9576158d86152c3565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006159406033836155d3565b915061594b826158e4565b604082019050919050565b6000602082019050818103600083015261596f81615933565b9050919050565b600060408201905061598b6000830185614bea565b6159986020830184614bea565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006159fb602c836155d3565b9150615a068261599f565b604082019050919050565b60006020820190508181036000830152615a2a816159ee565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615a8d602c836155d3565b9150615a9882615a31565b604082019050919050565b60006020820190508181036000830152615abc81615a80565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615b1f602e836155d3565b9150615b2a82615ac3565b604082019050919050565b60006020820190508181036000830152615b4e81615b12565b9050919050565b6000819050919050565b6000615b7a615b75615b7084615b55565b615009565b615737565b9050919050565b615b8a81615b5f565b82525050565b6000602082019050615ba56000830184615b81565b92915050565b615bb481614d50565b82525050565b6000604082019050615bcf6000830185615bab565b615bdc6020830184614ca8565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615c3f6038836155d3565b9150615c4a82615be3565b604082019050919050565b60006020820190508181036000830152615c6e81615c32565b9050919050565b6000615c8183856154f5565b9350615c8e838584614e90565b615c9783614dd3565b840190509392505050565b6000608082019050615cb76000830188614bea565b615cc46020830187614f6b565b8181036040830152615cd7818587615c75565b9050615ce660608301846148ca565b9695505050505050565b600081519050615cff81614a09565b92915050565b600060208284031215615d1b57615d1a614667565b5b6000615d2984828501615cf0565b91505092915050565b600081519050615d41816146d9565b92915050565b600060208284031215615d5d57615d5c614667565b5b6000615d6b84828501615d32565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615dd06028836155d3565b9150615ddb82615d74565b604082019050919050565b60006020820190508181036000830152615dff81615dc3565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615e3c601a836155d3565b9150615e4782615e06565b602082019050919050565b60006020820190508181036000830152615e6b81615e2f565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615ea8601b836155d3565b9150615eb382615e72565b602082019050919050565b60006020820190508181036000830152615ed781615e9b565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615f3a6029836155d3565b9150615f4582615ede565b604082019050919050565b60006020820190508181036000830152615f6981615f2d565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615fa6601c836155d3565b9150615fb182615f70565b602082019050919050565b60006020820190508181036000830152615fd581615f99565b9050919050565b600081519050615feb816149dd565b92915050565b60006020828403121561600757616006614667565b5b600061601584828501615fdc565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061607a602e836155d3565b91506160858261601e565b604082019050919050565b600060208201905081810360008301526160a98161606d565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061610c6029836155d3565b9150616117826160b0565b604082019050919050565b6000602082019050818103600083015261613b816160ff565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061619e6024836155d3565b91506161a982616142565b604082019050919050565b600060208201905081810360008301526161cd81616191565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006161f7826161d4565b91506bffffffffffffffffffffffff8203616215576162146152c3565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000616256601f836155d3565b915061626182616220565b602082019050919050565b6000602082019050818103600083015261628581616249565b9050919050565b50565b600061629c600083615478565b91506162a78261628c565b600082019050919050565b60006162bd8261628f565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006162fd6018836155d3565b9150616308826162c7565b602082019050919050565b6000602082019050818103600083015261632c816162f0565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006163696020836155d3565b915061637482616333565b602082019050919050565b600060208201905081810360008301526163988161635c565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006163fb6028836155d3565b91506164068261639f565b604082019050919050565b6000602082019050818103600083015261642a816163ee565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b6000616467601c836155d3565b915061647282616431565b602082019050919050565b600060208201905081810360008301526164968161645a565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006164f9602d836155d3565b91506165048261649d565b604082019050919050565b60006020820190508181036000830152616528816164ec565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616570601c8361652f565b915061657b8261653a565b601c82019050919050565b6000819050919050565b6165a161659c826149d3565b616586565b82525050565b60006165b282616563565b91506165be8284616590565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006166326018836155d3565b915061663d826165fc565b602082019050919050565b6000602082019050818103600083015261666181616625565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061669e601f836155d3565b91506166a982616668565b602082019050919050565b600060208201905081810360008301526166cd81616691565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006167306022836155d3565b915061673b826166d4565b604082019050919050565b6000602082019050818103600083015261675f81616723565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061679c601d836155d3565b91506167a782616766565b602082019050919050565b600060208201905081810360008301526167cb8161678f565b9050919050565b600081519050919050565b60006167e8826167d2565b6167f281856155d3565b9350616802818560208601615483565b61680b81614dd3565b840191505092915050565b6000602082019050818103600083015261683081846167dd565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c9e63d01ef8d9e03d2943c29574da9b9acb3b1b5339634d7c1bf78c73f4d07aa64736f6c63430008110033"; type TestAggregatedAccountFactoryConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts index 00997c8b..ee9088f8 100644 --- a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts @@ -21,6 +21,28 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -59,42 +81,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -102,24 +118,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -141,17 +177,24 @@ const _abi = [ { indexed: false, internalType: "address", - name: "oldRegistry", + name: "newOwner", type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, internalType: "address", - name: "newRegistry", + name: "removedOwner", type: "address", }, ], - name: "RegistryChanged", + name: "OwnerRemoved", type: "event", }, { @@ -167,19 +210,6 @@ const _abi = [ name: "Upgraded", type: "event", }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "addDeposit", @@ -188,37 +218,39 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "aggregator", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_newGuardian", type: "address", }, ], - stateMutability: "view", + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, { internalType: "address", - name: "addr", + name: "_newOwner", type: "address", }, ], - name: "canImplementInterfaceForAddress", + name: "addOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "aggregator", outputs: [ { - internalType: "bytes32", + internalType: "address", name: "", - type: "bytes32", + type: "address", }, ], stateMutability: "view", @@ -313,66 +345,143 @@ const _abi = [ }, { internalType: "address", - name: "anRegistry", + name: "", type: "address", }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ { internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", type: "address", }, ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSig", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "message", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, + ], + name: "isValidSigImpl", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -401,14 +510,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -416,7 +525,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -444,13 +553,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -462,16 +576,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, { internalType: "address", name: "", type: "address", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -488,15 +623,47 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", + type: "address", + }, + ], + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", type: "address", }, ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], stateMutability: "view", type: "function", }, @@ -509,17 +676,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -535,7 +702,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -551,19 +718,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -706,7 +860,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620040033803806200400383398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613e796200018a60003960008181610b360152610dc7015260008181610bf201528181610c8101528181610ee201528181610f7101526110210152613e796000f3fe6080604052600436106101695760003560e01c80634a58db19116100d15780638da5cb5b1161008a578063b61d27f611610064578063b61d27f61461051a578063c0c53b8b14610543578063c399ec881461056c578063f23a6e611461059757610170565b80638da5cb5b14610499578063affed0e0146104c4578063b0d691fe146104ef57610170565b80634a58db19146103c95780634d44560d146103d35780634f1ef286146103fc57806352d1902d1461041857806379cbc5fa146104435780637b1039991461046e57610170565b806320c13b0b1161012357806320c13b0b14610293578063245a7bfc146102d0578063249cb3fa146102fb5780633659cfe6146103385780633a871cdd146103615780633ad59dbc1461039e57610170565b806223de2914610175578063150b7a021461019e5780631626ba7e146101db57806318dfb3c7146102185780631a5da6c8146102415780631b71bb6e1461026a57610170565b3661017057005b600080fd5b34801561018157600080fd5b5061019c600480360381019061019791906122f9565b6105d4565b005b3480156101aa57600080fd5b506101c560048036038101906101c091906123c8565b610619565b6040516101d2919061248b565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906124dc565b61062e565b60405161020f919061248b565b60405180910390f35b34801561022457600080fd5b5061023f600480360381019061023a91906125e8565b610711565b005b34801561024d57600080fd5b5061026860048036038101906102639190612669565b610823565b005b34801561027657600080fd5b50610291600480360381019061028c9190612669565b610937565b005b34801561029f57600080fd5b506102ba60048036038101906102b59190612696565b610a4e565b6040516102c7919061248b565b60405180910390f35b3480156102dc57600080fd5b506102e5610b34565b6040516102f29190612726565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612741565b610b58565b60405161032f9190612790565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612669565b610bf0565b005b34801561036d57600080fd5b50610388600480360381019061038391906127d0565b610d79565b604051610395919061284e565b60405180910390f35b3480156103aa57600080fd5b506103b3610dc3565b6040516103c09190612726565b60405180910390f35b6103d1610deb565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906128a7565b610e60565b005b61041660048036038101906104119190612a28565b610ee0565b005b34801561042457600080fd5b5061042d61101d565b60405161043a9190612790565b60405180910390f35b34801561044f57600080fd5b506104586110d6565b6040516104659190612726565b60405180910390f35b34801561047a57600080fd5b506104836110fa565b6040516104909190612726565b60405180910390f35b3480156104a557600080fd5b506104ae611123565b6040516104bb9190612726565b60405180910390f35b3480156104d057600080fd5b506104d9611149565b6040516104e6919061284e565b60405180910390f35b3480156104fb57600080fd5b50610504611179565b6040516105119190612ae3565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190612afe565b6111a3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612bb0565b611200565b005b34801561057857600080fd5b5061058161134a565b60405161058e919061284e565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190612c03565b6113d2565b6040516105cb919061248b565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161060793929190612c9d565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106909493929190612d12565b602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190612d8a565b6106e25763ffffffff60e01b610708565b6040516020016106f190612e0e565b604051602081830303815290604052805190602001205b90509392505050565b6107196113e8565b818190508484905014610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890612ea6565b60405180910390fd5b60005b8484905081101561081c5761080985858381811061078557610784612ec6565b5b905060200201602081019061079a9190612669565b60008585858181106107af576107ae612ec6565b5b90506020028101906107c19190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b808061081490612f96565b915050610764565b5050505050565b61082b61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089290613051565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108ec929190613071565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61093f61153b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a69061310c565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a02929190613071565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610ab295949392919061312c565b602060405180830381865afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190612d8a565b610b045763ffffffff60e01b610b2a565b604051602001610b13906131c1565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b6a90613222565b6040516020818303038152906040528051906020012084148015610bb957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610be657604051602001610bcd90613283565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c769061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610cbe611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061339c565b60405180910390fd5b610d1d8161165a565b610d7681600067ffffffffffffffff811115610d3c57610d3b6128fd565b5b6040519080825280601f01601f191660200182016040528015610d6e5781602001600182028036833780820191505090505b506000611665565b50565b6000610d836117d3565b610d8d848461184a565b90506000848060400190610da19190612f04565b90501415610db357610db284611928565b5b610dbc826119d6565b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610df3611179565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e2c9190612726565b6000604051808303818588803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b5050505050565b610e6861153b565b610e70611179565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610eaa9291906133cb565b600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f669061330a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610fae611603565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061339c565b60405180910390fd5b61100d8261165a565b61101982826001611665565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a490613466565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ab6113e8565b6111fa848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114b7565b50505050565b60008060159054906101000a900460ff1615905080801561123357506001600060149054906101000a900460ff1660ff16105b80611262575061124230611a72565b15801561126157506001600060149054906101000a900460ff1660ff16145b5b6112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906134f8565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff16021790555080156112df576001600060156101000a81548160ff0219169083151502179055505b6112eb84846000611a95565b80156113445760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161133b9190613560565b60405180910390a15b50505050565b6000611354611179565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161138c9190612726565b602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd9190613590565b905090565b600063f23a6e6160e01b90509695505050505050565b6113f0611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061147657506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac9061362f565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114e091906136c9565b60006040518083038185875af1925050503d806000811461151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b50915091508161153457805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c257503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061372c565b60405180910390fd5b565b60006116317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166261153b565b50565b6116917f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611c3b565b60000160009054906101000a900460ff16156116b5576116b083611c45565b6117ce565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561171d57506040513d601f19601f8201168201806040525081019061171a9190613761565b60015b61175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613800565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613892565b60405180910390fd5b506117cd838383611cfe565b5b505050565b6117db611179565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90613924565b60405180910390fd5b565b60008061185683611d2a565b90506118be8480610140019061186c9190612f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611d5a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576001915050611922565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906119579061395c565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906139dd565b60405180910390fd5b50565b60008114611a6f5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611a2690613a23565b600060405180830381858888f193505050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611c4e81611a72565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613aaa565b60405180910390fd5b80611cba7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611c31565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0783611d81565b600082511180611d145750805b15611d2557611d238383611dd0565b505b505050565b600081604051602001611d3d9190613b37565b604051602081830303815290604052805190602001209050919050565b6000806000611d698585611dfd565b91509150611d7681611e4f565b819250505092915050565b611d8a81611c45565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611df58383604051806060016040528060278152602001613e1d60279139611fbd565b905092915050565b600080604183511415611e3f5760008060006020860151925060408601519150606086015160001a9050611e3387828585612043565b94509450505050611e48565b60006002915091505b9250929050565b60006004811115611e6357611e62613b5d565b5b816004811115611e7657611e75613b5d565b5b1415611e8157611fba565b60016004811115611e9557611e94613b5d565b5b816004811115611ea857611ea7613b5d565b5b1415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613bd8565b60405180910390fd5b60026004811115611efd57611efc613b5d565b5b816004811115611f1057611f0f613b5d565b5b1415611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613c44565b60405180910390fd5b60036004811115611f6557611f64613b5d565b5b816004811115611f7857611f77613b5d565b5b1415611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613cd6565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611fe791906136c9565b600060405180830381855af49150503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b509150915061203886838387612126565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561207e57600060039150915061211d565b6000600187878787604051600081526020016040526040516120a39493929190613d05565b6020604051602081039080840390855afa1580156120c5573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121145760006001925092505061211d565b80600092509250505b94509492505050565b60608315612189576000835114156121815761214185611a72565b612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790613d96565b60405180910390fd5b5b829050612194565b612193838361219c565b5b949350505050565b6000825111156121af5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39190613dfa565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061222b82612200565b9050919050565b61223b81612220565b811461224657600080fd5b50565b60008135905061225881612232565b92915050565b6000819050919050565b6122718161225e565b811461227c57600080fd5b50565b60008135905061228e81612268565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126122b9576122b8612294565b5b8235905067ffffffffffffffff8111156122d6576122d5612299565b5b6020830191508360018202830111156122f2576122f161229e565b5b9250929050565b60008060008060008060008060c0898b031215612319576123186121f6565b5b60006123278b828c01612249565b98505060206123388b828c01612249565b97505060406123498b828c01612249565b965050606061235a8b828c0161227f565b955050608089013567ffffffffffffffff81111561237b5761237a6121fb565b5b6123878b828c016122a3565b945094505060a089013567ffffffffffffffff8111156123aa576123a96121fb565b5b6123b68b828c016122a3565b92509250509295985092959890939650565b6000806000806000608086880312156123e4576123e36121f6565b5b60006123f288828901612249565b955050602061240388828901612249565b94505060406124148882890161227f565b935050606086013567ffffffffffffffff811115612435576124346121fb565b5b612441888289016122a3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61248581612450565b82525050565b60006020820190506124a0600083018461247c565b92915050565b6000819050919050565b6124b9816124a6565b81146124c457600080fd5b50565b6000813590506124d6816124b0565b92915050565b6000806000604084860312156124f5576124f46121f6565b5b6000612503868287016124c7565b935050602084013567ffffffffffffffff811115612524576125236121fb565b5b612530868287016122a3565b92509250509250925092565b60008083601f84011261255257612551612294565b5b8235905067ffffffffffffffff81111561256f5761256e612299565b5b60208301915083602082028301111561258b5761258a61229e565b5b9250929050565b60008083601f8401126125a8576125a7612294565b5b8235905067ffffffffffffffff8111156125c5576125c4612299565b5b6020830191508360208202830111156125e1576125e061229e565b5b9250929050565b60008060008060408587031215612602576126016121f6565b5b600085013567ffffffffffffffff8111156126205761261f6121fb565b5b61262c8782880161253c565b9450945050602085013567ffffffffffffffff81111561264f5761264e6121fb565b5b61265b87828801612592565b925092505092959194509250565b60006020828403121561267f5761267e6121f6565b5b600061268d84828501612249565b91505092915050565b600080600080604085870312156126b0576126af6121f6565b5b600085013567ffffffffffffffff8111156126ce576126cd6121fb565b5b6126da878288016122a3565b9450945050602085013567ffffffffffffffff8111156126fd576126fc6121fb565b5b612709878288016122a3565b925092505092959194509250565b61272081612220565b82525050565b600060208201905061273b6000830184612717565b92915050565b60008060408385031215612758576127576121f6565b5b6000612766858286016124c7565b925050602061277785828601612249565b9150509250929050565b61278a816124a6565b82525050565b60006020820190506127a56000830184612781565b92915050565b600080fd5b600061016082840312156127c7576127c66127ab565b5b81905092915050565b6000806000606084860312156127e9576127e86121f6565b5b600084013567ffffffffffffffff811115612807576128066121fb565b5b612813868287016127b0565b9350506020612824868287016124c7565b92505060406128358682870161227f565b9150509250925092565b6128488161225e565b82525050565b6000602082019050612863600083018461283f565b92915050565b600061287482612200565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b600080604083850312156128be576128bd6121f6565b5b60006128cc85828601612892565b92505060206128dd8582860161227f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612935826128ec565b810181811067ffffffffffffffff82111715612954576129536128fd565b5b80604052505050565b60006129676121ec565b9050612973828261292c565b919050565b600067ffffffffffffffff821115612993576129926128fd565b5b61299c826128ec565b9050602081019050919050565b82818337600083830152505050565b60006129cb6129c684612978565b61295d565b9050828152602081018484840111156129e7576129e66128e7565b5b6129f28482856129a9565b509392505050565b600082601f830112612a0f57612a0e612294565b5b8135612a1f8482602086016129b8565b91505092915050565b60008060408385031215612a3f57612a3e6121f6565b5b6000612a4d85828601612249565b925050602083013567ffffffffffffffff811115612a6e57612a6d6121fb565b5b612a7a858286016129fa565b9150509250929050565b6000819050919050565b6000612aa9612aa4612a9f84612200565b612a84565b612200565b9050919050565b6000612abb82612a8e565b9050919050565b6000612acd82612ab0565b9050919050565b612add81612ac2565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b60008060008060608587031215612b1857612b176121f6565b5b6000612b2687828801612249565b9450506020612b378782880161227f565b935050604085013567ffffffffffffffff811115612b5857612b576121fb565b5b612b64878288016122a3565b925092505092959194509250565b6000612b7d82612220565b9050919050565b612b8d81612b72565b8114612b9857600080fd5b50565b600081359050612baa81612b84565b92915050565b600080600060608486031215612bc957612bc86121f6565b5b6000612bd786828701612b9b565b9350506020612be886828701612249565b9250506040612bf986828701612249565b9150509250925092565b60008060008060008060a08789031215612c2057612c1f6121f6565b5b6000612c2e89828a01612249565b9650506020612c3f89828a01612249565b9550506040612c5089828a0161227f565b9450506060612c6189828a0161227f565b935050608087013567ffffffffffffffff811115612c8257612c816121fb565b5b612c8e89828a016122a3565b92509250509295509295509295565b6000606082019050612cb26000830186612717565b612cbf6020830185612717565b612ccc604083018461283f565b949350505050565b600082825260208201905092915050565b6000612cf18385612cd4565b9350612cfe8385846129a9565b612d07836128ec565b840190509392505050565b6000606082019050612d276000830187612717565b612d346020830186612781565b8181036040830152612d47818486612ce5565b905095945050505050565b60008115159050919050565b612d6781612d52565b8114612d7257600080fd5b50565b600081519050612d8481612d5e565b92915050565b600060208284031215612da057612d9f6121f6565b5b6000612dae84828501612d75565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612df8601f83612db7565b9150612e0382612dc2565b601f82019050919050565b6000612e1982612deb565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612e90603383612e23565b9150612e9b82612e34565b604082019050919050565b60006020820190508181036000830152612ebf81612e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612f2157612f20612ef5565b5b80840192508235915067ffffffffffffffff821115612f4357612f42612efa565b5b602083019250600182023603831315612f5f57612f5e612eff565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa18261225e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fd457612fd3612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061303b603183612e23565b915061304682612fdf565b604082019050919050565b6000602082019050818103600083015261306a8161302e565b9050919050565b60006040820190506130866000830185612717565b6130936020830184612717565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006130f6603383612e23565b91506131018261309a565b604082019050919050565b60006020820190508181036000830152613125816130e9565b9050919050565b60006060820190506131416000830188612717565b8181036020830152613154818688612ce5565b90508181036040830152613169818486612ce5565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006131ab601d83612db7565b91506131b682613175565b601d82019050919050565b60006131cc8261319e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061320c601583612db7565b9150613217826131d6565b601582019050919050565b600061322d826131ff565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b600061326d601483612db7565b915061327882613237565b601482019050919050565b600061328e82613260565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006132f4602c83612e23565b91506132ff82613298565b604082019050919050565b60006020820190508181036000830152613323816132e7565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613386602c83612e23565b91506133918261332a565b604082019050919050565b600060208201905081810360008301526133b581613379565b9050919050565b6133c581612869565b82525050565b60006040820190506133e060008301856133bc565b6133ed602083018461283f565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613450603883612e23565b915061345b826133f4565b604082019050919050565b6000602082019050818103600083015261347f81613443565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006134e2602e83612e23565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b6000819050919050565b600060ff82169050919050565b600061354a61354561354084613518565b612a84565b613522565b9050919050565b61355a8161352f565b82525050565b60006020820190506135756000830184613551565b92915050565b60008151905061358a81612268565b92915050565b6000602082840312156135a6576135a56121f6565b5b60006135b48482850161357b565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613619602983612e23565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015613683578082015181840152602081019050613668565b83811115613692576000848401525b50505050565b60006136a38261364f565b6136ad818561365a565b93506136bd818560208601613665565b80840191505092915050565b60006136d58284613698565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613716601c83612e23565b9150613721826136e0565b602082019050919050565b6000602082019050818103600083015261374581613709565b9050919050565b60008151905061375b816124b0565b92915050565b600060208284031215613777576137766121f6565b5b60006137858482850161374c565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006137ea602e83612e23565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061387c602983612e23565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612e23565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061396782613944565b91506bffffffffffffffffffffffff82141561398657613985612f67565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006139c7601f83612e23565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b50565b6000613a0d60008361365a565b9150613a18826139fd565b600082019050919050565b6000613a2e82613a00565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613a94602d83612e23565b9150613a9f82613a38565b604082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613b00601c83612db7565b9150613b0b82613aca565b601c82019050919050565b6000819050919050565b613b31613b2c826124a6565b613b16565b82525050565b6000613b4282613af3565b9150613b4e8284613b20565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613bc2601883612e23565b9150613bcd82613b8c565b602082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613c2e601f83612e23565b9150613c3982613bf8565b602082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cc0602283612e23565b9150613ccb82613c64565b604082019050919050565b60006020820190508181036000830152613cef81613cb3565b9050919050565b613cff81613522565b82525050565b6000608082019050613d1a6000830187612781565b613d276020830186613cf6565b613d346040830185612781565b613d416060830184612781565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d80601d83612e23565b9150613d8b82613d4a565b602082019050919050565b60006020820190508181036000830152613daf81613d73565b9050919050565b600081519050919050565b6000613dcc82613db6565b613dd68185612e23565b9350613de6818560208601613665565b613def816128ec565b840191505092915050565b60006020820190508181036000830152613e148184613dc1565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c0d173128a7be508d830d455354150c9883cf63f98f48007a01cf1d9cf05f5e464736f6c634300080c0033"; + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162006c6c38038062006c6c83398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea670a3b6c08930709a560c01b6200020b60201b60201c565b6200010667d0ec5ebfd5f1ef8260c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616895620003d76000396000818161191d0152611cd70152600081816119d301528181611a61015281816120890152818161211701526121c701526168956000f3fe6080604052600436106101c55760003560e01c80634a58db19116100f757806398ef1ed811610095578063b61d27f611610064578063b61d27f6146106a8578063bc197c81146106d1578063c399ec881461070e578063f23a6e611461073957610224565b806398ef1ed8146105ec578063a526d83b14610629578063affed0e014610652578063b0d691fe1461067d57610224565b806352d1902d116100d157806352d1902d146105325780637065cb481461055d57806371404156146105865780638f068430146105af57610224565b80634a58db19146104e35780634d44560d146104ed5780634f1ef2861461051657610224565b80631b71bb6e116101645780633659cfe61161013e5780633659cfe6146104295780633a871cdd146104525780633ad59dbc1461048f578063485cc955146104ba57610224565b80631b71bb6e14610398578063245a7bfc146103c15780632f54bf6e146103ec57610224565b8063150b7a02116101a0578063150b7a02146102cc57806316d4340114610309578063173825d91461034657806318dfb3c71461036f57610224565b806223de291461022957806301ffc9a7146102525780630c68ba211461028f57610224565b36610224576101de67290bbd319612162360c01b610776565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b919061476a565b610779565b005b34801561025e57600080fd5b5061027960048036038101906102749190614891565b610797565b60405161028691906148d9565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906148f4565b61097c565b6040516102c391906148d9565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190614921565b610a0e565b60405161030091906149b8565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190614a35565b610a5e565b60405161033d91906148d9565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906148f4565b611437565b005b34801561037b57600080fd5b5061039660048036038101906103919190614b69565b6114ff565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906148f4565b61173d565b005b3480156103cd57600080fd5b506103d661191b565b6040516103e39190614bf9565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906148f4565b61193f565b60405161042091906148d9565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b91906148f4565b6119d1565b005b34801561045e57600080fd5b5061047960048036038101906104749190614c39565b611b59565b6040516104869190614cb7565b60405180910390f35b34801561049b57600080fd5b506104a4611c97565b6040516104b19190614bf9565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614d10565b611cfb565b005b6104eb611ea2565b005b3480156104f957600080fd5b50610514600480360381019061050f9190614d8e565b611f53565b005b610530600480360381019061052b9190614f0f565b612087565b005b34801561053e57600080fd5b506105476121c3565b6040516105549190614f7a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906148f4565b61227c565b005b34801561059257600080fd5b506105ad60048036038101906105a891906148f4565b612344565b005b3480156105bb57600080fd5b506105d660048036038101906105d19190614f95565b61240c565b6040516105e391906148d9565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190614f95565b6124d9565b60405161062091906148d9565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b91906148f4565b612702565b005b34801561065e57600080fd5b506106676127ca565b6040516106749190614cb7565b60405180910390f35b34801561068957600080fd5b50610692612836565b60405161069f9190615068565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190615083565b61289c565b005b3480156106dd57600080fd5b506106f860048036038101906106f3919061514d565b6129ad565b60405161070591906149b8565b60405180910390f35b34801561071a57600080fd5b50610723612a01565b6040516107309190614cb7565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190615229565b612ac5565b60405161076d91906149b8565b60405180910390f35b50565b61078d671278753381487ed660c01b612b17565b5050505050505050565b60006107ad67f20d647ea02d480060c01b612b17565b6107c167ffb589296d687db060c01b612b17565b6107d56727ecf9b318901df560c01b612b17565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108525750610851675d4be9b73183ad3f60c01b612b1a565b5b806108f257507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108d557506108d4674cb5733a4ebd736b60c01b612b1a565b5b80156108f157506108f067927753031b1e765d60c01b612b1a565b5b5b8061097557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148015610974575061097366bc16169e90631c60c01b612b1a565b5b5b9050919050565b6000610992679a530c869daa649060c01b612b25565b6109a6677819779a5121f4ad60c01b612b25565b6109ba67dcc814792f5595a060c01b612b25565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a236642558288c0c26a60c01b612b17565b610a37670cd59c881166cff460c01b612b17565b610a4b67d8d160ce8c3ef4cc60c01b612b17565b63150b7a0260e01b905095945050505050565b6000610a746777258f39a67c0acd60c01b612b28565b610a8867c9d3460cf31b367060c01b612b28565b610a9c67301450deda14998860c01b612b28565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610acc67ec35fa0e327aba3360c01b612b28565b610ae06757c603851350fa0960c01b612b28565b6060610af667ed7102d9c731614b60c01b612b28565b610b0a67260c95324dc5522a60c01b612b28565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b4291906152f2565b908a8a905092610b5493929190615330565b90610b5f9190615383565b149050610b7667adb0f8e971c6f00460c01b612b28565b610b8a6775ac95bff94d832360c01b612b28565b8015610dd757610ba467b7ce1fa3f7f6604d60c01b612b28565b610bb8679fc1490a6707ce8260c01b612b28565b610bcc679cbd4322f03dcb3060c01b612b28565b6000610be2677c50636fd0d78e6e60c01b612b28565b610bf667b6c96f6498872fdd60c01b612b28565b6060610c0c67d225012c278bc14960c01b612b28565b888860009060208c8c9050610c2191906152f2565b92610c2e93929190615330565b810190610c3b91906153e2565b809650819350829450505050610c5b67414eafbc10d5dfd460c01b612b28565b610c6f679735072f1875e8c560c01b612b28565b60008503610dbb57610c8b67ece2f114e83cba5460c01b612b28565b610c9f67bb4b7709950fab6560c01b612b28565b610cb367e556fd7ed728116b60c01b612b28565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610cdb91906154de565b6000604051808303816000865af19150503d8060008114610d18576040519150601f19603f3d011682016040523d82523d6000602084013e610d1d565b606091505b5091509150610d36675bb7adbcacc27af760c01b612b28565b610d4a67925a11ac41b1a62f60c01b612b28565b81610da057610d63674b9b350a0c4e240d60c01b612b28565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d97919061553f565b60405180910390fd5b610db467270a9300cfb5deb160c01b612b28565b5050610dd0565b610dcf6719ddea40eb9c9d5e60c01b612b28565b5b5050610e47565b610deb671617c5f7b544c15460c01b612b28565b610dff67152cf4f885c3c7bd60c01b612b28565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e5b678968ba2400116cd160c01b612b28565b610e6f67d26f37fb13c4702060c01b612b28565b808015610e8c5750610e8b67e672c6829c01435e60c01b612b2b565b5b80610eb35750600083118015610eb25750610eb1672f1034641526e8e560c01b612b2b565b5b5b1561112357610ecc6787b8bb2f9d833b2360c01b612b28565b610ee06748ed04b5790955de60c01b612b28565b610ef467c07d3098ed811b0e60c01b612b28565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f2f929190615561565b602060405180830381865afa925050508015610f6957506040513d601f19601f82011682018060405250810190610f6691906155a6565b60015b610ff0573d8060008114610f99576040519150601f19603f3d011682016040523d82523d6000602084013e610f9e565b606091505b50610fb3672c516c89798db2e060c01b612b28565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610fe7919061553f565b60405180910390fd5b611004677a7dc9015ade993760c01b612b28565b611018676bd30bd513db1c1260c01b612b28565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614905061107867f77b76e97cdda63e60c01b612b28565b61108c67f2ac3b0c93d4d96060c01b612b28565b6000851480156110995750825b80156110a3575086155b156110da576110bc6732203bac67e9a5c660c01b612b28565b6110d067bacd05270bf834fa60c01b612b28565b806000526001601ffd5b6110ee67db508d98998fd4cb60c01b612b28565b61110267bd809f1f7297a39860c01b612b28565b611116671166c1324f0a4d4360c01b612b28565b809550505050505061142e565b61113767fb73a16ec6f828a360c01b612b28565b61114b67124b4f67fba3948f60c01b612b28565b61115f67a72081e2c67a966a60c01b612b28565b611173670ab810c1358d671760c01b612b28565b604187879050146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090615656565b60405180910390fd5b6111cd67c0b4b2b739bdbc3e60c01b612b28565b6111e1670f81a533fa5be34e60c01b612b28565b6111f567657c1339b273a74660c01b612b28565b6000878760009060209261120b93929190615330565b906112169190615383565b905061122c67dc3d3b49fc92cadb60c01b612b28565b6112406752ae34fa8263b21b60c01b612b28565b6000888860209060409261125693929190615330565b906112619190615383565b905061127767301232fd22fb824c60c01b612b28565b61128b67f519c889a1cef68c60c01b612b28565b6000898960408181106112a1576112a0615676565b5b9050013560f81c60f81b60f81c90506112c4679a20c64fb3f7324360c01b612b28565b6112d8678a031af26ced764160c01b612b28565b601b8160ff16141580156112f05750601c8160ff1614155b1561136c5761130967cd922db48d204f9b60c01b612b28565b61131d67833a8605e20290ce60c01b612b28565b61133167b3da6c39eac2834e60c01b612b28565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390615717565b60405180910390fd5b611380675514297355562d4860c01b612b28565b6113946757b333f889b6e2b360c01b612b28565b6113a8676603fc4d7122128560c01b612b28565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113e29493929190615753565b6020604051602081039080840390855afa158015611404573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b61144b6706cea3225e159afe60c01b610776565b61145f67768e02f4b4fe93d060c01b610776565b61147367bcb43f0f61fb5a1260c01b610776565b6114876705112cc091d04b2260c01b610776565b61148f612b36565b6114a3677b6146229717de8560c01b610776565b6114b7671a91445bcd7d6a3660c01b610776565b6114cb67087786fe3118ce4560c01b610776565b6114df6712ac3ecdf13b356f60c01b610776565b6114f3676a822ec913ef224160c01b610776565b6114fc81612c9a565b50565b611513670b312c177376d2f160c01b610776565b61152767526a718f37dbef7960c01b610776565b61153b67bc0095b6ec842fe060c01b610776565b61154f6765a7b825dc91e38260c01b610776565b611557612f16565b61156b67e65dfa654e10de0360c01b610776565b61157f6738751a29e4bbac9a60c01b610776565b6115936764a3e3565274624260c01b610776565b6115a767e3532f2d278ffcc460c01b610776565b6115bb67b28c9cc66aedc63960c01b610776565b6115cf674c0d2e74d59320d660c01b610776565b818190508484905014611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e9061580a565b60405180910390fd5b61162b6733f49bcf3f677de260c01b610776565b61163f67fda055a3194df47960c01b610776565b611653670ca2693ca40a9c3d60c01b610776565b60005b848490508110156117365761167567e45fe9f7a89384cd60c01b610776565b611689677885f77483c8c7a360c01b610776565b61172385858381811061169f5761169e615676565b5b90506020020160208101906116b491906148f4565b60008585858181106116c9576116c8615676565b5b90506020028101906116db9190615839565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613039565b808061172e9061589c565b915050611656565b5050505050565b61175167b0e8e7fc3aed8bf060c01b610776565b611765671246157b9919312560c01b610776565b61177967cbfddca365f5dede60c01b610776565b61178161315d565b61179567ab4f446b15a2b75360c01b610776565b6117a967140f31a12b03a20160c01b610776565b6117bd67c2cd95be620e67ae60c01b610776565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390615956565b60405180910390fd5b611840674b99dae5f525e91060c01b610776565b61185467897f79a11a9b512360c01b610776565b61186867f01df9d5178d9e0460c01b610776565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118bb929190615976565b60405180910390a16118d76705fb80e775388d3f60c01b610776565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006119556784c34e023fb786f860c01b613279565b611969670d806432bac21d3b60c01b613279565b61197d679da5a6f8cf654dc360c01b613279565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690615a11565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611a9e61327c565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90615aa3565b60405180910390fd5b611afd816132d3565b611b5681600067ffffffffffffffff811115611b1c57611b1b614de4565b5b6040519080825280601f01601f191660200182016040528015611b4e5781602001600182028036833780820191505090505b50600061332e565b50565b6000611b6f674a0b745640aaacbe60c01b61349c565b611b83673643bc4d265e004d60c01b61349c565b611b9767be21e9c3510eef0760c01b61349c565b611b9f61349f565b611bb3670d9ae78f9ca6bca160c01b61349c565b611bbd848461357a565b9050611bd367bac743df019f783060c01b61349c565b611be7674633441562cbb38260c01b61349c565b6000848060400190611bf99190615839565b905003611c4a57611c1467b9f604ce3adf50f460c01b61349c565b611c286740dc8d2be550a2ae60c01b61349c565b611c3c678d7f5bf9351f5d3760c01b61349c565b611c45846136ed565b611c5f565b611c5e67493644fd2e2f359760c01b61349c565b5b611c7367f86dd1b6eddb849360c01b61349c565b611c8767e338ec934ff31c9e60c01b61349c565b611c90826137ff565b9392505050565b6000611cad6774973d5ca7e43fcd60c01b613940565b611cc16704961682a02a68be60c01b613940565b611cd567c16622bec5480b9660c01b613940565b7f0000000000000000000000000000000000000000000000000000000000000000905090565b611d0f673d7cb9a88db0860060c01b613940565b60008060019054906101000a900460ff16159050808015611d405750600160008054906101000a900460ff1660ff16105b80611d6d5750611d4f30613943565b158015611d6c5750600160008054906101000a900460ff1660ff16145b5b611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390615b35565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611de9576001600060016101000a81548160ff0219169083151502179055505b611dfd67eed416eaa65ec2eb60c01b613940565b611e11678a62c0573210ae3460c01b613940565b611e2567b3fb8a06c3e79c0260c01b613940565b611e39674eaf0872e436566660c01b613940565b611e44836000613966565b8015611e9d5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611e949190615b90565b60405180910390a15b505050565b611eb667a987bf12f6bf98ab60c01b610776565b611eca671fbaaa4dbb3f884d60c01b610776565b611ede67e797a3f7fa46660c60c01b610776565b611ee6612836565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611f1f9190614bf9565b6000604051808303818588803b158015611f3857600080fd5b505af1158015611f4c573d6000803e3d6000fd5b5050505050565b611f6767fbabf181d33082b660c01b610776565b611f7b67bee35484a90cfd2660c01b610776565b611f8f673ceb9bb2daab856d60c01b610776565b611fa36791fab911752e5b5c60c01b610776565b611fab61315d565b611fbf672877b8446bdb5f0060c01b610776565b611fd3676c6fc7cbb8b3b97860c01b610776565b611fe767eb87ca9da684e3db60c01b610776565b611ffb673d9d17fec85dda7860c01b610776565b61200f675017b987e5f4e1e060c01b610776565b612017612836565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401612051929190615bba565b600060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90615a11565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661215461327c565b73ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615aa3565b60405180910390fd5b6121b3826132d3565b6121bf8282600161332e565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90615c55565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61229067b4c2b632b250bc6360c01b610776565b6122a467768e02f4b4fe93d060c01b610776565b6122b867bcb43f0f61fb5a1260c01b610776565b6122cc6705112cc091d04b2260c01b610776565b6122d4612b36565b6122e8677b6146229717de8560c01b610776565b6122fc6732bce9776427685f60c01b610776565b612310675c4d3c86a9602c6f60c01b610776565b612324670877748d77ec420260c01b610776565b6123386732ccb44361bec49260c01b610776565b61234181613aa8565b50565b612358676bacc25ce52307dd60c01b610776565b61236c67bee35484a90cfd2660c01b610776565b612380673ceb9bb2daab856d60c01b610776565b6123946791fab911752e5b5c60c01b610776565b61239c61315d565b6123b0672877b8446bdb5f0060c01b610776565b6123c467edec01844939018360c01b610776565b6123d8672d1676c1874371c960c01b610776565b6123ec6767895a735b76188060c01b610776565b6124006762377381d2b1f71460c01b610776565b61240981613c66565b50565b600061242267a69e23ef0cf0d80560c01b612b28565b6124366789508a17c1e5baf860c01b612b28565b61244a67f0e90fa9dac9b5a260c01b612b28565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b815260040161248c959493929190615ca2565b6020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190615d05565b9050949350505050565b60006124ef678cc395c88e3ae24060c01b612b28565b612503670e6cd08ae62d699160c01b612b28565b612517671a6d203d14bbeb3560c01b612b28565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612559959493929190615ca2565b6020604051808303816000875af192505050801561259557506040513d601f19601f820116820180604052508101906125929190615d05565b60015b6126cd573d80600081146125c5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ca565b606091505b506125df6763fa3d4afb8cd55b60c01b612b28565b6125f367c78e77a5e38dc67760c01b612b28565b60008151905061260d67a2319ac582c5f8b960c01b612b28565b612621679d791f94f379b3d460c01b612b28565b600181036126a15761263d674b6df8afb2c0610f60c01b612b28565b612651671241dc8732fa093a60c01b612b28565b600160f81b8260008151811061266a57612669615676565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506126fa565b6126b567fb87cb9c02294f9f60c01b612b28565b6126c96773311759eab4f85760c01b612b28565b8082fd5b6126e1672f68b0ad8fd39c0a60c01b612b28565b6126f567ba867e4ef348d1a360c01b612b28565b809150505b949350505050565b612716675a98b12456966aba60c01b610776565b61272a67bee35484a90cfd2660c01b610776565b61273e673ceb9bb2daab856d60c01b610776565b6127526791fab911752e5b5c60c01b610776565b61275a61315d565b61276e672877b8446bdb5f0060c01b610776565b61278267915d8b16ac69ed9860c01b610776565b612796671f5e91ee5a02596360c01b610776565b6127aa674b8e9096393c06f860c01b610776565b6127be67301fc09d047c18d960c01b610776565b6127c781613e24565b50565b60006127e067e6997cbe175ef33460c01b610776565b6127f4677a25fccec1173dd960c01b610776565b61280867431301e0e2e31e9060c01b610776565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061284c67f561f09cfc8827bd60c01b610776565b612860673350b6d208da79ee60c01b610776565b612874671896327d0b3f375a60c01b610776565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6128b067e2dda3667fd3757160c01b610776565b6128c467526a718f37dbef7960c01b610776565b6128d867bc0095b6ec842fe060c01b610776565b6128ec6765a7b825dc91e38260c01b610776565b6128f4612f16565b61290867e65dfa654e10de0360c01b610776565b61291c67aeaf6d5fe58842a960c01b610776565b61293067370ad7169464cc0060c01b610776565b6129446739a00ff772ffbf9060c01b610776565b6129586792e03ae1c25d108960c01b610776565b6129a7848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613039565b50505050565b60006129c367f6036d4dbbf1553b60c01b612b17565b6129d767e574cfd0134a53a360c01b612b17565b6129eb67481cad8a93626dbc60c01b612b17565b63bc197c8160e01b905098975050505050505050565b6000612a17673908573a227c011760c01b610776565b612a2b67f95a3d25f4a4d56660c01b610776565b612a3f6701732dbf20a7ffe360c01b610776565b612a47612836565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612a7f9190614bf9565b602060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190615d47565b905090565b6000612adb67d55e6083e458695760c01b612b17565b612aef67229756682a8526f660c01b612b17565b612b03672d0f5a7f66d6c2a060c01b612b17565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612b4a67216671dc6f7d651060c01b610776565b612b5e67fc696b44f549a3bd60c01b610776565b612b72677d2f775bb38d794b60c01b610776565b612b86672c1b7774324d16e460c01b610776565b612b8f3361193f565b8015612bab5750612baa679d6b1a88bd04a29560c01b6140a2565b5b80612c1957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612bfc5750612bfb67c1169fb68056496660c01b6140a2565b5b8015612c185750612c1767290c2b81e499218360c01b6140a2565b5b5b80612c455750612c283361097c565b8015612c445750612c436777d0513cc85b13d160c01b6140a2565b5b5b612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b90615de6565b60405180910390fd5b612c9867023020f196fe710560c01b610776565b565b612cae67595c0e9f3251c28760c01b613279565b612cc2676c9e8facf275455460c01b613279565b612cd6675fd1ba867bad8d9060c01b613279565b612cea675d4405176a4c718660c01b613279565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f90615e52565b60405180910390fd5b612d6c678d884950e2a04aa760c01b613279565b612d80672dca0c18590376fc60c01b613279565b612d9467a4f7a20d65860e4d60c01b613279565b612da8675167170fc48a61af60c01b613279565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b90615ebe565b60405180910390fd5b612e4867d711364ae0826ec060c01b613279565b612e5c670a57bd871732b8ad60c01b613279565b612e70675d1d32267273ab9260c01b613279565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612e9f9190614bf9565b60405180910390a1612ebb67dcc232605f03b59860c01b613279565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612f2a6731b64f8837124c3160c01b610776565b612f3e67648db564106906a760c01b610776565b612f5267c4dbbfd60bd1214960c01b610776565b612f666701512b58157c381b60c01b610776565b612f6e612836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612fb85750612fb76747f66328b063331a60c01b6140a2565b5b80612fe45750612fc73361193f565b8015612fe35750612fe267e429b1ab88ceb31060c01b6140a2565b5b5b613023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301a90615f50565b60405180910390fd5b6130376762f06635bf7b4acd60c01b610776565b565b61304d67bdfd46f0589b81c760c01b610776565b61306167b0457063cebd82a360c01b610776565b613075675b626d0fcf3aa6ce60c01b610776565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161309e91906154de565b60006040518083038185875af1925050503d80600081146130db576040519150601f19603f3d011682016040523d82523d6000602084013e6130e0565b606091505b50915091506130f9672fb56cccf4f3b66560c01b610776565b61310d6747166df0733c52e860c01b610776565b81613142576131266719461c9227bd654a60c01b610776565b61313a6767b989a4f1f2a8f560c01b610776565b805160208201fd5b61315667c859f4ceb5b7418760c01b610776565b5050505050565b61317167851edf0db3fe6a8060c01b610776565b61318567765412b7902e3abf60c01b610776565b61319967151d6c3106b9e49760c01b610776565b6131ad671b070d07d4380e9a60c01b610776565b6131b63361193f565b80156131d257506131d167d5ef82e5a5d379e060c01b6140a2565b5b8061322457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156132235750613222670cc2ae0862027a8c60c01b6140a2565b5b5b613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a90615fbc565b60405180910390fd5b61327767362a52eb7781e15260c01b610776565b565b50565b60006132aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6140ad565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6132e7675b243153b1324c8660c01b610776565b6132fb67703050f3f8cbae0160c01b610776565b61330f67096f3ba87c8df4a960c01b610776565b61332367360d12c388c6eb2e60c01b610776565b61332b61315d565b50565b61335a7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b6140b7565b60000160009054906101000a900460ff161561337e57613379836140c1565b613497565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156133e657506040513d601f19601f820116820180604052508101906133e39190615ff1565b60015b613425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341c90616090565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461348a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348190616122565b60405180910390fd5b5061349683838361417a565b5b505050565b50565b6134b367e67927338dfde90a60c01b61349c565b6134c7670e51b57b7e9b4da560c01b61349c565b6134db67e3f66e826ec687ff60c01b61349c565b6134ef6792d1df458e7acb7960c01b61349c565b6134f7612836565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906161b4565b60405180910390fd5b61357867f59af56761c9812d60c01b61349c565b565b600061359067c29ba408c7eee76560c01b610776565b6135a4673c1aef8cecb8edf860c01b610776565b6135b867edc08ed16faddf6a60c01b610776565b60006135c3836141a6565b90506135d967fcbbf19e6a4683c460c01b610776565b6135ed6765a9159f51e099f460c01b610776565b61365b613656858061014001906136049190615839565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836141d690919063ffffffff16565b61193f565b6136a55761367367682feb9fbb195d8360c01b610776565b61368767514af5066901f36e60c01b610776565b61369b670bad72a866512a0460c01b610776565b60019150506136e7565b6136b967025800585b55a6ff60c01b610776565b6136cd6705b3b124a394a8c460c01b610776565b6136e1678bad695b7ee735c860c01b610776565b60009150505b92915050565b61370167f347b6eb768867bd60c01b610776565b61371567e4b8fad4d2d1902a60c01b610776565b6137296722ce8514c24b563d60c01b610776565b61373d676bd35fd711427f6d60c01b610776565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff168092919061376c906161ec565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df9061626c565b60405180910390fd5b6137fc675143066244fa845f60c01b610776565b50565b61381367cc5c47196db5bd6160c01b61349c565b613827678b55e749b3c352ab60c01b61349c565b61383b67e6442311764077fa60c01b61349c565b6000811461392857613857671589e0478f7a186060c01b61349c565b61386b67d37e8b3807985e7360c01b61349c565b61387f67c2c62d2bb50a980360c01b61349c565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516138c7906162b2565b600060405180830381858888f193505050503d8060008114613905576040519150601f19603f3d011682016040523d82523d6000602084013e61390a565b606091505b505090506139226714643eaa19656f6660c01b61349c565b5061393d565b61393c67cc382f158ab6697a60c01b61349c565b5b50565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61397a6703748e24ba0bf9ec60c01b610776565b61398e670bc8db960be8c07860c01b610776565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506139e367019acf8eca98742f60c01b610776565b6139f767ffb0ee9b4a9774fe60c01b610776565b613a0081613aa8565b613a14675b78c5bf4202c90360c01b610776565b613a286725b6d74483d24a8260c01b610776565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613abc6717c7d6a68a08773960c01b613279565b613ad067cc8de6b882acb1a360c01b613279565b613ae4671ec2242cb4213daf60c01b613279565b613af867e7bfe4742339224760c01b613279565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7c90616313565b60405180910390fd5b613b99676270d7427db14f5b60c01b613279565b613bad6704aa357520b4416d60c01b613279565b613bc1672b9382deb815da6060c01b613279565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613bf09190614bf9565b60405180910390a1613c0c67c36c72a8ecc3a90660c01b613279565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613c7a67c36ba9a4464b6ea960c01b612b25565b613c8e67dbc59bf60721ec3760c01b612b25565b613ca267a9b899a25d7f84f360c01b612b25565b613cb6676ccf2b04ef43fe2c60c01b612b25565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d399061637f565b60405180910390fd5b613d56677f234f21a7a7167460c01b612b25565b613d6a675dad748d723fc1a560c01b612b25565b613d7e67bcc423d1b918455e60c01b612b25565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613dad9190614bf9565b60405180910390a1613dc967ea5e8a43da197a0d60c01b612b25565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613e3867473271421f468fd260c01b612b25565b613e4c6792976a0e8d69a1f860c01b612b25565b613e606722fdc4cd5a73662060c01b612b25565b613e74677f1705d0822221e360c01b612b25565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eda90616411565b60405180910390fd5b613ef767d29ec12c81e5975160c01b612b25565b613f0b675ce58ff31b29be9c60c01b612b25565b613f1f67e300c4231196178660c01b612b25565b613f336756d066aad6d03b2860c01b612b25565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb79061647d565b60405180910390fd5b613fd467ceace18cb99efb4860c01b612b25565b613fe867b298b03df19232ce60c01b612b25565b613ffc6771c3a697a02cf77360c01b612b25565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9698160405161402b9190614bf9565b60405180910390a1614047673094a602565cca5360c01b612b25565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b6140ca81613943565b614109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141009061650f565b60405180910390fd5b806141367f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6140ad565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b614183836141fd565b6000825111806141905750805b156141a15761419f838361424c565b505b505050565b6000816040516020016141b991906165a7565b604051602081830303815290604052805190602001209050919050565b60008060006141e58585614279565b915091506141f2816142ca565b819250505092915050565b614206816140c1565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614271838360405180606001604052806027815260200161683960279139614430565b905092915050565b60008060418351036142ba5760008060006020860151925060408601519150606086015160001a90506142ae878285856144b6565b945094505050506142c3565b60006002915091505b9250929050565b600060048111156142de576142dd6165cd565b5b8160048111156142f1576142f06165cd565b5b031561442d576001600481111561430b5761430a6165cd565b5b81600481111561431e5761431d6165cd565b5b0361435e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435590616648565b60405180910390fd5b60026004811115614372576143716165cd565b5b816004811115614385576143846165cd565b5b036143c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143bc906166b4565b60405180910390fd5b600360048111156143d9576143d86165cd565b5b8160048111156143ec576143eb6165cd565b5b0361442c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161442390616746565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161445a91906154de565b600060405180830381855af49150503d8060008114614495576040519150601f19603f3d011682016040523d82523d6000602084013e61449a565b606091505b50915091506144ab86838387614598565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156144f157600060039150915061458f565b6000600187878787604051600081526020016040526040516145169493929190615753565b6020604051602081039080840390855afa158015614538573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036145865760006001925092505061458f565b80600092509250505b94509492505050565b606083156145fa5760008351036145f2576145b285613943565b6145f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145e8906167b2565b60405180910390fd5b5b829050614605565b614604838361460d565b5b949350505050565b6000825111156146205781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146549190616816565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061469c82614671565b9050919050565b6146ac81614691565b81146146b757600080fd5b50565b6000813590506146c9816146a3565b92915050565b6000819050919050565b6146e2816146cf565b81146146ed57600080fd5b50565b6000813590506146ff816146d9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261472a57614729614705565b5b8235905067ffffffffffffffff8111156147475761474661470a565b5b6020830191508360018202830111156147635761476261470f565b5b9250929050565b60008060008060008060008060c0898b03121561478a57614789614667565b5b60006147988b828c016146ba565b98505060206147a98b828c016146ba565b97505060406147ba8b828c016146ba565b96505060606147cb8b828c016146f0565b955050608089013567ffffffffffffffff8111156147ec576147eb61466c565b5b6147f88b828c01614714565b945094505060a089013567ffffffffffffffff81111561481b5761481a61466c565b5b6148278b828c01614714565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61486e81614839565b811461487957600080fd5b50565b60008135905061488b81614865565b92915050565b6000602082840312156148a7576148a6614667565b5b60006148b58482850161487c565b91505092915050565b60008115159050919050565b6148d3816148be565b82525050565b60006020820190506148ee60008301846148ca565b92915050565b60006020828403121561490a57614909614667565b5b6000614918848285016146ba565b91505092915050565b60008060008060006080868803121561493d5761493c614667565b5b600061494b888289016146ba565b955050602061495c888289016146ba565b945050604061496d888289016146f0565b935050606086013567ffffffffffffffff81111561498e5761498d61466c565b5b61499a88828901614714565b92509250509295509295909350565b6149b281614839565b82525050565b60006020820190506149cd60008301846149a9565b92915050565b6000819050919050565b6149e6816149d3565b81146149f157600080fd5b50565b600081359050614a03816149dd565b92915050565b614a12816148be565b8114614a1d57600080fd5b50565b600081359050614a2f81614a09565b92915050565b600080600080600060808688031215614a5157614a50614667565b5b6000614a5f888289016146ba565b9550506020614a70888289016149f4565b945050604086013567ffffffffffffffff811115614a9157614a9061466c565b5b614a9d88828901614714565b93509350506060614ab088828901614a20565b9150509295509295909350565b60008083601f840112614ad357614ad2614705565b5b8235905067ffffffffffffffff811115614af057614aef61470a565b5b602083019150836020820283011115614b0c57614b0b61470f565b5b9250929050565b60008083601f840112614b2957614b28614705565b5b8235905067ffffffffffffffff811115614b4657614b4561470a565b5b602083019150836020820283011115614b6257614b6161470f565b5b9250929050565b60008060008060408587031215614b8357614b82614667565b5b600085013567ffffffffffffffff811115614ba157614ba061466c565b5b614bad87828801614abd565b9450945050602085013567ffffffffffffffff811115614bd057614bcf61466c565b5b614bdc87828801614b13565b925092505092959194509250565b614bf381614691565b82525050565b6000602082019050614c0e6000830184614bea565b92915050565b600080fd5b60006101608284031215614c3057614c2f614c14565b5b81905092915050565b600080600060608486031215614c5257614c51614667565b5b600084013567ffffffffffffffff811115614c7057614c6f61466c565b5b614c7c86828701614c19565b9350506020614c8d868287016149f4565b9250506040614c9e868287016146f0565b9150509250925092565b614cb1816146cf565b82525050565b6000602082019050614ccc6000830184614ca8565b92915050565b6000614cdd82614691565b9050919050565b614ced81614cd2565b8114614cf857600080fd5b50565b600081359050614d0a81614ce4565b92915050565b60008060408385031215614d2757614d26614667565b5b6000614d3585828601614cfb565b9250506020614d46858286016146ba565b9150509250929050565b6000614d5b82614671565b9050919050565b614d6b81614d50565b8114614d7657600080fd5b50565b600081359050614d8881614d62565b92915050565b60008060408385031215614da557614da4614667565b5b6000614db385828601614d79565b9250506020614dc4858286016146f0565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614e1c82614dd3565b810181811067ffffffffffffffff82111715614e3b57614e3a614de4565b5b80604052505050565b6000614e4e61465d565b9050614e5a8282614e13565b919050565b600067ffffffffffffffff821115614e7a57614e79614de4565b5b614e8382614dd3565b9050602081019050919050565b82818337600083830152505050565b6000614eb2614ead84614e5f565b614e44565b905082815260208101848484011115614ece57614ecd614dce565b5b614ed9848285614e90565b509392505050565b600082601f830112614ef657614ef5614705565b5b8135614f06848260208601614e9f565b91505092915050565b60008060408385031215614f2657614f25614667565b5b6000614f34858286016146ba565b925050602083013567ffffffffffffffff811115614f5557614f5461466c565b5b614f6185828601614ee1565b9150509250929050565b614f74816149d3565b82525050565b6000602082019050614f8f6000830184614f6b565b92915050565b60008060008060608587031215614faf57614fae614667565b5b6000614fbd878288016146ba565b9450506020614fce878288016149f4565b935050604085013567ffffffffffffffff811115614fef57614fee61466c565b5b614ffb87828801614714565b925092505092959194509250565b6000819050919050565b600061502e61502961502484614671565b615009565b614671565b9050919050565b600061504082615013565b9050919050565b600061505282615035565b9050919050565b61506281615047565b82525050565b600060208201905061507d6000830184615059565b92915050565b6000806000806060858703121561509d5761509c614667565b5b60006150ab878288016146ba565b94505060206150bc878288016146f0565b935050604085013567ffffffffffffffff8111156150dd576150dc61466c565b5b6150e987828801614714565b925092505092959194509250565b60008083601f84011261510d5761510c614705565b5b8235905067ffffffffffffffff81111561512a5761512961470a565b5b6020830191508360208202830111156151465761514561470f565b5b9250929050565b60008060008060008060008060a0898b03121561516d5761516c614667565b5b600061517b8b828c016146ba565b985050602061518c8b828c016146ba565b975050604089013567ffffffffffffffff8111156151ad576151ac61466c565b5b6151b98b828c016150f7565b9650965050606089013567ffffffffffffffff8111156151dc576151db61466c565b5b6151e88b828c016150f7565b9450945050608089013567ffffffffffffffff81111561520b5761520a61466c565b5b6152178b828c01614714565b92509250509295985092959890939650565b60008060008060008060a0878903121561524657615245614667565b5b600061525489828a016146ba565b965050602061526589828a016146ba565b955050604061527689828a016146f0565b945050606061528789828a016146f0565b935050608087013567ffffffffffffffff8111156152a8576152a761466c565b5b6152b489828a01614714565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152fd826146cf565b9150615308836146cf565b92508282039050818111156153205761531f6152c3565b5b92915050565b600080fd5b600080fd5b6000808585111561534457615343615326565b5b838611156153555761535461532b565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061538f838361536b565b8261539a81356149d3565b925060208210156153da576153d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615376565b831692505b505092915050565b6000806000606084860312156153fb576153fa614667565b5b600061540986828701614d79565b935050602084013567ffffffffffffffff81111561542a5761542961466c565b5b61543686828701614ee1565b925050604084013567ffffffffffffffff8111156154575761545661466c565b5b61546386828701614ee1565b9150509250925092565b600081519050919050565b600081905092915050565b60005b838110156154a1578082015181840152602081019050615486565b60008484015250505050565b60006154b88261546d565b6154c28185615478565b93506154d2818560208601615483565b80840191505092915050565b60006154ea82846154ad565b915081905092915050565b600082825260208201905092915050565b60006155118261546d565b61551b81856154f5565b935061552b818560208601615483565b61553481614dd3565b840191505092915050565b600060208201905081810360008301526155598184615506565b905092915050565b60006040820190506155766000830185614f6b565b81810360208301526155888184615506565b90509392505050565b6000815190506155a081614865565b92915050565b6000602082840312156155bc576155bb614667565b5b60006155ca84828501615591565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615640603a836155d3565b915061564b826155e4565b604082019050919050565b6000602082019050818103600083015261566f81615633565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615701602d836155d3565b915061570c826156a5565b604082019050919050565b60006020820190508181036000830152615730816156f4565b9050919050565b600060ff82169050919050565b61574d81615737565b82525050565b60006080820190506157686000830187614f6b565b6157756020830186615744565b6157826040830185614f6b565b61578f6060830184614f6b565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006157f46033836155d3565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126158565761585561582a565b5b80840192508235915067ffffffffffffffff8211156158785761587761582f565b5b60208301925060018202360383131561589457615893615834565b5b509250929050565b60006158a7826146cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d9576158d86152c3565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006159406033836155d3565b915061594b826158e4565b604082019050919050565b6000602082019050818103600083015261596f81615933565b9050919050565b600060408201905061598b6000830185614bea565b6159986020830184614bea565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006159fb602c836155d3565b9150615a068261599f565b604082019050919050565b60006020820190508181036000830152615a2a816159ee565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615a8d602c836155d3565b9150615a9882615a31565b604082019050919050565b60006020820190508181036000830152615abc81615a80565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615b1f602e836155d3565b9150615b2a82615ac3565b604082019050919050565b60006020820190508181036000830152615b4e81615b12565b9050919050565b6000819050919050565b6000615b7a615b75615b7084615b55565b615009565b615737565b9050919050565b615b8a81615b5f565b82525050565b6000602082019050615ba56000830184615b81565b92915050565b615bb481614d50565b82525050565b6000604082019050615bcf6000830185615bab565b615bdc6020830184614ca8565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615c3f6038836155d3565b9150615c4a82615be3565b604082019050919050565b60006020820190508181036000830152615c6e81615c32565b9050919050565b6000615c8183856154f5565b9350615c8e838584614e90565b615c9783614dd3565b840190509392505050565b6000608082019050615cb76000830188614bea565b615cc46020830187614f6b565b8181036040830152615cd7818587615c75565b9050615ce660608301846148ca565b9695505050505050565b600081519050615cff81614a09565b92915050565b600060208284031215615d1b57615d1a614667565b5b6000615d2984828501615cf0565b91505092915050565b600081519050615d41816146d9565b92915050565b600060208284031215615d5d57615d5c614667565b5b6000615d6b84828501615d32565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615dd06028836155d3565b9150615ddb82615d74565b604082019050919050565b60006020820190508181036000830152615dff81615dc3565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615e3c601a836155d3565b9150615e4782615e06565b602082019050919050565b60006020820190508181036000830152615e6b81615e2f565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615ea8601b836155d3565b9150615eb382615e72565b602082019050919050565b60006020820190508181036000830152615ed781615e9b565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615f3a6029836155d3565b9150615f4582615ede565b604082019050919050565b60006020820190508181036000830152615f6981615f2d565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615fa6601c836155d3565b9150615fb182615f70565b602082019050919050565b60006020820190508181036000830152615fd581615f99565b9050919050565b600081519050615feb816149dd565b92915050565b60006020828403121561600757616006614667565b5b600061601584828501615fdc565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061607a602e836155d3565b91506160858261601e565b604082019050919050565b600060208201905081810360008301526160a98161606d565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061610c6029836155d3565b9150616117826160b0565b604082019050919050565b6000602082019050818103600083015261613b816160ff565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061619e6024836155d3565b91506161a982616142565b604082019050919050565b600060208201905081810360008301526161cd81616191565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006161f7826161d4565b91506bffffffffffffffffffffffff8203616215576162146152c3565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000616256601f836155d3565b915061626182616220565b602082019050919050565b6000602082019050818103600083015261628581616249565b9050919050565b50565b600061629c600083615478565b91506162a78261628c565b600082019050919050565b60006162bd8261628f565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006162fd6018836155d3565b9150616308826162c7565b602082019050919050565b6000602082019050818103600083015261632c816162f0565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006163696020836155d3565b915061637482616333565b602082019050919050565b600060208201905081810360008301526163988161635c565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006163fb6028836155d3565b91506164068261639f565b604082019050919050565b6000602082019050818103600083015261642a816163ee565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b6000616467601c836155d3565b915061647282616431565b602082019050919050565b600060208201905081810360008301526164968161645a565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006164f9602d836155d3565b91506165048261649d565b604082019050919050565b60006020820190508181036000830152616528816164ec565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616570601c8361652f565b915061657b8261653a565b601c82019050919050565b6000819050919050565b6165a161659c826149d3565b616586565b82525050565b60006165b282616563565b91506165be8284616590565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006166326018836155d3565b915061663d826165fc565b602082019050919050565b6000602082019050818103600083015261666181616625565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061669e601f836155d3565b91506166a982616668565b602082019050919050565b600060208201905081810360008301526166cd81616691565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006167306022836155d3565b915061673b826166d4565b604082019050919050565b6000602082019050818103600083015261675f81616723565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061679c601d836155d3565b91506167a782616766565b602082019050919050565b600060208201905081810360008301526167cb8161678f565b9050919050565b600081519050919050565b60006167e8826167d2565b6167f281856155d3565b9350616802818560208601615483565b61680b81614dd3565b840191505092915050565b6000602082019050818103600083015261683081846167dd565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c9e63d01ef8d9e03d2943c29574da9b9acb3b1b5339634d7c1bf78c73f4d07aa64736f6c63430008110033"; type TestAggregatedAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts index 2e6e143c..7ba7fab7 100644 --- a/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts @@ -598,7 +598,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200377938038062003779833981810160405281019062000037919062000855565b8182826200005a6200004e6200014660201b60201c565b6200014e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508160049080519060200190620000a79291906200055e565b508060059080519060200190620000c09291906200055e565b5050508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200010a3060016200021260201b60201c565b6200013d30337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200038160201b60201c565b50505062000bac565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000285576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027c9062000931565b60405180910390fd5b62000299600083836200055460201b60201c565b8060036000828254620002ad91906200098c565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003619190620009fa565b60405180910390a36200037d600083836200055960201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620003f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003eb9062000a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000467576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045e9062000b25565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620005479190620009fa565b60405180910390a3505050565b505050565b505050565b8280546200056c9062000b76565b90600052602060002090601f016020900481019282620005905760008555620005dc565b82601f10620005ab57805160ff1916838001178555620005dc565b82800160010185558215620005dc579182015b82811115620005db578251825591602001919060010190620005be565b5b509050620005eb9190620005ef565b5090565b5b808211156200060a576000816000905550600101620005f0565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200064f8262000622565b9050919050565b620006618162000642565b81146200066d57600080fd5b50565b600081519050620006818162000656565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006dc8262000691565b810181811067ffffffffffffffff82111715620006fe57620006fd620006a2565b5b80604052505050565b6000620007136200060e565b9050620007218282620006d1565b919050565b600067ffffffffffffffff821115620007445762000743620006a2565b5b6200074f8262000691565b9050602081019050919050565b60005b838110156200077c5780820151818401526020810190506200075f565b838111156200078c576000848401525b50505050565b6000620007a9620007a38462000726565b62000707565b905082815260208101848484011115620007c857620007c76200068c565b5b620007d58482856200075c565b509392505050565b600082601f830112620007f557620007f462000687565b5b81516200080784826020860162000792565b91505092915050565b60006200081d8262000642565b9050919050565b6200082f8162000810565b81146200083b57600080fd5b50565b6000815190506200084f8162000824565b92915050565b60008060006060848603121562000871576200087062000618565b5b6000620008818682870162000670565b935050602084015167ffffffffffffffff811115620008a557620008a46200061d565b5b620008b386828701620007dd565b9250506040620008c6868287016200083e565b9150509250925092565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000919601f83620008d0565b91506200092682620008e1565b602082019050919050565b600060208201905081810360008301526200094c816200090a565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009998262000953565b9150620009a68362000953565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620009de57620009dd6200095d565b5b828201905092915050565b620009f48162000953565b82525050565b600060208201905062000a116000830184620009e9565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000a75602483620008d0565b915062000a828262000a17565b604082019050919050565b6000602082019050818103600083015262000aa88162000a66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000b0d602283620008d0565b915062000b1a8262000aaf565b604082019050919050565b6000602082019050818103600083015262000b408162000afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8f57607f821691505b6020821081141562000ba65762000ba562000b47565b5b50919050565b60805160a051612b6f62000c0a60003960008181610991015261188501526000818161061d0152818161077301528181610a6901528181610a9501528181610b1f01528181610baf01528181610c4e015261140a0152612b6f6000f3fe6080604052600436106101815760003560e01c80639f5ca221116100d1578063c23a5cea1161008a578063dd62ed3e11610064578063dd62ed3e14610546578063f0dda65c14610583578063f2fde38b146105ac578063f465c77e146105d557610181565b8063c23a5cea146104e8578063c399ec8814610511578063d0e30db01461053c57610181565b80639f5ca221146103d8578063a457c2d714610403578063a9059cbb14610440578063a9a234091461047d578063b0d691fe146104a6578063bb9fe6bf146104d157610181565b8063313ce5671161013e578063715018a611610118578063715018a614610340578063796d4371146103575780638da5cb5b1461038257806395d89b41146103ad57610181565b8063313ce5671461029b57806339509351146102c657806370a082311461030357610181565b80630396cb601461018657806306fdde03146101a2578063095ea7b3146101cd57806318160ddd1461020a578063205c28781461023557806323b872dd1461025e575b600080fd5b6101a0600480360381019061019b919061195b565b610613565b005b3480156101ae57600080fd5b506101b76106aa565b6040516101c49190611a21565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190611ad7565b61073c565b6040516102019190611b32565b60405180910390f35b34801561021657600080fd5b5061021f61075f565b60405161022c9190611b5c565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190611bb5565b610769565b005b34801561026a57600080fd5b5061028560048036038101906102809190611bf5565b610802565b6040516102929190611b32565b60405180910390f35b3480156102a757600080fd5b506102b0610831565b6040516102bd9190611c64565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190611ad7565b61083a565b6040516102fa9190611b32565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190611c7f565b610871565b6040516103379190611b5c565b60405180910390f35b34801561034c57600080fd5b506103556108ba565b005b34801561036357600080fd5b5061036c6108ce565b6040516103799190611b5c565b60405180910390f35b34801561038e57600080fd5b506103976108d4565b6040516103a49190611cbb565b60405180910390f35b3480156103b957600080fd5b506103c26108fd565b6040516103cf9190611a21565b60405180910390f35b3480156103e457600080fd5b506103ed61098f565b6040516103fa9190611cbb565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190611ad7565b6109b3565b6040516104379190611b32565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190611ad7565b610a2a565b6040516104749190611b32565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190611d60565b610a4d565b005b3480156104b257600080fd5b506104bb610a67565b6040516104c89190611e33565b60405180910390f35b3480156104dd57600080fd5b506104e6610a8b565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190611e4e565b610b15565b005b34801561051d57600080fd5b50610526610bab565b6040516105339190611b5c565b60405180910390f35b610544610c4c565b005b34801561055257600080fd5b5061056d60048036038101906105689190611e7b565b610cda565b60405161057a9190611b5c565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190611ad7565b610d61565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190611c7f565b610d77565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190611f16565b610dc9565b60405161060a929190611fda565b60405180910390f35b61061b610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016106759190612019565b6000604051808303818588803b15801561068e57600080fd5b505af11580156106a2573d6000803e3d6000fd5b505050505050565b6060600480546106b990612063565b80601f01602080910402602001604051908101604052809291908181526020018280546106e590612063565b80156107325780601f1061070757610100808354040283529160200191610732565b820191906000526020600020905b81548152906001019060200180831161071557829003601f168201915b5050505050905090565b600080610747610e6a565b9050610754818585610e72565b600191505092915050565b6000600354905090565b610771610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016107cc9291906120a4565b600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050505050565b60008061080d610e6a565b905061081a85828561103d565b6108258585856110c9565b60019150509392505050565b60006012905090565b600080610845610e6a565b90506108668185856108578589610cda565b61086191906120fc565b610e72565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108c2610dec565b6108cc6000611344565b565b613a9881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461090c90612063565b80601f016020809104026020016040519081016040528092919081815260200182805461093890612063565b80156109855780601f1061095a57610100808354040283529160200191610985565b820191906000526020600020905b81548152906001019060200180831161096857829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806109be610e6a565b905060006109cc8286610cda565b905083811015610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906121c4565b60405180910390fd5b610a1e8286868403610e72565b60019250505092915050565b600080610a35610e6a565b9050610a428185856110c9565b600191505092915050565b610a55611408565b610a6184848484611498565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a93610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610afb57600080fd5b505af1158015610b0f573d6000803e3d6000fd5b50505050565b610b1d610dec565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610b7691906121e4565b600060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c069190611cbb565b602060405180830381865afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612214565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610ca69190611cbb565b6000604051808303818588803b158015610cbf57600080fd5b505af1158015610cd3573d6000803e3d6000fd5b5050505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d69610dec565b610d7382826114d8565b5050565b610d7f610dec565b610d9230610d8b6108d4565b6000610e72565b610d9b81611630565b610dc630827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e72565b50565b60606000610dd5611408565b610de08585856116b4565b91509150935093915050565b610df4610e6a565b73ffffffffffffffffffffffffffffffffffffffff16610e126108d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061228d565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed99061231f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906123b1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110309190611b5c565b60405180910390a3505050565b60006110498484610cda565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110c357818110156110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061241d565b60405180910390fd5b6110c28484848403610e72565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611130906124af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612541565b60405180910390fd5b6111b483838361182f565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906125d3565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161132b9190611b5c565b60405180910390a361133e848484611834565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d9061263f565b60405180910390fd5b565b600083838101906114a99190611e4e565b905060006114c3613a98846114be91906120fc565b611839565b90506114d08230836110c9565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906126ab565b60405180910390fd5b6115546000838361182f565b806003600082825461156691906120fc565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116189190611b5c565b60405180910390a361162c60008383611834565b5050565b611638610dec565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061273d565b60405180910390fd5b6116b181611344565b50565b60606000806116c284611839565b9050613a988660a001351161170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906127cf565b60405180910390fd5b600086806040019061171e91906127fe565b9050146117905761172e8661184f565b8061174a8760000160208101906117459190611c7f565b610871565b101561178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906128d3565b60405180910390fd5b6117ee565b806117ac8760000160208101906117a79190611c7f565b610871565b10156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e49061293f565b60405180910390fd5b5b8560000160208101906118019190611c7f565b6040516020016118119190611cbb565b60405160208183030381529060405260009250925050935093915050565b505050565b505050565b6000606482611848919061298e565b9050919050565b600081806040019061186191906127fe565b600090601492611873939291906129c9565b9061187e9190612a48565b60601c90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612b19565b60405180910390fd5b5050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6119388161191f565b811461194357600080fd5b50565b6000813590506119558161192f565b92915050565b60006020828403121561197157611970611915565b5b600061197f84828501611946565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119c25780820151818401526020810190506119a7565b838111156119d1576000848401525b50505050565b6000601f19601f8301169050919050565b60006119f382611988565b6119fd8185611993565b9350611a0d8185602086016119a4565b611a16816119d7565b840191505092915050565b60006020820190508181036000830152611a3b81846119e8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6e82611a43565b9050919050565b611a7e81611a63565b8114611a8957600080fd5b50565b600081359050611a9b81611a75565b92915050565b6000819050919050565b611ab481611aa1565b8114611abf57600080fd5b50565b600081359050611ad181611aab565b92915050565b60008060408385031215611aee57611aed611915565b5b6000611afc85828601611a8c565b9250506020611b0d85828601611ac2565b9150509250929050565b60008115159050919050565b611b2c81611b17565b82525050565b6000602082019050611b476000830184611b23565b92915050565b611b5681611aa1565b82525050565b6000602082019050611b716000830184611b4d565b92915050565b6000611b8282611a43565b9050919050565b611b9281611b77565b8114611b9d57600080fd5b50565b600081359050611baf81611b89565b92915050565b60008060408385031215611bcc57611bcb611915565b5b6000611bda85828601611ba0565b9250506020611beb85828601611ac2565b9150509250929050565b600080600060608486031215611c0e57611c0d611915565b5b6000611c1c86828701611a8c565b9350506020611c2d86828701611a8c565b9250506040611c3e86828701611ac2565b9150509250925092565b600060ff82169050919050565b611c5e81611c48565b82525050565b6000602082019050611c796000830184611c55565b92915050565b600060208284031215611c9557611c94611915565b5b6000611ca384828501611a8c565b91505092915050565b611cb581611a63565b82525050565b6000602082019050611cd06000830184611cac565b92915050565b60038110611ce357600080fd5b50565b600081359050611cf581611cd6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d2057611d1f611cfb565b5b8235905067ffffffffffffffff811115611d3d57611d3c611d00565b5b602083019150836001820283011115611d5957611d58611d05565b5b9250929050565b60008060008060608587031215611d7a57611d79611915565b5b6000611d8887828801611ce6565b945050602085013567ffffffffffffffff811115611da957611da861191a565b5b611db587828801611d0a565b93509350506040611dc887828801611ac2565b91505092959194509250565b6000819050919050565b6000611df9611df4611def84611a43565b611dd4565b611a43565b9050919050565b6000611e0b82611dde565b9050919050565b6000611e1d82611e00565b9050919050565b611e2d81611e12565b82525050565b6000602082019050611e486000830184611e24565b92915050565b600060208284031215611e6457611e63611915565b5b6000611e7284828501611ba0565b91505092915050565b60008060408385031215611e9257611e91611915565b5b6000611ea085828601611a8c565b9250506020611eb185828601611a8c565b9150509250929050565b600080fd5b60006101608284031215611ed757611ed6611ebb565b5b81905092915050565b6000819050919050565b611ef381611ee0565b8114611efe57600080fd5b50565b600081359050611f1081611eea565b92915050565b600080600060608486031215611f2f57611f2e611915565b5b600084013567ffffffffffffffff811115611f4d57611f4c61191a565b5b611f5986828701611ec0565b9350506020611f6a86828701611f01565b9250506040611f7b86828701611ac2565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000611fac82611f85565b611fb68185611f90565b9350611fc68185602086016119a4565b611fcf816119d7565b840191505092915050565b60006040820190508181036000830152611ff48185611fa1565b90506120036020830184611b4d565b9392505050565b6120138161191f565b82525050565b600060208201905061202e600083018461200a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207b57607f821691505b6020821081141561208f5761208e612034565b5b50919050565b61209e81611b77565b82525050565b60006040820190506120b96000830185612095565b6120c66020830184611b4d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061210782611aa1565b915061211283611aa1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612147576121466120cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006121ae602583611993565b91506121b982612152565b604082019050919050565b600060208201905081810360008301526121dd816121a1565b9050919050565b60006020820190506121f96000830184612095565b92915050565b60008151905061220e81611aab565b92915050565b60006020828403121561222a57612229611915565b5b6000612238848285016121ff565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612277602083611993565b915061228282612241565b602082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612309602483611993565b9150612314826122ad565b604082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061239b602283611993565b91506123a68261233f565b604082019050919050565b600060208201905081810360008301526123ca8161238e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612407601d83611993565b9150612412826123d1565b602082019050919050565b60006020820190508181036000830152612436816123fa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612499602583611993565b91506124a48261243d565b604082019050919050565b600060208201905081810360008301526124c88161248c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061252b602383611993565b9150612536826124cf565b604082019050919050565b6000602082019050818103600083015261255a8161251e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006125bd602683611993565b91506125c882612561565b604082019050919050565b600060208201905081810360008301526125ec816125b0565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000612629601583611993565b9150612634826125f3565b602082019050919050565b600060208201905081810360008301526126588161261c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612695601f83611993565b91506126a08261265f565b602082019050919050565b600060208201905081810360008301526126c481612688565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612727602683611993565b9150612732826126cb565b604082019050919050565b600060208201905081810360008301526127568161271a565b9050919050565b7f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060008201527f706f73744f700000000000000000000000000000000000000000000000000000602082015250565b60006127b9602683611993565b91506127c48261275d565b604082019050919050565b600060208201905081810360008301526127e8816127ac565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261281b5761281a6127ef565b5b80840192508235915067ffffffffffffffff82111561283d5761283c6127f4565b5b602083019250600182023603831315612859576128586127f9565b5b509250929050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60008201527f6372656174652900000000000000000000000000000000000000000000000000602082015250565b60006128bd602783611993565b91506128c882612861565b604082019050919050565b600060208201905081810360008301526128ec816128b0565b9050919050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e6365000000000000600082015250565b6000612929601a83611993565b9150612934826128f3565b602082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299982611aa1565b91506129a483611aa1565b9250826129b4576129b361295f565b5b828204905092915050565b600080fd5b600080fd5b600080858511156129dd576129dc6129bf565b5b838611156129ee576129ed6129c4565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000612a548383612a04565b82612a5f8135612a0f565b92506014821015612a9f57612a9a7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802612a3b565b831692505b505092915050565b7f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160008201527f63746f7279000000000000000000000000000000000000000000000000000000602082015250565b6000612b03602583611993565b9150612b0e82612aa7565b604082019050919050565b60006020820190508181036000830152612b3281612af6565b905091905056fea2646970667358221220e79ec71e5840aa90a1271e7c33822c6cce68c24ee1f7a160b52aac0d2cf717f064736f6c634300080c0033"; + "0x60c06040523480156200001157600080fd5b506040516200418938038062004189833981810160405281019062000037919062000870565b8182826200005a6200004e6200021860201b60201c565b6200022060201b60201c565b6200007667aabb336c9ce83de860c01b620002e460201b60201c565b62000092672d07becd259a4ef060c01b620002e460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508160049081620000d8919062000b36565b508060059081620000ea919062000b36565b50505062000109671b71875c2d2a514f60c01b620002e760201b60201c565b6200012567eb0b6606e784059d60c01b620002e760201b60201c565b8273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200017567c0c4daa4876bb82260c01b620002e760201b60201c565b62000191673b92efea4b63812160c01b620002e760201b60201c565b620001a4306001620002ea60201b60201c565b620001c067f637d1788ac574b660c01b620002e760201b60201c565b620001dc679a1f60bcac09ff8760c01b620002e760201b60201c565b6200020f30337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200045860201b60201c565b50505062000e68565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200035c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003539062000c7e565b60405180910390fd5b62000370600083836200062960201b60201c565b806003600082825462000384919062000ccf565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000438919062000d1b565b60405180910390a362000454600083836200062e60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620004ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c19062000dae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005339062000e46565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200061c919062000d1b565b60405180910390a3505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006748262000647565b9050919050565b620006868162000667565b81146200069257600080fd5b50565b600081519050620006a6816200067b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200070182620006b6565b810181811067ffffffffffffffff82111715620007235762000722620006c7565b5b80604052505050565b60006200073862000633565b9050620007468282620006f6565b919050565b600067ffffffffffffffff821115620007695762000768620006c7565b5b6200077482620006b6565b9050602081019050919050565b60005b83811015620007a157808201518184015260208101905062000784565b60008484015250505050565b6000620007c4620007be846200074b565b6200072c565b905082815260208101848484011115620007e357620007e2620006b1565b5b620007f084828562000781565b509392505050565b600082601f83011262000810576200080f620006ac565b5b815162000822848260208601620007ad565b91505092915050565b6000620008388262000667565b9050919050565b6200084a816200082b565b81146200085657600080fd5b50565b6000815190506200086a816200083f565b92915050565b6000806000606084860312156200088c576200088b6200063d565b5b60006200089c8682870162000695565b935050602084015167ffffffffffffffff811115620008c057620008bf62000642565b5b620008ce86828701620007f8565b9250506040620008e18682870162000859565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200093e57607f821691505b602082108103620009545762000953620008f6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200097f565b620009ca86836200097f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a1762000a1162000a0b84620009e2565b620009ec565b620009e2565b9050919050565b6000819050919050565b62000a3383620009f6565b62000a4b62000a428262000a1e565b8484546200098c565b825550505050565b600090565b62000a6262000a53565b62000a6f81848462000a28565b505050565b5b8181101562000a975762000a8b60008262000a58565b60018101905062000a75565b5050565b601f82111562000ae65762000ab0816200095a565b62000abb846200096f565b8101602085101562000acb578190505b62000ae362000ada856200096f565b83018262000a74565b50505b505050565b600082821c905092915050565b600062000b0b6000198460080262000aeb565b1980831691505092915050565b600062000b26838362000af8565b9150826002028217905092915050565b62000b4182620008eb565b67ffffffffffffffff81111562000b5d5762000b5c620006c7565b5b62000b69825462000925565b62000b7682828562000a9b565b600060209050601f83116001811462000bae576000841562000b99578287015190505b62000ba5858262000b18565b86555062000c15565b601f19841662000bbe866200095a565b60005b8281101562000be85784890151825560018201915060208501945060208101905062000bc1565b8683101562000c08578489015162000c04601f89168262000af8565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c66601f8362000c1d565b915062000c738262000c2e565b602082019050919050565b6000602082019050818103600083015262000c998162000c57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cdc82620009e2565b915062000ce983620009e2565b925082820190508082111562000d045762000d0362000ca0565b5b92915050565b62000d1581620009e2565b82525050565b600060208201905062000d32600083018462000d0a565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000d9660248362000c1d565b915062000da38262000d38565b604082019050919050565b6000602082019050818103600083015262000dc98162000d87565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000e2e60228362000c1d565b915062000e3b8262000dd0565b604082019050919050565b6000602082019050818103600083015262000e618162000e1f565b9050919050565b60805160a0516132c362000ec660003960008181610a590152611ff10152600081816106810152818161083b01528181610b9501528181610c2501528181610d1301528181610ddf01528181610eba015261184101526132c36000f3fe6080604052600436106101815760003560e01c80639f5ca221116100d1578063c23a5cea1161008a578063dd62ed3e11610064578063dd62ed3e14610546578063f0dda65c14610583578063f2fde38b146105ac578063f465c77e146105d557610181565b8063c23a5cea146104e8578063c399ec8814610511578063d0e30db01461053c57610181565b80639f5ca221146103d8578063a457c2d714610403578063a9059cbb14610440578063a9a234091461047d578063b0d691fe146104a6578063bb9fe6bf146104d157610181565b8063313ce5671161013e578063715018a611610118578063715018a614610340578063796d4371146103575780638da5cb5b1461038257806395d89b41146103ad57610181565b8063313ce5671461029b57806339509351146102c657806370a082311461030357610181565b80630396cb601461018657806306fdde03146101a2578063095ea7b3146101cd57806318160ddd1461020a578063205c28781461023557806323b872dd1461025e575b600080fd5b6101a0600480360381019061019b91906120db565b610613565b005b3480156101ae57600080fd5b506101b761070e565b6040516101c49190612198565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef919061224e565b6107a0565b60405161020191906122a9565b60405180910390f35b34801561021657600080fd5b5061021f6107c3565b60405161022c91906122d3565b60405180910390f35b34801561024157600080fd5b5061025c6004803603810190610257919061232c565b6107cd565b005b34801561026a57600080fd5b506102856004803603810190610280919061236c565b6108ca565b60405161029291906122a9565b60405180910390f35b3480156102a757600080fd5b506102b06108f9565b6040516102bd91906123db565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061224e565b610902565b6040516102fa91906122a9565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906123f6565b610939565b60405161033791906122d3565b60405180910390f35b34801561034c57600080fd5b50610355610982565b005b34801561036357600080fd5b5061036c610996565b60405161037991906122d3565b60405180910390f35b34801561038e57600080fd5b5061039761099c565b6040516103a49190612432565b60405180910390f35b3480156103b957600080fd5b506103c26109c5565b6040516103cf9190612198565b60405180910390f35b3480156103e457600080fd5b506103ed610a57565b6040516103fa9190612432565b60405180910390f35b34801561040f57600080fd5b5061042a6004803603810190610425919061224e565b610a7b565b60405161043791906122a9565b60405180910390f35b34801561044c57600080fd5b506104676004803603810190610462919061224e565b610af2565b60405161047491906122a9565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906124d7565b610b15565b005b3480156104b257600080fd5b506104bb610b93565b6040516104c891906125aa565b60405180910390f35b3480156104dd57600080fd5b506104e6610bb7565b005b3480156104f457600080fd5b5061050f600480360381019061050a91906125c5565b610ca5565b005b34801561051d57600080fd5b50610526610d9f565b60405161053391906122d3565b60405180910390f35b610544610e7c565b005b34801561055257600080fd5b5061056d600480360381019061056891906125f2565b610f46565b60405161057a91906122d3565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061224e565b610fcd565b005b3480156105b857600080fd5b506105d360048036038101906105ce91906123f6565b611047565b005b3480156105e157600080fd5b506105fc60048036038101906105f7919061268d565b61114d565b60405161060a929190612751565b60405180910390f35b61062767b8237d27482ab06b60c01b6111d4565b61062f6111d7565b61064367e2f107173549500460c01b6111d4565b6106576701033209d47e5b2460c01b6111d4565b61066b67dcd4652c61f0b32d60c01b6111d4565b61067f67eae392c3eb511cc760c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016106d99190612790565b6000604051808303818588803b1580156106f257600080fd5b505af1158015610706573d6000803e3d6000fd5b505050505050565b60606004805461071d906127da565b80601f0160208091040260200160405190810160405280929190818152602001828054610749906127da565b80156107965780601f1061076b57610100808354040283529160200191610796565b820191906000526020600020905b81548152906001019060200180831161077957829003601f168201915b5050505050905090565b6000806107ab611255565b90506107b881858561125d565b600191505092915050565b6000600354905090565b6107e1672907e6d97c3d1da360c01b6111d4565b6107e96111d7565b6107fd678ac019c63563710260c01b6111d4565b61081167da1f1c840719888260c01b6111d4565b61082567bc135ce98e9f326f60c01b6111d4565b61083967532d977f60999f3e60c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161089492919061281a565b600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b505050505050565b6000806108d5611255565b90506108e2858285611426565b6108ed8585856114b2565b60019150509392505050565b60006012905090565b60008061090d611255565b905061092e81858561091f8589610f46565b6109299190612872565b61125d565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61098a6111d7565b610994600061172b565b565b613a9881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546109d4906127da565b80601f0160208091040260200160405190810160405280929190818152602001828054610a00906127da565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610a86611255565b90506000610a948286610f46565b905083811015610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad090612918565b60405180910390fd5b610ae6828686840361125d565b60019250505092915050565b600080610afd611255565b9050610b0a8185856114b2565b600191505092915050565b610b29672cf57c41b8b89fcb60c01b6111d4565b610b3d6799497fbe705cd9f760c01b6111d4565b610b51679b4512fe9e58bae960c01b6111d4565b610b596117ef565b610b6d6793ce2f3709fe770560c01b6111d4565b610b816790067c65a6f5d3a860c01b6111d4565b610b8d848484846118e3565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bcb67ec8a9719e7b677d060c01b6111d4565b610bd36111d7565b610be767672cc496b6067cea60c01b6111d4565b610bfb674fdbd001b77629ae60c01b6111d4565b610c0f677362eae3491c0ae160c01b6111d4565b610c236797f9e99fb1d4b33860c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8b57600080fd5b505af1158015610c9f573d6000803e3d6000fd5b50505050565b610cb967c9ef1b986fb51fe860c01b6111d4565b610cc16111d7565b610cd567de53cad8928d67f560c01b6111d4565b610ce9677af1d989d252676f60c01b6111d4565b610cfd676fd423196847dbb160c01b6111d4565b610d1167097023434434ee0460c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610d6a9190612938565b600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b5050505050565b6000610db567f6be01970597753160c01b6111d4565b610dc9673f87ae81816372b460c01b6111d4565b610ddd67bd328ab4ce68c2fb60c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e369190612432565b602060405180830381865afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190612968565b905090565b610e90673943ebd1bec8d2d660c01b6111d4565b610ea46702fc4196924a47ac60c01b6111d4565b610eb8675d10604969f00bcf60c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f129190612432565b6000604051808303818588803b158015610f2b57600080fd5b505af1158015610f3f573d6000803e3d6000fd5b5050505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fe1678f31d140349eb68360c01b6119c3565b610fe96111d7565b610ffd67d736ab0c631cfabc60c01b6119c3565b611011672ba234632d6fe18060c01b6119c3565b6110256721aeb9c0c362089260c01b6119c3565b611039671e7331cd3db9efa460c01b6119c3565b61104382826119c6565b5050565b61105b67b1c6c16bf9b67f7b60c01b6119c3565b6110636111d7565b6110776716e334cb171b56a860c01b6119c3565b61108b67373e3e45b7bb059860c01b6119c3565b61109f6707a81277c0d1780e60c01b6119c3565b6110b367481bd3f1fdf924b660c01b6119c3565b6110c6306110bf61099c565b600061125d565b6110da675daae1465456f77160c01b6119c3565b6110ee67ddbeff4c1b9164c860c01b6119c3565b6110f781611b1d565b61110b67993e40e1d6cc040d60c01b6119c3565b61111f67a8ce8f0ba8fe06b960c01b6119c3565b61114a30827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61125d565b50565b606060006111656791cf27427781cd8860c01b6111d4565b611179676434b0ee41880ab260c01b6111d4565b61118d67f2c91afe86e9062d60c01b6111d4565b6111956117ef565b6111a96723ccedb6dfbcc30860c01b6111d4565b6111bd67287492035946b96c60c01b6111d4565b6111c8858585611ba0565b91509150935093915050565b50565b6111df611255565b73ffffffffffffffffffffffffffffffffffffffff166111fd61099c565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906129e1565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390612a73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290612b05565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161141991906122d3565b60405180910390a3505050565b60006114328484610f46565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114ac578181101561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149590612b71565b60405180910390fd5b6114ab848484840361125d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890612c03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790612c95565b60405180910390fd5b61159b838383611ee7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990612d27565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161171291906122d3565b60405180910390a3611725848484611eec565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6118036793fe0ed3ca04f82b60c01b6111d4565b611817678abd782107e62dce60c01b6111d4565b61182b67b9c2ce2852bf0cf360c01b6111d4565b61183f67f8314810c2ffd6e460c01b6111d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c490612d93565b60405180910390fd5b6118e1677eb1fed1a5060b5e60c01b6111d4565b565b6118f767b072aad4d879ced960c01b6119c3565b61190b672c2f1559bd355d1460c01b6119c3565b61191f674591e51221c39e2860c01b6119c3565b61193367a762de1cb325e5c860c01b6119c3565b6000838381019061194491906125c5565b905061195a67764ac536f74993a060c01b6119c3565b61196e67cc27466ef7d68ba360c01b6119c3565b6000611986613a98846119819190612872565b611ef1565b905061199c67a1719e108d695aa160c01b6119c3565b6119b067c28cca9167b6229460c01b6119c3565b6119bb8230836114b2565b505050505050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90612dff565b60405180910390fd5b611a4160008383611ee7565b8060036000828254611a539190612872565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b0591906122d3565b60405180910390a3611b1960008383611eec565b5050565b611b256111d7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90612e91565b60405180910390fd5b611b9d8161172b565b50565b60606000611bb766ab810c61b37eb960c01b6119c3565b611bcb6730dd52cc970de86560c01b6119c3565b611bdf6713b93a000befda3160c01b6119c3565b6000611bea84611ef1565b9050611c00675f3d0a148bedf54b60c01b6119c3565b611c1467b1b9fa3f7f181fe360c01b6119c3565b611c2867c8e9ff74180ef15260c01b6119c3565b613a988660a0013511611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790612f23565b60405180910390fd5b611c8467cc23186ef97d31aa60c01b6119c3565b611c9867c69f71dbe1b42a7560c01b6119c3565b611cac67d860b65ce3584fbf60c01b6119c3565b6000868060400190611cbe9190612f52565b905014611dbc57611cd967ce9ce1c5a297994460c01b6119c3565b611ced676b592de8a1993aa660c01b6119c3565b611d0167499070543def719d60c01b6119c3565b611d0a86611f43565b611d1e676fef204c75566f6860c01b6119c3565b611d3267347d4e3338cc15ce60c01b6119c3565b611d4667be80582b64b2c15260c01b6119c3565b80611d62876000016020810190611d5d91906123f6565b610939565b1015611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613027565b60405180910390fd5b611db7674d93047746b0ad3160c01b6119c3565b611e7e565b611dd06702d5ddd8470f9f0b60c01b6119c3565b611de4672f29d1e8814cfad460c01b6119c3565b611df867abe45ae4a58f8b0760c01b6119c3565b611e0c67370584484a18bd8260c01b6119c3565b80611e28876000016020810190611e2391906123f6565b610939565b1015611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6090613093565b60405180910390fd5b611e7d672ba2c5501969dcc260c01b6119c3565b5b611e926757f9367e0ec9a1de60c01b6119c3565b611ea6676c074322f6565c8a60c01b6119c3565b856000016020810190611eb991906123f6565b604051602001611ec99190612432565b60405160208183030381529060405260009250925050935093915050565b505050565b505050565b6000611f0767f6fc8ed5afc870dc60c01b6119c3565b611f1b6771cdd71fe79b6d4360c01b6119c3565b611f2f6725190a8f34ec16b760c01b6119c3565b606482611f3c91906130e2565b9050919050565b611f5767aef2bb1c226a53ef60c01b6119c3565b611f6b67ea7b4d80a1871c0c60c01b6119c3565b611f7f67b16c2302808f49a960c01b6119c3565b6000818060400190611f919190612f52565b600090601492611fa39392919061311d565b90611fae919061319c565b60601c9050611fc767676c15124f1bc08b60c01b6119c3565b611fdb67cb769257f27a970660c01b6119c3565b611fef670459d4e79e849a4060c01b6119c3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120749061326d565b60405180910390fd5b6120916782c756be59d85dc360c01b6119c3565b5050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6120b88161209f565b81146120c357600080fd5b50565b6000813590506120d5816120af565b92915050565b6000602082840312156120f1576120f0612095565b5b60006120ff848285016120c6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612142578082015181840152602081019050612127565b60008484015250505050565b6000601f19601f8301169050919050565b600061216a82612108565b6121748185612113565b9350612184818560208601612124565b61218d8161214e565b840191505092915050565b600060208201905081810360008301526121b2818461215f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121e5826121ba565b9050919050565b6121f5816121da565b811461220057600080fd5b50565b600081359050612212816121ec565b92915050565b6000819050919050565b61222b81612218565b811461223657600080fd5b50565b60008135905061224881612222565b92915050565b6000806040838503121561226557612264612095565b5b600061227385828601612203565b925050602061228485828601612239565b9150509250929050565b60008115159050919050565b6122a38161228e565b82525050565b60006020820190506122be600083018461229a565b92915050565b6122cd81612218565b82525050565b60006020820190506122e860008301846122c4565b92915050565b60006122f9826121ba565b9050919050565b612309816122ee565b811461231457600080fd5b50565b60008135905061232681612300565b92915050565b6000806040838503121561234357612342612095565b5b600061235185828601612317565b925050602061236285828601612239565b9150509250929050565b60008060006060848603121561238557612384612095565b5b600061239386828701612203565b93505060206123a486828701612203565b92505060406123b586828701612239565b9150509250925092565b600060ff82169050919050565b6123d5816123bf565b82525050565b60006020820190506123f060008301846123cc565b92915050565b60006020828403121561240c5761240b612095565b5b600061241a84828501612203565b91505092915050565b61242c816121da565b82525050565b60006020820190506124476000830184612423565b92915050565b6003811061245a57600080fd5b50565b60008135905061246c8161244d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261249757612496612472565b5b8235905067ffffffffffffffff8111156124b4576124b3612477565b5b6020830191508360018202830111156124d0576124cf61247c565b5b9250929050565b600080600080606085870312156124f1576124f0612095565b5b60006124ff8782880161245d565b945050602085013567ffffffffffffffff8111156125205761251f61209a565b5b61252c87828801612481565b9350935050604061253f87828801612239565b91505092959194509250565b6000819050919050565b600061257061256b612566846121ba565b61254b565b6121ba565b9050919050565b600061258282612555565b9050919050565b600061259482612577565b9050919050565b6125a481612589565b82525050565b60006020820190506125bf600083018461259b565b92915050565b6000602082840312156125db576125da612095565b5b60006125e984828501612317565b91505092915050565b6000806040838503121561260957612608612095565b5b600061261785828601612203565b925050602061262885828601612203565b9150509250929050565b600080fd5b6000610160828403121561264e5761264d612632565b5b81905092915050565b6000819050919050565b61266a81612657565b811461267557600080fd5b50565b60008135905061268781612661565b92915050565b6000806000606084860312156126a6576126a5612095565b5b600084013567ffffffffffffffff8111156126c4576126c361209a565b5b6126d086828701612637565b93505060206126e186828701612678565b92505060406126f286828701612239565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000612723826126fc565b61272d8185612707565b935061273d818560208601612124565b6127468161214e565b840191505092915050565b6000604082019050818103600083015261276b8185612718565b905061277a60208301846122c4565b9392505050565b61278a8161209f565b82525050565b60006020820190506127a56000830184612781565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127f257607f821691505b602082108103612805576128046127ab565b5b50919050565b612814816122ee565b82525050565b600060408201905061282f600083018561280b565b61283c60208301846122c4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061287d82612218565b915061288883612218565b92508282019050808211156128a05761289f612843565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612902602583612113565b915061290d826128a6565b604082019050919050565b60006020820190508181036000830152612931816128f5565b9050919050565b600060208201905061294d600083018461280b565b92915050565b60008151905061296281612222565b92915050565b60006020828403121561297e5761297d612095565b5b600061298c84828501612953565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129cb602083612113565b91506129d682612995565b602082019050919050565b600060208201905081810360008301526129fa816129be565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a5d602483612113565b9150612a6882612a01565b604082019050919050565b60006020820190508181036000830152612a8c81612a50565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612aef602283612113565b9150612afa82612a93565b604082019050919050565b60006020820190508181036000830152612b1e81612ae2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612b5b601d83612113565b9150612b6682612b25565b602082019050919050565b60006020820190508181036000830152612b8a81612b4e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612bed602583612113565b9150612bf882612b91565b604082019050919050565b60006020820190508181036000830152612c1c81612be0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7f602383612113565b9150612c8a82612c23565b604082019050919050565b60006020820190508181036000830152612cae81612c72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612d11602683612113565b9150612d1c82612cb5565b604082019050919050565b60006020820190508181036000830152612d4081612d04565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000612d7d601583612113565b9150612d8882612d47565b602082019050919050565b60006020820190508181036000830152612dac81612d70565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612de9601f83612113565b9150612df482612db3565b602082019050919050565b60006020820190508181036000830152612e1881612ddc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e7b602683612113565b9150612e8682612e1f565b604082019050919050565b60006020820190508181036000830152612eaa81612e6e565b9050919050565b7f546f6b656e5061796d61737465723a2067617320746f6f206c6f7720666f722060008201527f706f73744f700000000000000000000000000000000000000000000000000000602082015250565b6000612f0d602683612113565b9150612f1882612eb1565b604082019050919050565b60006020820190508181036000830152612f3c81612f00565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612f6f57612f6e612f43565b5b80840192508235915067ffffffffffffffff821115612f9157612f90612f48565b5b602083019250600182023603831315612fad57612fac612f4d565b5b509250929050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e636520287072652d60008201527f6372656174652900000000000000000000000000000000000000000000000000602082015250565b6000613011602783612113565b915061301c82612fb5565b604082019050919050565b6000602082019050818103600083015261304081613004565b9050919050565b7f546f6b656e5061796d61737465723a206e6f2062616c616e6365000000000000600082015250565b600061307d601a83612113565b915061308882613047565b602082019050919050565b600060208201905081810360008301526130ac81613070565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130ed82612218565b91506130f883612218565b925082613108576131076130b3565b5b828204905092915050565b600080fd5b600080fd5b6000808585111561313157613130613113565b5b8386111561314257613141613118565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006131a88383613158565b826131b38135613163565b925060148210156131f3576131ee7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360140360080261318f565b831692505b505092915050565b7f546f6b656e5061796d61737465723a2077726f6e67206163636f756e7420666160008201527f63746f7279000000000000000000000000000000000000000000000000000000602082015250565b6000613257602583612113565b9150613262826131fb565b604082019050919050565b600060208201905081810360008301526132868161324a565b905091905056fea2646970667358221220e55a52792e74ee39810d9e09b33bf1322f14ae1c9782fb3460eee3250394441964736f6c63430008110033"; type TokenPaymasterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts b/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts index 98a4ddfd..8dd504ee 100644 --- a/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts @@ -426,7 +426,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200228438038062002284833981810160405281019062000037919062000244565b81620000586200004c620000c960201b60201c565b620000d160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050506200028b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001c7826200019a565b9050919050565b6000620001db82620001ba565b9050919050565b620001ed81620001ce565b8114620001f957600080fd5b50565b6000815190506200020d81620001e2565b92915050565b6200021e81620001ba565b81146200022a57600080fd5b50565b6000815190506200023e8162000213565b92915050565b600080604083850312156200025e576200025d62000195565b5b60006200026e85828601620001fc565b925050602062000281858286016200022d565b9150509250929050565b60805160a051611f9b620002e9600039600081816104c60152610d0201526000818161039e01528181610435015281816106330152818161065f015281816106e901528181610779015281816108180152610ae10152611f9b6000f3fe6080604052600436106100f35760003560e01c8063a9a234091161008a578063c399ec8811610059578063c399ec88146102f8578063d0e30db014610323578063f2fde38b1461032d578063f465c77e14610356576100f3565b8063a9a2340914610264578063b0d691fe1461028d578063bb9fe6bf146102b8578063c23a5cea146102cf576100f3565b80638da5cb5b116100c65780638da5cb5b1461017f57806394d4ad60146101aa57806394e1fc19146101ea5780639c90b44314610227576100f3565b80630396cb60146100f8578063205c28781461011457806323d9ac9b1461013d578063715018a614610168575b600080fd5b610112600480360381019061010d9190611117565b610394565b005b34801561012057600080fd5b5061013b600480360381019061013691906111d8565b61042b565b005b34801561014957600080fd5b506101526104c4565b60405161015f9190611239565b60405180910390f35b34801561017457600080fd5b5061017d6104e8565b005b34801561018b57600080fd5b506101946104fc565b6040516101a19190611239565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc91906112b9565b610525565b6040516101e19493929190611385565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190611416565b610574565b60405161021e919061149e565b60405180910390f35b34801561023357600080fd5b5061024e600480360381019061024991906114e5565b6105ff565b60405161025b9190611521565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190611561565b610617565b005b34801561029957600080fd5b506102a2610631565b6040516102af9190611634565b60405180910390f35b3480156102c457600080fd5b506102cd610655565b005b3480156102db57600080fd5b506102f660048036038101906102f1919061164f565b6106df565b005b34801561030457600080fd5b5061030d610775565b60405161031a9190611521565b60405180910390f35b61032b610816565b005b34801561033957600080fd5b50610354600480360381019061034f91906114e5565b6108a4565b005b34801561036257600080fd5b5061037d600480360381019061037891906116a8565b610928565b60405161038b92919061178e565b60405180910390f35b61039c61094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016103f691906117cd565b6000604051808303818588803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505050505050565b61043361094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161048e9291906117f7565b600060405180830381600087803b1580156104a857600080fd5b505af11580156104bc573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104f061094b565b6104fa60006109c9565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080366000858560149060549261053f9392919061182a565b81019061054c9190611865565b8094508195505050858560549080926105679392919061182a565b9150915092959194509250565b600061057f84610a8d565b46306001600061058e89610acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486866040516020016105e0969594939291906118a5565b6040516020818303038152906040528051906020012090509392505050565b60016020528060005260406000206000915090505481565b61061f610adf565b61062b84848484610b6f565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61065d61094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106c557600080fd5b505af11580156106d9573d6000803e3d6000fd5b50505050565b6106e761094b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610740919061190d565b600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107d09190611239565b602060405180830381865afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610811919061193d565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108709190611239565b6000604051808303818588803b15801561088957600080fd5b505af115801561089d573d6000803e3d6000fd5b5050505050565b6108ac61094b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610913906119ed565b60405180910390fd5b610925816109c9565b50565b60606000610934610adf565b61093f858585610baa565b91509150935093915050565b610953610d96565b73ffffffffffffffffffffffffffffffffffffffff166109716104fc565b73ffffffffffffffffffffffffffffffffffffffff16146109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90611a59565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606036600083806101200190610aa39190611a88565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b6000808235905080915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490611b37565b60405180910390fd5b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190611ba3565b60405180910390fd5b606060008080366000610bcc89806101200190610bc79190611a88565b610525565b93509350935093506040828290501480610be95750604182829050145b610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90611c35565b60405180910390fd5b6000610c3d610c388b8787610574565b610d9e565b905060016000610c4c8c610acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610c9790611c84565b9190505550610cea8184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610dce565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d6757610d4860018686610df5565b6040518060200160405280600081525090965096505050505050610d8e565b610d7360008686610df5565b60405180602001604052806000815250909650965050505050505b935093915050565b600033905090565b600081604051602001610db19190611d45565b604051602081830303815290604052805190602001209050919050565b6000806000610ddd8585610e2e565b91509150610dea81610e80565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610e1d576000610e20565b60015b60ff16171790509392505050565b600080604183511415610e705760008060006020860151925060408601519150606086015160001a9050610e6487828585610fee565b94509450505050610e79565b60006002915091505b9250929050565b60006004811115610e9457610e93611d6b565b5b816004811115610ea757610ea6611d6b565b5b1415610eb257610feb565b60016004811115610ec657610ec5611d6b565b5b816004811115610ed957610ed8611d6b565b5b1415610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190611de6565b60405180910390fd5b60026004811115610f2e57610f2d611d6b565b5b816004811115610f4157610f40611d6b565b5b1415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990611e52565b60405180910390fd5b60036004811115610f9657610f95611d6b565b5b816004811115610fa957610fa8611d6b565b5b1415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611ee4565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156110295760006003915091506110c8565b60006001878787876040516000815260200160405260405161104e9493929190611f20565b6020604051602081039080840390855afa158015611070573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110bf576000600192509250506110c8565b80600092509250505b94509492505050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6110f4816110db565b81146110ff57600080fd5b50565b600081359050611111816110eb565b92915050565b60006020828403121561112d5761112c6110d1565b5b600061113b84828501611102565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061116f82611144565b9050919050565b61117f81611164565b811461118a57600080fd5b50565b60008135905061119c81611176565b92915050565b6000819050919050565b6111b5816111a2565b81146111c057600080fd5b50565b6000813590506111d2816111ac565b92915050565b600080604083850312156111ef576111ee6110d1565b5b60006111fd8582860161118d565b925050602061120e858286016111c3565b9150509250929050565b600061122382611144565b9050919050565b61123381611218565b82525050565b600060208201905061124e600083018461122a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261127957611278611254565b5b8235905067ffffffffffffffff81111561129657611295611259565b5b6020830191508360018202830111156112b2576112b161125e565b5b9250929050565b600080602083850312156112d0576112cf6110d1565b5b600083013567ffffffffffffffff8111156112ee576112ed6110d6565b5b6112fa85828601611263565b92509250509250929050565b600065ffffffffffff82169050919050565b61132181611306565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006113648385611327565b9350611371838584611338565b61137a83611347565b840190509392505050565b600060608201905061139a6000830187611318565b6113a76020830186611318565b81810360408301526113ba818486611358565b905095945050505050565b600080fd5b600061016082840312156113e1576113e06113c5565b5b81905092915050565b6113f381611306565b81146113fe57600080fd5b50565b600081359050611410816113ea565b92915050565b60008060006060848603121561142f5761142e6110d1565b5b600084013567ffffffffffffffff81111561144d5761144c6110d6565b5b611459868287016113ca565b935050602061146a86828701611401565b925050604061147b86828701611401565b9150509250925092565b6000819050919050565b61149881611485565b82525050565b60006020820190506114b3600083018461148f565b92915050565b6114c281611218565b81146114cd57600080fd5b50565b6000813590506114df816114b9565b92915050565b6000602082840312156114fb576114fa6110d1565b5b6000611509848285016114d0565b91505092915050565b61151b816111a2565b82525050565b60006020820190506115366000830184611512565b92915050565b6003811061154957600080fd5b50565b60008135905061155b8161153c565b92915050565b6000806000806060858703121561157b5761157a6110d1565b5b60006115898782880161154c565b945050602085013567ffffffffffffffff8111156115aa576115a96110d6565b5b6115b687828801611263565b935093505060406115c9878288016111c3565b91505092959194509250565b6000819050919050565b60006115fa6115f56115f084611144565b6115d5565b611144565b9050919050565b600061160c826115df565b9050919050565b600061161e82611601565b9050919050565b61162e81611613565b82525050565b60006020820190506116496000830184611625565b92915050565b600060208284031215611665576116646110d1565b5b60006116738482850161118d565b91505092915050565b61168581611485565b811461169057600080fd5b50565b6000813590506116a28161167c565b92915050565b6000806000606084860312156116c1576116c06110d1565b5b600084013567ffffffffffffffff8111156116df576116de6110d6565b5b6116eb868287016113ca565b93505060206116fc86828701611693565b925050604061170d868287016111c3565b9150509250925092565b600081519050919050565b60005b83811015611740578082015181840152602081019050611725565b8381111561174f576000848401525b50505050565b600061176082611717565b61176a8185611327565b935061177a818560208601611722565b61178381611347565b840191505092915050565b600060408201905081810360008301526117a88185611755565b90506117b76020830184611512565b9392505050565b6117c7816110db565b82525050565b60006020820190506117e260008301846117be565b92915050565b6117f181611164565b82525050565b600060408201905061180c60008301856117e8565b6118196020830184611512565b9392505050565b600080fd5b600080fd5b6000808585111561183e5761183d611820565b5b8386111561184f5761184e611825565b5b6001850283019150848603905094509492505050565b6000806040838503121561187c5761187b6110d1565b5b600061188a85828601611401565b925050602061189b85828601611401565b9150509250929050565b600060c08201905081810360008301526118bf8189611755565b90506118ce6020830188611512565b6118db604083018761122a565b6118e86060830186611512565b6118f56080830185611318565b61190260a0830184611318565b979650505050505050565b600060208201905061192260008301846117e8565b92915050565b600081519050611937816111ac565b92915050565b600060208284031215611953576119526110d1565b5b600061196184828501611928565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006119d760268361196a565b91506119e28261197b565b604082019050919050565b60006020820190508181036000830152611a06816119ca565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a4360208361196a565b9150611a4e82611a0d565b602082019050919050565b60006020820190508181036000830152611a7281611a36565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611aa557611aa4611a79565b5b80840192508235915067ffffffffffffffff821115611ac757611ac6611a7e565b5b602083019250600182023603831315611ae357611ae2611a83565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000611b2160158361196a565b9150611b2c82611aeb565b602082019050919050565b60006020820190508181036000830152611b5081611b14565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611b8d600d8361196a565b9150611b9882611b57565b602082019050919050565b60006020820190508181036000830152611bbc81611b80565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e60008201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b6000611c1f60408361196a565b9150611c2a82611bc3565b604082019050919050565b60006020820190508181036000830152611c4e81611c12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c8f826111a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611cc257611cc1611c55565b5b600182019050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611d0e601c83611ccd565b9150611d1982611cd8565b601c82019050919050565b6000819050919050565b611d3f611d3a82611485565b611d24565b82525050565b6000611d5082611d01565b9150611d5c8284611d2e565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611dd060188361196a565b9150611ddb82611d9a565b602082019050919050565b60006020820190508181036000830152611dff81611dc3565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611e3c601f8361196a565b9150611e4782611e06565b602082019050919050565b60006020820190508181036000830152611e6b81611e2f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ece60228361196a565b9150611ed982611e72565b604082019050919050565b60006020820190508181036000830152611efd81611ec1565b9050919050565b600060ff82169050919050565b611f1a81611f04565b82525050565b6000608082019050611f35600083018761148f565b611f426020830186611f11565b611f4f604083018561148f565b611f5c606083018461148f565b9594505050505056fea26469706673582212201c5abfaaf385ce49cfbc8c62299461000b93686a2380258a810c5e2489eda74964736f6c634300080c0033"; + "0x60c06040523480156200001157600080fd5b50604051620029fb380380620029fb8339818101604052810190620000379190620002ba565b81620000586200004c6200013960201b60201c565b6200014160201b60201c565b6200007467aabb336c9ce83de860c01b6200020560201b60201c565b62000090672d07becd259a4ef060c01b6200020560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620000e1675edecb2fe7769a9660c01b6200020860201b60201c565b620000fd67e1b97c6fdbfe022560c01b6200020860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050505062000301565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200023d8262000210565b9050919050565b6000620002518262000230565b9050919050565b620002638162000244565b81146200026f57600080fd5b50565b600081519050620002838162000258565b92915050565b620002948162000230565b8114620002a057600080fd5b50565b600081519050620002b48162000289565b92915050565b60008060408385031215620002d457620002d36200020b565b5b6000620002e48582860162000272565b9250506020620002f785828601620002a3565b9150509250929050565b60805160a05161269c6200035f6000396000818161058e0152611309015260008181610402015281816104fd015281816107d7015281816108670152818161095501528181610a2101528181610afc0152610f47015261269c6000f3fe6080604052600436106100f35760003560e01c8063a9a234091161008a578063c399ec8811610059578063c399ec88146102f8578063d0e30db014610323578063f2fde38b1461032d578063f465c77e14610356576100f3565b8063a9a2340914610264578063b0d691fe1461028d578063bb9fe6bf146102b8578063c23a5cea146102cf576100f3565b80638da5cb5b116100c65780638da5cb5b1461017f57806394d4ad60146101aa57806394e1fc19146101ea5780639c90b44314610227576100f3565b80630396cb60146100f8578063205c28781461011457806323d9ac9b1461013d578063715018a614610168575b600080fd5b610112600480360381019061010d9190611822565b610394565b005b34801561012057600080fd5b5061013b600480360381019061013691906118e3565b61048f565b005b34801561014957600080fd5b5061015261058c565b60405161015f9190611944565b60405180910390f35b34801561017457600080fd5b5061017d6105b0565b005b34801561018b57600080fd5b506101946105c4565b6040516101a19190611944565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc91906119c4565b6105ed565b6040516101e19493929190611a90565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190611b21565b610678565b60405161021e9190611ba9565b60405180910390f35b34801561023357600080fd5b5061024e60048036038101906102499190611bf0565b61073f565b60405161025b9190611c2c565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190611c6c565b610757565b005b34801561029957600080fd5b506102a26107d5565b6040516102af9190611d3f565b60405180910390f35b3480156102c457600080fd5b506102cd6107f9565b005b3480156102db57600080fd5b506102f660048036038101906102f19190611d5a565b6108e7565b005b34801561030457600080fd5b5061030d6109e1565b60405161031a9190611c2c565b60405180910390f35b61032b610abe565b005b34801561033957600080fd5b50610354600480360381019061034f9190611bf0565b610b88565b005b34801561036257600080fd5b5061037d60048036038101906103789190611db3565b610c0b565b60405161038b929190611e90565b60405180910390f35b6103a867b8237d27482ab06b60c01b610c92565b6103b0610c95565b6103c467e2f107173549500460c01b610c92565b6103d86701033209d47e5b2460c01b610c92565b6103ec67dcd4652c61f0b32d60c01b610c92565b61040067eae392c3eb511cc760c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161045a9190611ecf565b6000604051808303818588803b15801561047357600080fd5b505af1158015610487573d6000803e3d6000fd5b505050505050565b6104a3672907e6d97c3d1da360c01b610c92565b6104ab610c95565b6104bf678ac019c63563710260c01b610c92565b6104d367da1f1c840719888260c01b610c92565b6104e767bc135ce98e9f326f60c01b610c92565b6104fb67532d977f60999f3e60c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610556929190611ef9565b600060405180830381600087803b15801561057057600080fd5b505af1158015610584573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6105b8610c95565b6105c26000610d13565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080366000610607675f7000c4a500d1ef60c01b610dd7565b61061b67f4d7ccfe3412ce1b60c01b610dd7565b858560149060549261062f93929190611f2c565b81019061063c9190611f67565b8094508195505050610658671240e566567b251260c01b610dd7565b8585605490809261066b93929190611f2c565b9150915092959194509250565b600061068e6792fea9b48daadc9e60c01b610dd7565b6106a26793acbaf4c00babb260c01b610dd7565b6106b6671584f5c82e62443860c01b610dd7565b6106bf84610dda565b4630600160006106ce89610e6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054868660405160200161072096959493929190611fa7565b6040516020818303038152906040528051906020012090509392505050565b60016020528060005260406000206000915090505481565b61076b672cf57c41b8b89fcb60c01b610c92565b61077f6799497fbe705cd9f760c01b610c92565b610793679b4512fe9e58bae960c01b610c92565b61079b610ef5565b6107af6793ce2f3709fe770560c01b610c92565b6107c36790067c65a6f5d3a860c01b610c92565b6107cf84848484610fe9565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61080d67ec8a9719e7b677d060c01b610c92565b610815610c95565b61082967672cc496b6067cea60c01b610c92565b61083d674fdbd001b77629ae60c01b610c92565b610851677362eae3491c0ae160c01b610c92565b6108656797f9e99fb1d4b33860c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b50505050565b6108fb67c9ef1b986fb51fe860c01b610c92565b610903610c95565b61091767de53cad8928d67f560c01b610c92565b61092b677af1d989d252676f60c01b610c92565b61093f676fd423196847dbb160c01b610c92565b61095367097023434434ee0460c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016109ac919061200f565b600060405180830381600087803b1580156109c657600080fd5b505af11580156109da573d6000803e3d6000fd5b5050505050565b60006109f767f6be01970597753160c01b610c92565b610a0b673f87ae81816372b460c01b610c92565b610a1f67bd328ab4ce68c2fb60c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a789190611944565b602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab9919061203f565b905090565b610ad2673943ebd1bec8d2d660c01b610c92565b610ae66702fc4196924a47ac60c01b610c92565b610afa675d10604969f00bcf60c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610b549190611944565b6000604051808303818588803b158015610b6d57600080fd5b505af1158015610b81573d6000803e3d6000fd5b5050505050565b610b90610c95565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906120ef565b60405180910390fd5b610c0881610d13565b50565b60606000610c236791cf27427781cd8860c01b610c92565b610c37676434b0ee41880ab260c01b610c92565b610c4b67f2c91afe86e9062d60c01b610c92565b610c53610ef5565b610c676723ccedb6dfbcc30860c01b610c92565b610c7b67287492035946b96c60c01b610c92565b610c86858585611074565b91509150935093915050565b50565b610c9d611415565b73ffffffffffffffffffffffffffffffffffffffff16610cbb6105c4565b73ffffffffffffffffffffffffffffffffffffffff1614610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d089061215b565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b6060610df0678bd2fc9c99fb458c60c01b610dd7565b610e0467990d544f4970b98d60c01b610dd7565b610e18675b49bfe7b20a4c4c60c01b610dd7565b36600083806101200190610e2c919061218a565b91509150610e446719482ab37e587f7760c01b610dd7565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b6000610e8267e1c1c6be6d21e0b660c01b61141d565b610e9667169e881823fa915860c01b61141d565b610eaa675cfc74aca58d577760c01b61141d565b6000610ec067ee6cead2c727cb3b60c01b61141d565b82359050610ed867d47ac8b49cb9c10f60c01b61141d565b610eec67f19fd641611eb47860c01b61141d565b80915050919050565b610f096793fe0ed3ca04f82b60c01b610c92565b610f1d678abd782107e62dce60c01b610c92565b610f3167b9c2ce2852bf0cf360c01b610c92565b610f4567f8314810c2ffd6e460c01b610c92565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612239565b60405180910390fd5b610fe7677eb1fed1a5060b5e60c01b610c92565b565b610ffd67fadd006a881f054660c01b610c92565b61101167d9873e623a945ead60c01b610c92565b61102567b1300829c5ca164560c01b610c92565b61103967b80ccfd3afb0094c60c01b610c92565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b906122a5565b60405180910390fd5b6060600061108c672793ef61be7744c360c01b610dd7565b6110a067e626d39e28baadae60c01b610dd7565b6110b4670ea326c002162d9560c01b610dd7565b6110c8673d142b2d5d37369360c01b610dd7565b6000803660006110e7898061012001906110e2919061218a565b6105ed565b935093509350935061110367fc8912ecfdb7d1b960c01b610dd7565b61111767ef8192294b994c0660c01b610dd7565b61112b67b58f514d8e265ee960c01b610dd7565b60408282905014801561114e575061114d674c466c780b08aaf360c01b611420565b5b8061117857506041828290501480156111775750611176679dd5dc46e1895f5a60c01b611420565b5b5b6111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90612337565b60405180910390fd5b6111cb676a48a8b55930cb0c60c01b610dd7565b6111df676c73138ae6e7339560c01b610dd7565b6111f367fa5abca08c1d544c60c01b610dd7565b60006112086112038b8787610678565b61142b565b905061121e673aa249beaecff5f660c01b610dd7565b6001600061122b8c610e6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061127690612386565b919050555061128f67497725b4df5b283e60c01b610dd7565b6112a36758684106210bc47c60c01b610dd7565b6112f18184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061145b565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146113aa5761135767cf031f593d72d00c60c01b610dd7565b61136b67083effb3f6fb0e9560c01b610dd7565b61137f6773a1f322df62fd1c60c01b610dd7565b61138b60018686611482565b604051806020016040528060008152509096509650505050505061140d565b6113be67b3365397d484c8b660c01b610dd7565b6113d267424bb3bbc8c24b4e60c01b610dd7565b6113e6677be32ae1b65199d460c01b610dd7565b6113f260008686611482565b60405180602001604052806000815250909650965050505050505b935093915050565b600033905090565b50565b600060019050919050565b60008160405160200161143e9190612446565b604051602081830303815290604052805190602001209050919050565b600080600061146a858561152e565b915091506114778161157f565b819250505092915050565b600061149867f46661bb4e8bad1e60c01b6116e5565b6114ac67ad115cf58922913f60c01b6116e5565b6114c067e939de70e4ee463c60c01b6116e5565b60d08265ffffffffffff16901b60a08465ffffffffffff16901b8580156114f757506114f6675d24490627414a1d60c01b6116e8565b5b8061151257506115116748f460bd74afa2fc60c01b6116f3565b5b61151d576000611520565b60015b60ff16171790509392505050565b600080604183510361156f5760008060006020860151925060408601519150606086015160001a9050611563878285856116fa565b94509450505050611578565b60006002915091505b9250929050565b600060048111156115935761159261246c565b5b8160048111156115a6576115a561246c565b5b03156116e257600160048111156115c0576115bf61246c565b5b8160048111156115d3576115d261246c565b5b03611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a906124e7565b60405180910390fd5b600260048111156116275761162661246c565b5b81600481111561163a5761163961246c565b5b0361167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190612553565b60405180910390fd5b6003600481111561168e5761168d61246c565b5b8160048111156116a1576116a061246c565b5b036116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d8906125e5565b60405180910390fd5b5b50565b50565b600060019050919050565b6000919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156117355760006003915091506117d3565b60006001878787876040516000815260200160405260405161175a9493929190612621565b6020604051602081039080840390855afa15801561177c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ca576000600192509250506117d3565b80600092509250505b94509492505050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6117ff816117e6565b811461180a57600080fd5b50565b60008135905061181c816117f6565b92915050565b600060208284031215611838576118376117dc565b5b60006118468482850161180d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061187a8261184f565b9050919050565b61188a8161186f565b811461189557600080fd5b50565b6000813590506118a781611881565b92915050565b6000819050919050565b6118c0816118ad565b81146118cb57600080fd5b50565b6000813590506118dd816118b7565b92915050565b600080604083850312156118fa576118f96117dc565b5b600061190885828601611898565b9250506020611919858286016118ce565b9150509250929050565b600061192e8261184f565b9050919050565b61193e81611923565b82525050565b60006020820190506119596000830184611935565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119845761198361195f565b5b8235905067ffffffffffffffff8111156119a1576119a0611964565b5b6020830191508360018202830111156119bd576119bc611969565b5b9250929050565b600080602083850312156119db576119da6117dc565b5b600083013567ffffffffffffffff8111156119f9576119f86117e1565b5b611a058582860161196e565b92509250509250929050565b600065ffffffffffff82169050919050565b611a2c81611a11565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611a6f8385611a32565b9350611a7c838584611a43565b611a8583611a52565b840190509392505050565b6000606082019050611aa56000830187611a23565b611ab26020830186611a23565b8181036040830152611ac5818486611a63565b905095945050505050565b600080fd5b60006101608284031215611aec57611aeb611ad0565b5b81905092915050565b611afe81611a11565b8114611b0957600080fd5b50565b600081359050611b1b81611af5565b92915050565b600080600060608486031215611b3a57611b396117dc565b5b600084013567ffffffffffffffff811115611b5857611b576117e1565b5b611b6486828701611ad5565b9350506020611b7586828701611b0c565b9250506040611b8686828701611b0c565b9150509250925092565b6000819050919050565b611ba381611b90565b82525050565b6000602082019050611bbe6000830184611b9a565b92915050565b611bcd81611923565b8114611bd857600080fd5b50565b600081359050611bea81611bc4565b92915050565b600060208284031215611c0657611c056117dc565b5b6000611c1484828501611bdb565b91505092915050565b611c26816118ad565b82525050565b6000602082019050611c416000830184611c1d565b92915050565b60038110611c5457600080fd5b50565b600081359050611c6681611c47565b92915050565b60008060008060608587031215611c8657611c856117dc565b5b6000611c9487828801611c57565b945050602085013567ffffffffffffffff811115611cb557611cb46117e1565b5b611cc18782880161196e565b93509350506040611cd4878288016118ce565b91505092959194509250565b6000819050919050565b6000611d05611d00611cfb8461184f565b611ce0565b61184f565b9050919050565b6000611d1782611cea565b9050919050565b6000611d2982611d0c565b9050919050565b611d3981611d1e565b82525050565b6000602082019050611d546000830184611d30565b92915050565b600060208284031215611d7057611d6f6117dc565b5b6000611d7e84828501611898565b91505092915050565b611d9081611b90565b8114611d9b57600080fd5b50565b600081359050611dad81611d87565b92915050565b600080600060608486031215611dcc57611dcb6117dc565b5b600084013567ffffffffffffffff811115611dea57611de96117e1565b5b611df686828701611ad5565b9350506020611e0786828701611d9e565b9250506040611e18868287016118ce565b9150509250925092565b600081519050919050565b60005b83811015611e4b578082015181840152602081019050611e30565b60008484015250505050565b6000611e6282611e22565b611e6c8185611a32565b9350611e7c818560208601611e2d565b611e8581611a52565b840191505092915050565b60006040820190508181036000830152611eaa8185611e57565b9050611eb96020830184611c1d565b9392505050565b611ec9816117e6565b82525050565b6000602082019050611ee46000830184611ec0565b92915050565b611ef38161186f565b82525050565b6000604082019050611f0e6000830185611eea565b611f1b6020830184611c1d565b9392505050565b600080fd5b600080fd5b60008085851115611f4057611f3f611f22565b5b83861115611f5157611f50611f27565b5b6001850283019150848603905094509492505050565b60008060408385031215611f7e57611f7d6117dc565b5b6000611f8c85828601611b0c565b9250506020611f9d85828601611b0c565b9150509250929050565b600060c0820190508181036000830152611fc18189611e57565b9050611fd06020830188611c1d565b611fdd6040830187611935565b611fea6060830186611c1d565b611ff76080830185611a23565b61200460a0830184611a23565b979650505050505050565b60006020820190506120246000830184611eea565b92915050565b600081519050612039816118b7565b92915050565b600060208284031215612055576120546117dc565b5b60006120638482850161202a565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120d960268361206c565b91506120e48261207d565b604082019050919050565b60006020820190508181036000830152612108816120cc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061214560208361206c565b91506121508261210f565b602082019050919050565b6000602082019050818103600083015261217481612138565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126121a7576121a661217b565b5b80840192508235915067ffffffffffffffff8211156121c9576121c8612180565b5b6020830192506001820236038313156121e5576121e4612185565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b600061222360158361206c565b915061222e826121ed565b602082019050919050565b6000602082019050818103600083015261225281612216565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b600061228f600d8361206c565b915061229a82612259565b602082019050919050565b600060208201905081810360008301526122be81612282565b9050919050565b7f566572696679696e675061796d61737465723a20696e76616c6964207369676e60008201527f6174757265206c656e67746820696e207061796d6173746572416e6444617461602082015250565b600061232160408361206c565b915061232c826122c5565b604082019050919050565b6000602082019050818103600083015261235081612314565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612391826118ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123c3576123c2612357565b5b600182019050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061240f601c836123ce565b915061241a826123d9565b601c82019050919050565b6000819050919050565b61244061243b82611b90565b612425565b82525050565b600061245182612402565b915061245d828461242f565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006124d160188361206c565b91506124dc8261249b565b602082019050919050565b60006020820190508181036000830152612500816124c4565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061253d601f8361206c565b915061254882612507565b602082019050919050565b6000602082019050818103600083015261256c81612530565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006125cf60228361206c565b91506125da82612573565b604082019050919050565b600060208201905081810360008301526125fe816125c2565b9050919050565b600060ff82169050919050565b61261b81612605565b82525050565b60006080820190506126366000830187611b9a565b6126436020830186612612565b6126506040830185611b9a565b61265d6060830184611b9a565b9594505050505056fea26469706673582212203421721ea918f01dd44f1d75eb75bd9513ae5efec5c89897611613f19c0ed5db64736f6c63430008110033"; type VerifyingPaymasterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts index cd218bf5..9389aa20 100644 --- a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts @@ -41,11 +41,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "uint256", name: "salt", @@ -75,11 +70,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "uint256", name: "salt", @@ -105,7 +95,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051620055433803806200554383398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b613dd0806200177383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516115e1620001926000396000818160db0152818161012f015261024f01526115e16000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063b2349c3b146200006d578063eb0eed2e14620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b600480360381019062000085919062000643565b620000fd565b6040516200009a9190620006c6565b60405180910390f35b620000c16004803603810190620000bb919062000643565b62000205565b604051620000d09190620003ef565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000620001fb8360001b60405180602001620001199062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888876040516024016200016593929190620007d7565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001bd929190620008a7565b604051602081830303815290604052604051602001620001df9291906200091d565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000806200021686868686620000fd565b905060008173ffffffffffffffffffffffffffffffffffffffff163b90506000811115620002495781925050506200030c565b8460001b7f00000000000000000000000000000000000000000000000000000000000000008888876040516024016200028593929190620007d7565b6040516020818303038152906040526305d3177d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002d89062000356565b620002e5929190620008a7565b8190604051809103906000f590508015801562000306573d6000803e3d6000fd5b50925050505b949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200094683390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b6000604051905090565b600080fd5b6000620004288262000364565b9050919050565b60006200043c826200041b565b9050919050565b6200044e816200042f565b81146200045a57600080fd5b50565b6000813590506200046e8162000443565b92915050565b6200047f816200041b565b81146200048b57600080fd5b50565b6000813590506200049f8162000474565b92915050565b6000819050919050565b620004ba81620004a5565b8114620004c657600080fd5b50565b600081359050620004da81620004af565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053082620004e5565b810181811067ffffffffffffffff82111715620005525762000551620004f6565b5b80604052505050565b6000620005676200040c565b905062000575828262000525565b919050565b600067ffffffffffffffff821115620005985762000597620004f6565b5b602082029050919050565b600080fd5b6000620005bf620005b9846200057a565b6200055b565b90508060208402830185811115620005dc57620005db620005a3565b5b835b81811015620006095780620005f48882620004c9565b845260208401935050602081019050620005de565b5050509392505050565b600082601f8301126200062b576200062a620004e0565b5b60046200063a848285620005a8565b91505092915050565b60008060008060e0858703121562000660576200065f62000416565b5b600062000670878288016200045d565b945050602062000683878288016200048e565b93505060406200069687828801620004c9565b9250506060620006a98782880162000613565b91505092959194509250565b620006c0816200041b565b82525050565b6000602082019050620006dd6000830184620006b5565b92915050565b6000620006f0826200038e565b9050919050565b60006200070482620006e3565b9050919050565b6200071681620006f7565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b6200074781620004a5565b82525050565b60006200075b83836200073c565b60208301905092915050565b6000602082019050919050565b6200077f816200071c565b6200078b818462000727565b9250620007988262000732565b8060005b83811015620007cf578151620007b387826200074d565b9650620007c08362000767565b9250506001810190506200079c565b505050505050565b600060c082019050620007ee60008301866200070b565b620007fd6020830185620006b5565b6200080c604083018462000774565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200085057808201518184015260208101905062000833565b8381111562000860576000848401525b50505050565b6000620008738262000814565b6200087f81856200081f565b93506200089181856020860162000830565b6200089c81620004e5565b840191505092915050565b6000604082019050620008be6000830185620006b5565b8181036020830152620008d2818462000866565b90509392505050565b600081905092915050565b6000620008f38262000814565b620008ff8185620008db565b93506200091181856020860162000830565b80840191505092915050565b60006200092b8285620008e6565b9150620009398284620008e6565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b9b507dced6ab71ef743a6cda413325a8a34f41eb63a35b40de4b3f5d204a87264736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162003dd038038062003dd083398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613c466200018a60003960008181610cc40152611b97015260008181610d8001528181610e0f01528181611048015281816110d701526111870152613c466000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b1461055c578063c399ec8814610585578063e02afbae146105b0578063f23a6e61146105db5761018b565b8063affed0e0146104dd578063b0d691fe14610508578063b61d27f6146105335761018b565b80634d44560d146103ec5780634f1ef2861461041557806352d1902d1461043157806379cbc5fa1461045c5780637b103999146104875780638da5cb5b146104b25761018b565b80631b71bb6e1161013e578063249cb3fa11610118578063249cb3fa1461033f5780633659cfe61461037c5780633a871cdd146103a55780634a58db19146103e25761018b565b80631b71bb6e146102ae57806320c13b0b146102d7578063245a7bfc146103145761018b565b806223de291461019057806305d3177d146101b9578063150b7a02146101e25780631626ba7e1461021f57806318dfb3c71461025c5780631a5da6c8146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b2919061217c565b610618565b005b3480156101c557600080fd5b506101e060048036038101906101db91906123c6565b61065d565b005b3480156101ee57600080fd5b5061020960048036038101906102049190612419565b6107a7565b60405161021691906124dc565b60405180910390f35b34801561022b57600080fd5b506102466004803603810190610241919061252d565b6107bc565b60405161025391906124dc565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190612639565b61089f565b005b34801561029157600080fd5b506102ac60048036038101906102a791906126ba565b6109b1565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906126ba565b610ac5565b005b3480156102e357600080fd5b506102fe60048036038101906102f991906126e7565b610bdc565b60405161030b91906124dc565b60405180910390f35b34801561032057600080fd5b50610329610cc2565b6040516103369190612777565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612792565b610ce6565b60405161037391906127e1565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906126ba565b610d7e565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612821565b610f07565b6040516103d9919061289f565b60405180910390f35b6103ea610f51565b005b3480156103f857600080fd5b50610413600480360381019061040e91906128f8565b610fc6565b005b61042f600480360381019061042a91906129ed565b611046565b005b34801561043d57600080fd5b50610446611183565b60405161045391906127e1565b60405180910390f35b34801561046857600080fd5b5061047161123c565b60405161047e9190612777565b60405180910390f35b34801561049357600080fd5b5061049c611260565b6040516104a99190612777565b60405180910390f35b3480156104be57600080fd5b506104c7611289565b6040516104d49190612777565b60405180910390f35b3480156104e957600080fd5b506104f26112af565b6040516104ff919061289f565b60405180910390f35b34801561051457600080fd5b5061051d6112df565b60405161052a9190612aa8565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ac3565b611309565b005b34801561056857600080fd5b50610583600480360381019061057e9190612b37565b611366565b005b34801561059157600080fd5b5061059a6114af565b6040516105a7919061289f565b60405180910390f35b3480156105bc57600080fd5b506105c5611537565b6040516105d29190612c35565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190612c50565b61154e565b60405161060f91906124dc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161064b93929190612cea565b60405180910390a15050505050505050565b60008060159054906101000a900460ff1615905080801561069057506001600060149054906101000a900460ff1660ff16105b806106bf575061069f30611564565b1580156106be57506001600060149054906101000a900460ff1660ff16145b5b6106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff160217905550801561073c576001600060156101000a81548160ff0219169083151502179055505b61074884846000611587565b80156107a15760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107989190612e0c565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161081e9493929190612e65565b602060405180830381865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612edd565b6108705763ffffffff60e01b610896565b60405160200161087f90612f61565b604051602081830303815290604052805190602001205b90509392505050565b6108a7611723565b8181905084849050146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690612fe8565b60405180910390fd5b60005b848490508110156109aa5761099785858381811061091357610912613008565b5b905060200201602081019061092891906126ba565b600085858581811061093d5761093c613008565b5b905060200281019061094f9190613046565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b80806109a2906130d8565b9150506108f2565b5050505050565b6109b9611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613193565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a7a9291906131b3565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acd611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061324e565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610b909291906131b3565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610c4095949392919061326e565b602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612edd565b610c925763ffffffff60e01b610cb8565b604051602001610ca190613303565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610cf890613364565b6040516020818303038152906040528051906020012084148015610d4757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d7457604051602001610d5b906133c5565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e049061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e4c61193e565b73ffffffffffffffffffffffffffffffffffffffff1614610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906134de565b60405180910390fd5b610eab81611995565b610f0481600067ffffffffffffffff811115610eca57610ec961229a565b5b6040519080825280601f01601f191660200182016040528015610efc5781602001600182028036833780820191505090505b5060006119a0565b50565b6000610f11611b0e565b610f1b8484611b85565b90506000848060400190610f2f9190613046565b90501415610f4157610f4084611bfa565b5b610f4a82611ca8565b9392505050565b610f596112df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f929190612777565b6000604051808303818588803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b5050505050565b610fce611876565b610fd66112df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161101092919061350d565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661111461193e565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134de565b60405180910390fd5b61117382611995565b61117f828260016119a0565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906135a8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611311611723565b611360848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b50505050565b60008060159054906101000a900460ff1615905080801561139957506001600060149054906101000a900460ff1660ff16105b806113c857506113a830611564565b1580156113c757506001600060149054906101000a900460ff1660ff16145b5b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611445576001600060156101000a81548160ff0219169083151502179055505b611450848484611587565b80156114a95760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516114a09190612e0c565b60405180910390a15b50505050565b60006114b96112df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114f19190612777565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153291906135dd565b905090565b61153f61204d565b61154761204d565b8091505090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b61172b6112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117b157506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061367c565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161181b9190613716565b60006040518083038185875af1925050503d8060008114611858576040519150601f19603f3d011682016040523d82523d6000602084013e61185d565b606091505b50915091508161186f57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118fd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613779565b60405180910390fd5b565b600061196c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199d611876565b50565b6119cc7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d4e565b60000160009054906101000a900460ff16156119f0576119eb83611d58565b611b09565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a5857506040513d601f19601f82011682018060405250810190611a5591906137ae565b60015b611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e9061384d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906138df565b60405180910390fd5b50611b08838383611e11565b5b505050565b611b166112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613971565b60405180910390fd5b565b6000611bf260405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611e3d565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611c29906139a9565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613a2a565b60405180910390fd5b50565b60008114611d415760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611cf890613a70565b600060405180830381858888f193505050503d8060008114611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611d6181611564565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790613af7565b60405180910390fd5b80611dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1a83611e85565b600082511180611e275750805b15611e3857611e368383611ed4565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611e8e81611d58565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ef98383604051806060016040528060278152602001613bea60279139611f01565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f2b9190613716565b600060405180830381855af49150503d8060008114611f66576040519150601f19603f3d011682016040523d82523d6000602084013e611f6b565b606091505b5091509150611f7c86838387611f87565b925050509392505050565b60608315611fea57600083511415611fe257611fa285611564565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b63565b60405180910390fd5b5b829050611ff5565b611ff48383611ffd565b5b949350505050565b6000825111156120105781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120449190613bc7565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120ae82612083565b9050919050565b6120be816120a3565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b6000819050919050565b6120f4816120e1565b81146120ff57600080fd5b50565b600081359050612111816120eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261213c5761213b612117565b5b8235905067ffffffffffffffff8111156121595761215861211c565b5b60208301915083600182028301111561217557612174612121565b5b9250929050565b60008060008060008060008060c0898b03121561219c5761219b612079565b5b60006121aa8b828c016120cc565b98505060206121bb8b828c016120cc565b97505060406121cc8b828c016120cc565b96505060606121dd8b828c01612102565b955050608089013567ffffffffffffffff8111156121fe576121fd61207e565b5b61220a8b828c01612126565b945094505060a089013567ffffffffffffffff81111561222d5761222c61207e565b5b6122398b828c01612126565b92509250509295985092959890939650565b6000612256826120a3565b9050919050565b6122668161224b565b811461227157600080fd5b50565b6000813590506122838161225d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d282612289565b810181811067ffffffffffffffff821117156122f1576122f061229a565b5b80604052505050565b600061230461206f565b905061231082826122c9565b919050565b600067ffffffffffffffff8211156123305761232f61229a565b5b602082029050919050565b600061234e61234984612315565b6122fa565b9050806020840283018581111561236857612367612121565b5b835b81811015612391578061237d8882612102565b84526020840193505060208101905061236a565b5050509392505050565b600082601f8301126123b0576123af612117565b5b60046123bd84828561233b565b91505092915050565b600080600060c084860312156123df576123de612079565b5b60006123ed86828701612274565b93505060206123fe868287016120cc565b925050604061240f8682870161239b565b9150509250925092565b60008060008060006080868803121561243557612434612079565b5b6000612443888289016120cc565b9550506020612454888289016120cc565b945050604061246588828901612102565b935050606086013567ffffffffffffffff8111156124865761248561207e565b5b61249288828901612126565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d6816124a1565b82525050565b60006020820190506124f160008301846124cd565b92915050565b6000819050919050565b61250a816124f7565b811461251557600080fd5b50565b60008135905061252781612501565b92915050565b60008060006040848603121561254657612545612079565b5b600061255486828701612518565b935050602084013567ffffffffffffffff8111156125755761257461207e565b5b61258186828701612126565b92509250509250925092565b60008083601f8401126125a3576125a2612117565b5b8235905067ffffffffffffffff8111156125c0576125bf61211c565b5b6020830191508360208202830111156125dc576125db612121565b5b9250929050565b60008083601f8401126125f9576125f8612117565b5b8235905067ffffffffffffffff8111156126165761261561211c565b5b60208301915083602082028301111561263257612631612121565b5b9250929050565b6000806000806040858703121561265357612652612079565b5b600085013567ffffffffffffffff8111156126715761267061207e565b5b61267d8782880161258d565b9450945050602085013567ffffffffffffffff8111156126a05761269f61207e565b5b6126ac878288016125e3565b925092505092959194509250565b6000602082840312156126d0576126cf612079565b5b60006126de848285016120cc565b91505092915050565b6000806000806040858703121561270157612700612079565b5b600085013567ffffffffffffffff81111561271f5761271e61207e565b5b61272b87828801612126565b9450945050602085013567ffffffffffffffff81111561274e5761274d61207e565b5b61275a87828801612126565b925092505092959194509250565b612771816120a3565b82525050565b600060208201905061278c6000830184612768565b92915050565b600080604083850312156127a9576127a8612079565b5b60006127b785828601612518565b92505060206127c8858286016120cc565b9150509250929050565b6127db816124f7565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080fd5b60006101608284031215612818576128176127fc565b5b81905092915050565b60008060006060848603121561283a57612839612079565b5b600084013567ffffffffffffffff8111156128585761285761207e565b5b61286486828701612801565b935050602061287586828701612518565b925050604061288686828701612102565b9150509250925092565b612899816120e1565b82525050565b60006020820190506128b46000830184612890565b92915050565b60006128c582612083565b9050919050565b6128d5816128ba565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e612079565b5b600061291d858286016128e3565b925050602061292e85828601612102565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156129585761295761229a565b5b61296182612289565b9050602081019050919050565b82818337600083830152505050565b600061299061298b8461293d565b6122fa565b9050828152602081018484840111156129ac576129ab612938565b5b6129b784828561296e565b509392505050565b600082601f8301126129d4576129d3612117565b5b81356129e484826020860161297d565b91505092915050565b60008060408385031215612a0457612a03612079565b5b6000612a12858286016120cc565b925050602083013567ffffffffffffffff811115612a3357612a3261207e565b5b612a3f858286016129bf565b9150509250929050565b6000819050919050565b6000612a6e612a69612a6484612083565b612a49565b612083565b9050919050565b6000612a8082612a53565b9050919050565b6000612a9282612a75565b9050919050565b612aa281612a87565b82525050565b6000602082019050612abd6000830184612a99565b92915050565b60008060008060608587031215612add57612adc612079565b5b6000612aeb878288016120cc565b9450506020612afc87828801612102565b935050604085013567ffffffffffffffff811115612b1d57612b1c61207e565b5b612b2987828801612126565b925092505092959194509250565b600080600060608486031215612b5057612b4f612079565b5b6000612b5e86828701612274565b9350506020612b6f868287016120cc565b9250506040612b80868287016120cc565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612bb3816120e1565b82525050565b6000612bc58383612baa565b60208301905092915050565b6000602082019050919050565b612be781612b8a565b612bf18184612b95565b9250612bfc82612ba0565b8060005b83811015612c2d578151612c148782612bb9565b9650612c1f83612bd1565b925050600181019050612c00565b505050505050565b6000608082019050612c4a6000830184612bde565b92915050565b60008060008060008060a08789031215612c6d57612c6c612079565b5b6000612c7b89828a016120cc565b9650506020612c8c89828a016120cc565b9550506040612c9d89828a01612102565b9450506060612cae89828a01612102565b935050608087013567ffffffffffffffff811115612ccf57612cce61207e565b5b612cdb89828a01612126565b92509250509295509295509295565b6000606082019050612cff6000830186612768565b612d0c6020830185612768565b612d196040830184612890565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d8e602e83612d21565b9150612d9982612d32565b604082019050919050565b60006020820190508181036000830152612dbd81612d81565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612df6612df1612dec84612dc4565b612a49565b612dce565b9050919050565b612e0681612ddb565b82525050565b6000602082019050612e216000830184612dfd565b92915050565b600082825260208201905092915050565b6000612e448385612e27565b9350612e5183858461296e565b612e5a83612289565b840190509392505050565b6000606082019050612e7a6000830187612768565b612e8760208301866127d2565b8181036040830152612e9a818486612e38565b905095945050505050565b60008115159050919050565b612eba81612ea5565b8114612ec557600080fd5b50565b600081519050612ed781612eb1565b92915050565b600060208284031215612ef357612ef2612079565b5b6000612f0184828501612ec8565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612f4b601f83612f0a565b9150612f5682612f15565b601f82019050919050565b6000612f6c82612f3e565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612fd2603383612d21565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261306357613062613037565b5b80840192508235915067ffffffffffffffff8211156130855761308461303c565b5b6020830192506001820236038313156130a1576130a0613041565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130e3826120e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613116576131156130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061317d603183612d21565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b60006040820190506131c86000830185612768565b6131d56020830184612768565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613238603383612d21565b9150613243826131dc565b604082019050919050565b600060208201905081810360008301526132678161322b565b9050919050565b60006060820190506132836000830188612768565b8181036020830152613296818688612e38565b905081810360408301526132ab818486612e38565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006132ed601d83612f0a565b91506132f8826132b7565b601d82019050919050565b600061330e826132e0565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061334e601583612f0a565b915061335982613318565b601582019050919050565b600061336f82613341565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006133af601483612f0a565b91506133ba82613379565b601482019050919050565b60006133d0826133a2565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613436602c83612d21565b9150613441826133da565b604082019050919050565b6000602082019050818103600083015261346581613429565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006134c8602c83612d21565b91506134d38261346c565b604082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b613507816128ba565b82525050565b600060408201905061352260008301856134fe565b61352f6020830184612890565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613592603883612d21565b915061359d82613536565b604082019050919050565b600060208201905081810360008301526135c181613585565b9050919050565b6000815190506135d7816120eb565b92915050565b6000602082840312156135f3576135f2612079565b5b6000613601848285016135c8565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613666602983612d21565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156136d05780820151818401526020810190506136b5565b838111156136df576000848401525b50505050565b60006136f08261369c565b6136fa81856136a7565b935061370a8185602086016136b2565b80840191505092915050565b600061372282846136e5565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613763601c83612d21565b915061376e8261372d565b602082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b6000815190506137a881612501565b92915050565b6000602082840312156137c4576137c3612079565b5b60006137d284828501613799565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613837602e83612d21565b9150613842826137db565b604082019050919050565b600060208201905081810360008301526138668161382a565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006138c9602983612d21565b91506138d48261386d565b604082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061395b602483612d21565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006139b482613991565b91506bffffffffffffffffffffffff8214156139d3576139d26130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613a14601f83612d21565b9150613a1f826139de565b602082019050919050565b60006020820190508181036000830152613a4381613a07565b9050919050565b50565b6000613a5a6000836136a7565b9150613a6582613a4a565b600082019050919050565b6000613a7b82613a4d565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613ae1602d83612d21565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b4d601d83612d21565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b600081519050919050565b6000613b9982613b83565b613ba38185612d21565b9350613bb38185602086016136b2565b613bbc81612289565b840191505092915050565b60006020820190508181036000830152613be18184613b8e565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d681329940afaf841d42fcc1038e4f740360de20cf344ab1e2734a64f4d4912d64736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b50604051620083aa380380620083aa83398181016040528101906200003791906200015d565b6200005367df0e34757da7392660c01b620000e260201b60201c565b6200006f67f14ab5fa1d1e7d2860c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a9190620001a0565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001bd565b50565b616afc80620018ae83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b620001378162000118565b81146200014357600080fd5b50565b60008151905062000157816200012c565b92915050565b600060208284031215620001765762000175620000f3565b5b6000620001868482850162000146565b91505092915050565b6200019a8162000118565b82525050565b6000602082019050620001b760008301846200018f565b92915050565b6080516116c8620001e66000396000818160db01528181610265015261039b01526116c86000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b578063d6752d2f146200006d578063e4f8289814620000a3575b600080fd5b62000055620000d9565b6040516200006491906200054c565b60405180910390f35b6200008b60048036038101906200008591906200076f565b620000fd565b6040516200009a91906200054c565b60405180910390f35b620000c16004803603810190620000bb91906200076f565b62000327565b604051620000d09190620007dc565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60006200011567a066bcceb7dc5e8d60c01b6200046e565b6200012b67c170c775dbf3fe7260c01b6200046e565b6200014167e37b0fb4b7a3209860c01b6200046e565b60006200015085858562000327565b905062000168673b11dc0ffa3ccd6060c01b6200046e565b6200017e673a57293326eb783960c01b6200046e565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620001b06792ffd9b78b63250b60c01b6200046e565b620001c667b48b7268f321e2c760c01b6200046e565b60008111156200021d57620001e667fd5d3b72bdd735f560c01b6200046e565b620001fc67e043348b827f943960c01b6200046e565b620002126763d2cf641e675d6760c01b6200046e565b819250505062000320565b620002336731e808470c004a8f60c01b6200046e565b62000249675e45f9ad6f8547b260c01b6200046e565b6200025f67b53b5aadec13c56460c01b6200046e565b8460001b7f0000000000000000000000000000000000000000000000000000000000000000878660405160240162000299929190620008ed565b60405160208183030381529060405263a345a29c60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620002ec90620004b3565b620002f9929190620009a3565b8190604051809103906000f59050801580156200031a573d6000803e3d6000fd5b50925050505b9392505050565b60006200033f671afe31f7f23a6bb460c01b6200046e565b6200035567a218286f4eddd4f060c01b6200046e565b6200036b675583ebc8a00968e160c01b6200046e565b620004658360001b604051806020016200038590620004b3565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008786604051602401620003cf929190620008ed565b60405160208183030381529060405263a345a29c60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405160200162000427929190620009a3565b6040516020818303038152906040526040516020016200044992919062000a19565b6040516020818303038152906040528051906020012062000471565b90509392505050565b50565b60006200048083833062000488565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c518062000a4283390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200050c620005066200050084620004c1565b620004e1565b620004c1565b9050919050565b60006200052082620004eb565b9050919050565b6000620005348262000513565b9050919050565b620005468162000527565b82525050565b60006020820190506200056360008301846200053b565b92915050565b6000604051905090565b600080fd5b60006200058582620004c1565b9050919050565b6000620005998262000578565b9050919050565b620005ab816200058c565b8114620005b757600080fd5b50565b600081359050620005cb81620005a0565b92915050565b6000819050919050565b620005e681620005d1565b8114620005f257600080fd5b50565b6000813590506200060681620005db565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200065c8262000611565b810181811067ffffffffffffffff821117156200067e576200067d62000622565b5b80604052505050565b60006200069362000569565b9050620006a1828262000651565b919050565b600067ffffffffffffffff821115620006c457620006c362000622565b5b602082029050919050565b600080fd5b6000620006eb620006e584620006a6565b62000687565b90508060208402830185811115620007085762000707620006cf565b5b835b81811015620007355780620007208882620005f5565b8452602084019350506020810190506200070a565b5050509392505050565b600082601f8301126200075757620007566200060c565b5b600462000766848285620006d4565b91505092915050565b600080600060c084860312156200078b576200078a62000573565b5b60006200079b86828701620005ba565b9350506020620007ae86828701620005f5565b9250506040620007c1868287016200073f565b9150509250925092565b620007d68162000578565b82525050565b6000602082019050620007f36000830184620007cb565b92915050565b60006200080682620004eb565b9050919050565b60006200081a82620007f9565b9050919050565b6200082c816200080d565b82525050565b600060049050919050565b600081905092915050565b6000819050919050565b6200085d81620005d1565b82525050565b600062000871838362000852565b60208301905092915050565b6000602082019050919050565b620008958162000832565b620008a181846200083d565b9250620008ae8262000848565b8060005b83811015620008e5578151620008c9878262000863565b9650620008d6836200087d565b925050600181019050620008b2565b505050505050565b600060a08201905062000904600083018562000821565b6200091360208301846200088a565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200095657808201518184015260208101905062000939565b60008484015250505050565b60006200096f826200091a565b6200097b818562000925565b93506200098d81856020860162000936565b620009988162000611565b840191505092915050565b6000604082019050620009ba6000830185620007cb565b8181036020830152620009ce818462000962565b90509392505050565b600081905092915050565b6000620009ef826200091a565b620009fb8185620009d7565b935062000a0d81856020860162000936565b80840191505092915050565b600062000a278285620009e2565b915062000a358284620009e2565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122093743e52c222b91b89502a9bafadf7f236cbd462d37f472bf2751d379eed8b0264736f6c6343000811003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162006afc38038062006afc83398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea672ce72a810e3b755d60c01b6200020b60201b60201c565b6200010667e0e818911fc83a4360c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616725620003d76000396000818161195101526137e1015260008181611a0701528181611a9501528181612058015281816120e6015261219601526167256000f3fe6080604052600436106101d05760003560e01c80634f1ef286116100f7578063a526d83b11610095578063bc197c8111610064578063bc197c81146106da578063c399ec8814610717578063e02afbae14610742578063f23a6e611461076d5761022f565b8063a526d83b14610632578063affed0e01461065b578063b0d691fe14610686578063b61d27f6146106b15761022f565b806371404156116100d157806371404156146105665780638f0684301461058f57806398ef1ed8146105cc578063a345a29c146106095761022f565b80634f1ef286146104f657806352d1902d146105125780637065cb481461053d5761022f565b80631b71bb6e1161016f5780633a871cdd1161013e5780633a871cdd1461045d578063485cc9551461049a5780634a58db19146104c35780634d44560d146104cd5761022f565b80631b71bb6e146103a3578063245a7bfc146103cc5780632f54bf6e146103f75780633659cfe6146104345761022f565b8063150b7a02116101ab578063150b7a02146102d757806316d4340114610314578063173825d91461035157806318dfb3c71461037a5761022f565b806223de291461023457806301ffc9a71461025d5780630c68ba211461029a5761022f565b3661022f576101e967290bbd319612162360c01b6107aa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061467a565b6107ad565b005b34801561026957600080fd5b50610284600480360381019061027f91906147a1565b6107cb565b60405161029191906147e9565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190614804565b6109b0565b6040516102ce91906147e9565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190614831565b610a42565b60405161030b91906148c8565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190614945565b610a92565b60405161034891906147e9565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190614804565b61146b565b005b34801561038657600080fd5b506103a1600480360381019061039c9190614a79565b611533565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190614804565b611771565b005b3480156103d857600080fd5b506103e161194f565b6040516103ee9190614b09565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190614804565b611973565b60405161042b91906147e9565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614804565b611a05565b005b34801561046957600080fd5b50610484600480360381019061047f9190614b49565b611b8d565b6040516104919190614bc7565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190614c20565b611ccb565b005b6104cb611e71565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614c9e565b611f22565b005b610510600480360381019061050b9190614e1f565b612056565b005b34801561051e57600080fd5b50610527612192565b6040516105349190614e8a565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190614804565b61224b565b005b34801561057257600080fd5b5061058d60048036038101906105889190614804565b612313565b005b34801561059b57600080fd5b506105b660048036038101906105b19190614ea5565b6123db565b6040516105c391906147e9565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614ea5565b6124a8565b60405161060091906147e9565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614fca565b6126d1565b005b34801561063e57600080fd5b5061065960048036038101906106549190614804565b61288c565b005b34801561066757600080fd5b50610670612954565b60405161067d9190614bc7565b60405180910390f35b34801561069257600080fd5b5061069b6129c0565b6040516106a89190615069565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190615084565b612a26565b005b3480156106e657600080fd5b5061070160048036038101906106fc919061514e565b612b37565b60405161070e91906148c8565b60405180910390f35b34801561072357600080fd5b5061072c612b8b565b6040516107399190614bc7565b60405180910390f35b34801561074e57600080fd5b50610757612c4f565b60405161076491906152d5565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906152f0565b612cca565b6040516107a191906148c8565b60405180910390f35b50565b6107c1671278753381487ed660c01b612d1c565b5050505050505050565b60006107e167f20d647ea02d480060c01b612d1c565b6107f567ffb589296d687db060c01b612d1c565b6108096727ecf9b318901df560c01b612d1c565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108865750610885675d4be9b73183ad3f60c01b612d1f565b5b8061092657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109095750610908674cb5733a4ebd736b60c01b612d1f565b5b8015610925575061092467927753031b1e765d60c01b612d1f565b5b5b806109a957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109a857506109a766bc16169e90631c60c01b612d1f565b5b5b9050919050565b60006109c6679a530c869daa649060c01b612d2a565b6109da677819779a5121f4ad60c01b612d2a565b6109ee67dcc814792f5595a060c01b612d2a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a576642558288c0c26a60c01b612d1c565b610a6b670cd59c881166cff460c01b612d1c565b610a7f67d8d160ce8c3ef4cc60c01b612d1c565b63150b7a0260e01b905095945050505050565b6000610aa86777258f39a67c0acd60c01b612d2d565b610abc67c9d3460cf31b367060c01b612d2d565b610ad067301450deda14998860c01b612d2d565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610b0067ec35fa0e327aba3360c01b612d2d565b610b146757c603851350fa0960c01b612d2d565b6060610b2a67ed7102d9c731614b60c01b612d2d565b610b3e67260c95324dc5522a60c01b612d2d565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b7691906153b9565b908a8a905092610b88939291906153f7565b90610b93919061544a565b149050610baa67adb0f8e971c6f00460c01b612d2d565b610bbe6775ac95bff94d832360c01b612d2d565b8015610e0b57610bd867b7ce1fa3f7f6604d60c01b612d2d565b610bec679fc1490a6707ce8260c01b612d2d565b610c00679cbd4322f03dcb3060c01b612d2d565b6000610c16677c50636fd0d78e6e60c01b612d2d565b610c2a67b6c96f6498872fdd60c01b612d2d565b6060610c4067d225012c278bc14960c01b612d2d565b888860009060208c8c9050610c5591906153b9565b92610c62939291906153f7565b810190610c6f91906154a9565b809650819350829450505050610c8f67414eafbc10d5dfd460c01b612d2d565b610ca3679735072f1875e8c560c01b612d2d565b60008503610def57610cbf67ece2f114e83cba5460c01b612d2d565b610cd367bb4b7709950fab6560c01b612d2d565b610ce767e556fd7ed728116b60c01b612d2d565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d0f91906155a5565b6000604051808303816000865af19150503d8060008114610d4c576040519150601f19603f3d011682016040523d82523d6000602084013e610d51565b606091505b5091509150610d6a675bb7adbcacc27af760c01b612d2d565b610d7e67925a11ac41b1a62f60c01b612d2d565b81610dd457610d97674b9b350a0c4e240d60c01b612d2d565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610dcb9190615606565b60405180910390fd5b610de867270a9300cfb5deb160c01b612d2d565b5050610e04565b610e036719ddea40eb9c9d5e60c01b612d2d565b5b5050610e7b565b610e1f671617c5f7b544c15460c01b612d2d565b610e3367152cf4f885c3c7bd60c01b612d2d565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e8f678968ba2400116cd160c01b612d2d565b610ea367d26f37fb13c4702060c01b612d2d565b808015610ec05750610ebf67e672c6829c01435e60c01b612d30565b5b80610ee75750600083118015610ee65750610ee5672f1034641526e8e560c01b612d30565b5b5b1561115757610f006787b8bb2f9d833b2360c01b612d2d565b610f146748ed04b5790955de60c01b612d2d565b610f2867c07d3098ed811b0e60c01b612d2d565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f63929190615628565b602060405180830381865afa925050508015610f9d57506040513d601f19601f82011682018060405250810190610f9a919061566d565b60015b611024573d8060008114610fcd576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b606091505b50610fe7672c516c89798db2e060c01b612d2d565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161101b9190615606565b60405180910390fd5b611038677a7dc9015ade993760c01b612d2d565b61104c676bd30bd513db1c1260c01b612d2d565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506110ac67f77b76e97cdda63e60c01b612d2d565b6110c067f2ac3b0c93d4d96060c01b612d2d565b6000851480156110cd5750825b80156110d7575086155b1561110e576110f06732203bac67e9a5c660c01b612d2d565b61110467bacd05270bf834fa60c01b612d2d565b806000526001601ffd5b61112267db508d98998fd4cb60c01b612d2d565b61113667bd809f1f7297a39860c01b612d2d565b61114a671166c1324f0a4d4360c01b612d2d565b8095505050505050611462565b61116b67fb73a16ec6f828a360c01b612d2d565b61117f67124b4f67fba3948f60c01b612d2d565b61119367a72081e2c67a966a60c01b612d2d565b6111a7670ab810c1358d671760c01b612d2d565b604187879050146111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e49061571d565b60405180910390fd5b61120167c0b4b2b739bdbc3e60c01b612d2d565b611215670f81a533fa5be34e60c01b612d2d565b61122967657c1339b273a74660c01b612d2d565b6000878760009060209261123f939291906153f7565b9061124a919061544a565b905061126067dc3d3b49fc92cadb60c01b612d2d565b6112746752ae34fa8263b21b60c01b612d2d565b6000888860209060409261128a939291906153f7565b90611295919061544a565b90506112ab67301232fd22fb824c60c01b612d2d565b6112bf67f519c889a1cef68c60c01b612d2d565b6000898960408181106112d5576112d461573d565b5b9050013560f81c60f81b60f81c90506112f8679a20c64fb3f7324360c01b612d2d565b61130c678a031af26ced764160c01b612d2d565b601b8160ff16141580156113245750601c8160ff1614155b156113a05761133d67cd922db48d204f9b60c01b612d2d565b61135167833a8605e20290ce60c01b612d2d565b61136567b3da6c39eac2834e60c01b612d2d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611397906157de565b60405180910390fd5b6113b4675514297355562d4860c01b612d2d565b6113c86757b333f889b6e2b360c01b612d2d565b6113dc676603fc4d7122128560c01b612d2d565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c83868660405160008152602001604052604051611416949392919061581a565b6020604051602081039080840390855afa158015611438573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b61147f6706cea3225e159afe60c01b6107aa565b61149367768e02f4b4fe93d060c01b6107aa565b6114a767bcb43f0f61fb5a1260c01b6107aa565b6114bb6705112cc091d04b2260c01b6107aa565b6114c3612d3b565b6114d7677b6146229717de8560c01b6107aa565b6114eb671a91445bcd7d6a3660c01b6107aa565b6114ff67087786fe3118ce4560c01b6107aa565b6115136712ac3ecdf13b356f60c01b6107aa565b611527676a822ec913ef224160c01b6107aa565b61153081612e9f565b50565b611547670b312c177376d2f160c01b6107aa565b61155b67526a718f37dbef7960c01b6107aa565b61156f67bc0095b6ec842fe060c01b6107aa565b6115836765a7b825dc91e38260c01b6107aa565b61158b61311b565b61159f67e65dfa654e10de0360c01b6107aa565b6115b36738751a29e4bbac9a60c01b6107aa565b6115c76764a3e3565274624260c01b6107aa565b6115db67e3532f2d278ffcc460c01b6107aa565b6115ef67b28c9cc66aedc63960c01b6107aa565b611603674c0d2e74d59320d660c01b6107aa565b81819050848490501461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906158d1565b60405180910390fd5b61165f6733f49bcf3f677de260c01b6107aa565b61167367fda055a3194df47960c01b6107aa565b611687670ca2693ca40a9c3d60c01b6107aa565b60005b8484905081101561176a576116a967e45fe9f7a89384cd60c01b6107aa565b6116bd677885f77483c8c7a360c01b6107aa565b6117578585838181106116d3576116d261573d565b5b90506020020160208101906116e89190614804565b60008585858181106116fd576116fc61573d565b5b905060200281019061170f9190615900565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061323e565b808061176290615963565b91505061168a565b5050505050565b61178567b0e8e7fc3aed8bf060c01b6107aa565b611799671246157b9919312560c01b6107aa565b6117ad67cbfddca365f5dede60c01b6107aa565b6117b5613362565b6117c967ab4f446b15a2b75360c01b6107aa565b6117dd67140f31a12b03a20160c01b6107aa565b6117f167c2cd95be620e67ae60c01b6107aa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790615a1d565b60405180910390fd5b611874674b99dae5f525e91060c01b6107aa565b61188867897f79a11a9b512360c01b6107aa565b61189c67f01df9d5178d9e0460c01b6107aa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118ef929190615a3d565b60405180910390a161190b6705fb80e775388d3f60c01b6107aa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006119896784c34e023fb786f860c01b61347e565b61199d670d806432bac21d3b60c01b61347e565b6119b1679da5a6f8cf654dc360c01b61347e565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90615ad8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ad2613481565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90615b6a565b60405180910390fd5b611b31816134d8565b611b8a81600067ffffffffffffffff811115611b5057611b4f614cf4565b5b6040519080825280601f01601f191660200182016040528015611b825781602001600182028036833780820191505090505b506000613533565b50565b6000611ba3674a0b745640aaacbe60c01b6136a1565b611bb7673643bc4d265e004d60c01b6136a1565b611bcb67be21e9c3510eef0760c01b6136a1565b611bd36136a4565b611be7670d9ae78f9ca6bca160c01b6136a1565b611bf1848461377f565b9050611c0767bac743df019f783060c01b6136a1565b611c1b674633441562cbb38260c01b6136a1565b6000848060400190611c2d9190615900565b905003611c7e57611c4867b9f604ce3adf50f460c01b6136a1565b611c5c6740dc8d2be550a2ae60c01b6136a1565b611c70678d7f5bf9351f5d3760c01b6136a1565b611c7984613844565b611c93565b611c9267493644fd2e2f359760c01b6136a1565b5b611ca767f86dd1b6eddb849360c01b6136a1565b611cbb67e338ec934ff31c9e60c01b6136a1565b611cc482613956565b9392505050565b611cdf67c8d7dd5c6ec287ee60c01b6107aa565b60008060019054906101000a900460ff16159050808015611d105750600160008054906101000a900460ff1660ff16105b80611d3d5750611d1f30613a97565b158015611d3c5750600160008054906101000a900460ff1660ff16145b5b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390615bfc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611db9576001600060016101000a81548160ff0219169083151502179055505b611dcd67e0a1587b9fff733460c01b6107aa565b611de16799f49c2236f581d560c01b6107aa565b611df56713255a13306bce2760c01b6107aa565b611e09679103bdf53b9e3db060c01b6107aa565b611e138383613aba565b8015611e6c5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611e639190615c57565b60405180910390a15b505050565b611e8567a987bf12f6bf98ab60c01b6107aa565b611e99671fbaaa4dbb3f884d60c01b6107aa565b611ead67e797a3f7fa46660c60c01b6107aa565b611eb56129c0565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611eee9190614b09565b6000604051808303818588803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b5050505050565b611f3667fbabf181d33082b660c01b6107aa565b611f4a67bee35484a90cfd2660c01b6107aa565b611f5e673ceb9bb2daab856d60c01b6107aa565b611f726791fab911752e5b5c60c01b6107aa565b611f7a613362565b611f8e672877b8446bdb5f0060c01b6107aa565b611fa2676c6fc7cbb8b3b97860c01b6107aa565b611fb667eb87ca9da684e3db60c01b6107aa565b611fca673d9d17fec85dda7860c01b6107aa565b611fde675017b987e5f4e1e060c01b6107aa565b611fe66129c0565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401612020929190615c81565b600060405180830381600087803b15801561203a57600080fd5b505af115801561204e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90615ad8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612123613481565b73ffffffffffffffffffffffffffffffffffffffff1614612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090615b6a565b60405180910390fd5b612182826134d8565b61218e82826001613533565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990615d1c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61225f67b4c2b632b250bc6360c01b6107aa565b61227367768e02f4b4fe93d060c01b6107aa565b61228767bcb43f0f61fb5a1260c01b6107aa565b61229b6705112cc091d04b2260c01b6107aa565b6122a3612d3b565b6122b7677b6146229717de8560c01b6107aa565b6122cb6732bce9776427685f60c01b6107aa565b6122df675c4d3c86a9602c6f60c01b6107aa565b6122f3670877748d77ec420260c01b6107aa565b6123076732ccb44361bec49260c01b6107aa565b61231081613bfc565b50565b612327676bacc25ce52307dd60c01b6107aa565b61233b67bee35484a90cfd2660c01b6107aa565b61234f673ceb9bb2daab856d60c01b6107aa565b6123636791fab911752e5b5c60c01b6107aa565b61236b613362565b61237f672877b8446bdb5f0060c01b6107aa565b61239367edec01844939018360c01b6107aa565b6123a7672d1676c1874371c960c01b6107aa565b6123bb6767895a735b76188060c01b6107aa565b6123cf6762377381d2b1f71460c01b6107aa565b6123d881613dba565b50565b60006123f167a69e23ef0cf0d80560c01b612d2d565b6124056789508a17c1e5baf860c01b612d2d565b61241967f0e90fa9dac9b5a260c01b612d2d565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b815260040161245b959493929190615d69565b6020604051808303816000875af115801561247a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249e9190615dcc565b9050949350505050565b60006124be678cc395c88e3ae24060c01b612d2d565b6124d2670e6cd08ae62d699160c01b612d2d565b6124e6671a6d203d14bbeb3560c01b612d2d565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612528959493929190615d69565b6020604051808303816000875af192505050801561256457506040513d601f19601f820116820180604052508101906125619190615dcc565b60015b61269c573d8060008114612594576040519150601f19603f3d011682016040523d82523d6000602084013e612599565b606091505b506125ae6763fa3d4afb8cd55b60c01b612d2d565b6125c267c78e77a5e38dc67760c01b612d2d565b6000815190506125dc67a2319ac582c5f8b960c01b612d2d565b6125f0679d791f94f379b3d460c01b612d2d565b600181036126705761260c674b6df8afb2c0610f60c01b612d2d565b612620671241dc8732fa093a60c01b612d2d565b600160f81b826000815181106126395761263861573d565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506126c9565b61268467fb87cb9c02294f9f60c01b612d2d565b6126986773311759eab4f85760c01b612d2d565b8082fd5b6126b0672f68b0ad8fd39c0a60c01b612d2d565b6126c467ba867e4ef348d1a360c01b612d2d565b809150505b949350505050565b6126e5677fc8140b5d255eea60c01b613f78565b60008060019054906101000a900460ff161590508080156127165750600160008054906101000a900460ff1660ff16105b80612743575061272530613a97565b1580156127425750600160008054906101000a900460ff1660ff16145b5b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990615bfc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156127bf576001600060016101000a81548160ff0219169083151502179055505b6127d367e2039407864bfb2960c01b613f78565b6127e767cbec76833205b45960c01b613f78565b6127fb67952b440c3a5aa4f660c01b613f78565b61280f670d4db254ae51781f60c01b613f78565b612823677db60b2d0faf4ea560c01b613f78565b61282e836000613aba565b80156128875760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161287e9190615c57565b60405180910390a15b505050565b6128a0675a98b12456966aba60c01b6107aa565b6128b467bee35484a90cfd2660c01b6107aa565b6128c8673ceb9bb2daab856d60c01b6107aa565b6128dc6791fab911752e5b5c60c01b6107aa565b6128e4613362565b6128f8672877b8446bdb5f0060c01b6107aa565b61290c67915d8b16ac69ed9860c01b6107aa565b612920671f5e91ee5a02596360c01b6107aa565b612934674b8e9096393c06f860c01b6107aa565b61294867301fc09d047c18d960c01b6107aa565b61295181613f7b565b50565b600061296a67e6997cbe175ef33460c01b6107aa565b61297e677a25fccec1173dd960c01b6107aa565b61299267431301e0e2e31e9060c01b6107aa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60006129d667f561f09cfc8827bd60c01b6107aa565b6129ea673350b6d208da79ee60c01b6107aa565b6129fe671896327d0b3f375a60c01b6107aa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612a3a67e2dda3667fd3757160c01b6107aa565b612a4e67526a718f37dbef7960c01b6107aa565b612a6267bc0095b6ec842fe060c01b6107aa565b612a766765a7b825dc91e38260c01b6107aa565b612a7e61311b565b612a9267e65dfa654e10de0360c01b6107aa565b612aa667aeaf6d5fe58842a960c01b6107aa565b612aba67370ad7169464cc0060c01b6107aa565b612ace6739a00ff772ffbf9060c01b6107aa565b612ae26792e03ae1c25d108960c01b6107aa565b612b31848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061323e565b50505050565b6000612b4d67f6036d4dbbf1553b60c01b612d1c565b612b6167e574cfd0134a53a360c01b612d1c565b612b7567481cad8a93626dbc60c01b612d1c565b63bc197c8160e01b905098975050505050505050565b6000612ba1673908573a227c011760c01b6107aa565b612bb567f95a3d25f4a4d56660c01b6107aa565b612bc96701732dbf20a7ffe360c01b6107aa565b612bd16129c0565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c099190614b09565b602060405180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a9190615e0e565b905090565b612c5761454b565b612c6b670d3661d4eaad386e60c01b613f78565b612c7f67dd44bb398e429d1660c01b613f78565b612c93675b3ecf54e60c995660c01b613f78565b612c9b61454b565b612caf6706ba37708b59038260c01b613f78565b612cc3672f08555e9b207b0660c01b613f78565b8091505090565b6000612ce067d55e6083e458695760c01b612d1c565b612cf467229756682a8526f660c01b612d1c565b612d08672d0f5a7f66d6c2a060c01b612d1c565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612d4f67216671dc6f7d651060c01b6107aa565b612d6367fc696b44f549a3bd60c01b6107aa565b612d77677d2f775bb38d794b60c01b6107aa565b612d8b672c1b7774324d16e460c01b6107aa565b612d9433611973565b8015612db05750612daf679d6b1a88bd04a29560c01b6141f9565b5b80612e1e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612e015750612e0067c1169fb68056496660c01b6141f9565b5b8015612e1d5750612e1c67290c2b81e499218360c01b6141f9565b5b5b80612e4a5750612e2d336109b0565b8015612e495750612e486777d0513cc85b13d160c01b6141f9565b5b5b612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090615ead565b60405180910390fd5b612e9d67023020f196fe710560c01b6107aa565b565b612eb367595c0e9f3251c28760c01b61347e565b612ec7676c9e8facf275455460c01b61347e565b612edb675fd1ba867bad8d9060c01b61347e565b612eef675d4405176a4c718660c01b61347e565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5490615f19565b60405180910390fd5b612f71678d884950e2a04aa760c01b61347e565b612f85672dca0c18590376fc60c01b61347e565b612f9967a4f7a20d65860e4d60c01b61347e565b612fad675167170fc48a61af60c01b61347e565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303090615f85565b60405180910390fd5b61304d67d711364ae0826ec060c01b61347e565b613061670a57bd871732b8ad60c01b61347e565b613075675d1d32267273ab9260c01b61347e565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da816040516130a49190614b09565b60405180910390a16130c067dcc232605f03b59860c01b61347e565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61312f6731b64f8837124c3160c01b6107aa565b61314367648db564106906a760c01b6107aa565b61315767c4dbbfd60bd1214960c01b6107aa565b61316b6701512b58157c381b60c01b6107aa565b6131736129c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156131bd57506131bc6747f66328b063331a60c01b6141f9565b5b806131e957506131cc33611973565b80156131e857506131e767e429b1ab88ceb31060c01b6141f9565b5b5b613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f90616017565b60405180910390fd5b61323c6762f06635bf7b4acd60c01b6107aa565b565b61325267bdfd46f0589b81c760c01b6107aa565b61326667b0457063cebd82a360c01b6107aa565b61327a675b626d0fcf3aa6ce60c01b6107aa565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516132a391906155a5565b60006040518083038185875af1925050503d80600081146132e0576040519150601f19603f3d011682016040523d82523d6000602084013e6132e5565b606091505b50915091506132fe672fb56cccf4f3b66560c01b6107aa565b6133126747166df0733c52e860c01b6107aa565b816133475761332b6719461c9227bd654a60c01b6107aa565b61333f6767b989a4f1f2a8f560c01b6107aa565b805160208201fd5b61335b67c859f4ceb5b7418760c01b6107aa565b5050505050565b61337667851edf0db3fe6a8060c01b6107aa565b61338a67765412b7902e3abf60c01b6107aa565b61339e67151d6c3106b9e49760c01b6107aa565b6133b2671b070d07d4380e9a60c01b6107aa565b6133bb33611973565b80156133d757506133d667d5ef82e5a5d379e060c01b6141f9565b5b8061342957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156134285750613427670cc2ae0862027a8c60c01b6141f9565b5b5b613468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345f90616083565b60405180910390fd5b61347c67362a52eb7781e15260c01b6107aa565b565b50565b60006134af7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614204565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6134ec675b243153b1324c8660c01b6107aa565b61350067703050f3f8cbae0160c01b6107aa565b61351467096f3ba87c8df4a960c01b6107aa565b61352867360d12c388c6eb2e60c01b6107aa565b613530613362565b50565b61355f7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b61420e565b60000160009054906101000a900460ff16156135835761357e83614218565b61369c565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156135eb57506040513d601f19601f820116820180604052508101906135e891906160b8565b60015b61362a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362190616157565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461368f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613686906161e9565b60405180910390fd5b5061369b8383836142d1565b5b505050565b50565b6136b867e67927338dfde90a60c01b6136a1565b6136cc670e51b57b7e9b4da560c01b6136a1565b6136e067e3f66e826ec687ff60c01b6136a1565b6136f46792d1df458e7acb7960c01b6136a1565b6136fc6129c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137609061627b565b60405180910390fd5b61377d67f59af56761c9812d60c01b6136a1565b565b60006137956739791b7bf1ba96b460c01b613f78565b6137a9677d14df618b69459060c01b613f78565b6137bd67a2c39ce327bfe21660c01b613f78565b6137d1673e608acec34f245360c01b613f78565b61383c60405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff168152506142fd565b905092915050565b61385867f347b6eb768867bd60c01b6107aa565b61386c67e4b8fad4d2d1902a60c01b6107aa565b6138806722ce8514c24b563d60c01b6107aa565b613894676bd35fd711427f6d60c01b6107aa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff16809291906138c3906162b3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461393f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393690616333565b60405180910390fd5b613953675143066244fa845f60c01b6107aa565b50565b61396a67cc5c47196db5bd6160c01b6136a1565b61397e678b55e749b3c352ab60c01b6136a1565b61399267e6442311764077fa60c01b6136a1565b60008114613a7f576139ae671589e0478f7a186060c01b6136a1565b6139c267d37e8b3807985e7360c01b6136a1565b6139d667c2c62d2bb50a980360c01b6136a1565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051613a1e90616379565b600060405180830381858888f193505050503d8060008114613a5c576040519150601f19603f3d011682016040523d82523d6000602084013e613a61565b606091505b50509050613a796714643eaa19656f6660c01b6136a1565b50613a94565b613a9367cc382f158ab6697a60c01b6136a1565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613ace6703748e24ba0bf9ec60c01b6107aa565b613ae2670bc8db960be8c07860c01b6107aa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613b3767019acf8eca98742f60c01b6107aa565b613b4b67ffb0ee9b4a9774fe60c01b6107aa565b613b5481613bfc565b613b68675b78c5bf4202c90360c01b6107aa565b613b7c6725b6d74483d24a8260c01b6107aa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613c106717c7d6a68a08773960c01b61347e565b613c2467cc8de6b882acb1a360c01b61347e565b613c38671ec2242cb4213daf60c01b61347e565b613c4c67e7bfe4742339224760c01b61347e565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd0906163da565b60405180910390fd5b613ced676270d7427db14f5b60c01b61347e565b613d016704aa357520b4416d60c01b61347e565b613d15672b9382deb815da6060c01b61347e565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613d449190614b09565b60405180910390a1613d6067c36c72a8ecc3a90660c01b61347e565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613dce67c36ba9a4464b6ea960c01b612d2a565b613de267dbc59bf60721ec3760c01b612d2a565b613df667a9b899a25d7f84f360c01b612d2a565b613e0a676ccf2b04ef43fe2c60c01b612d2a565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8d90616446565b60405180910390fd5b613eaa677f234f21a7a7167460c01b612d2a565b613ebe675dad748d723fc1a560c01b612d2a565b613ed267bcc423d1b918455e60c01b612d2a565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613f019190614b09565b60405180910390a1613f1d67ea5e8a43da197a0d60c01b612d2a565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b50565b613f8f67473271421f468fd260c01b612d2a565b613fa36792976a0e8d69a1f860c01b612d2a565b613fb76722fdc4cd5a73662060c01b612d2a565b613fcb677f1705d0822221e360c01b612d2a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361403a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614031906164d8565b60405180910390fd5b61404e67d29ec12c81e5975160c01b612d2a565b614062675ce58ff31b29be9c60c01b612d2a565b61407667e300c4231196178660c01b612d2a565b61408a6756d066aad6d03b2860c01b612d2a565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410e90616544565b60405180910390fd5b61412b67ceace18cb99efb4860c01b612d2a565b61413f67b298b03df19232ce60c01b612d2a565b6141536771c3a697a02cf77360c01b612d2a565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969816040516141829190614b09565b60405180910390a161419e673094a602565cca5360c01b612d2a565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b61422181613a97565b614260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614257906165d6565b60405180910390fd5b8061428d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614204565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6142da83614381565b6000825111806142e75750805b156142f8576142f683836143d0565b505b505050565b60006143136717718d3268584e5860c01b6143fd565b6143276719e6416798285bdf60c01b6143fd565b61433b67a626d76b40db563f60c01b6143fd565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61438a81614218565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606143f583836040518060600160405280602781526020016166c960279139614400565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161442a91906155a5565b600060405180830381855af49150503d8060008114614465576040519150601f19603f3d011682016040523d82523d6000602084013e61446a565b606091505b509150915061447b86838387614486565b925050509392505050565b606083156144e85760008351036144e0576144a085613a97565b6144df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144d690616642565b60405180910390fd5b5b8290506144f3565b6144f283836144fb565b5b949350505050565b60008251111561450e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454291906166a6565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145ac82614581565b9050919050565b6145bc816145a1565b81146145c757600080fd5b50565b6000813590506145d9816145b3565b92915050565b6000819050919050565b6145f2816145df565b81146145fd57600080fd5b50565b60008135905061460f816145e9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261463a57614639614615565b5b8235905067ffffffffffffffff8111156146575761465661461a565b5b6020830191508360018202830111156146735761467261461f565b5b9250929050565b60008060008060008060008060c0898b03121561469a57614699614577565b5b60006146a88b828c016145ca565b98505060206146b98b828c016145ca565b97505060406146ca8b828c016145ca565b96505060606146db8b828c01614600565b955050608089013567ffffffffffffffff8111156146fc576146fb61457c565b5b6147088b828c01614624565b945094505060a089013567ffffffffffffffff81111561472b5761472a61457c565b5b6147378b828c01614624565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61477e81614749565b811461478957600080fd5b50565b60008135905061479b81614775565b92915050565b6000602082840312156147b7576147b6614577565b5b60006147c58482850161478c565b91505092915050565b60008115159050919050565b6147e3816147ce565b82525050565b60006020820190506147fe60008301846147da565b92915050565b60006020828403121561481a57614819614577565b5b6000614828848285016145ca565b91505092915050565b60008060008060006080868803121561484d5761484c614577565b5b600061485b888289016145ca565b955050602061486c888289016145ca565b945050604061487d88828901614600565b935050606086013567ffffffffffffffff81111561489e5761489d61457c565b5b6148aa88828901614624565b92509250509295509295909350565b6148c281614749565b82525050565b60006020820190506148dd60008301846148b9565b92915050565b6000819050919050565b6148f6816148e3565b811461490157600080fd5b50565b600081359050614913816148ed565b92915050565b614922816147ce565b811461492d57600080fd5b50565b60008135905061493f81614919565b92915050565b60008060008060006080868803121561496157614960614577565b5b600061496f888289016145ca565b955050602061498088828901614904565b945050604086013567ffffffffffffffff8111156149a1576149a061457c565b5b6149ad88828901614624565b935093505060606149c088828901614930565b9150509295509295909350565b60008083601f8401126149e3576149e2614615565b5b8235905067ffffffffffffffff811115614a00576149ff61461a565b5b602083019150836020820283011115614a1c57614a1b61461f565b5b9250929050565b60008083601f840112614a3957614a38614615565b5b8235905067ffffffffffffffff811115614a5657614a5561461a565b5b602083019150836020820283011115614a7257614a7161461f565b5b9250929050565b60008060008060408587031215614a9357614a92614577565b5b600085013567ffffffffffffffff811115614ab157614ab061457c565b5b614abd878288016149cd565b9450945050602085013567ffffffffffffffff811115614ae057614adf61457c565b5b614aec87828801614a23565b925092505092959194509250565b614b03816145a1565b82525050565b6000602082019050614b1e6000830184614afa565b92915050565b600080fd5b60006101608284031215614b4057614b3f614b24565b5b81905092915050565b600080600060608486031215614b6257614b61614577565b5b600084013567ffffffffffffffff811115614b8057614b7f61457c565b5b614b8c86828701614b29565b9350506020614b9d86828701614904565b9250506040614bae86828701614600565b9150509250925092565b614bc1816145df565b82525050565b6000602082019050614bdc6000830184614bb8565b92915050565b6000614bed826145a1565b9050919050565b614bfd81614be2565b8114614c0857600080fd5b50565b600081359050614c1a81614bf4565b92915050565b60008060408385031215614c3757614c36614577565b5b6000614c4585828601614c0b565b9250506020614c56858286016145ca565b9150509250929050565b6000614c6b82614581565b9050919050565b614c7b81614c60565b8114614c8657600080fd5b50565b600081359050614c9881614c72565b92915050565b60008060408385031215614cb557614cb4614577565b5b6000614cc385828601614c89565b9250506020614cd485828601614600565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d2c82614ce3565b810181811067ffffffffffffffff82111715614d4b57614d4a614cf4565b5b80604052505050565b6000614d5e61456d565b9050614d6a8282614d23565b919050565b600067ffffffffffffffff821115614d8a57614d89614cf4565b5b614d9382614ce3565b9050602081019050919050565b82818337600083830152505050565b6000614dc2614dbd84614d6f565b614d54565b905082815260208101848484011115614dde57614ddd614cde565b5b614de9848285614da0565b509392505050565b600082601f830112614e0657614e05614615565b5b8135614e16848260208601614daf565b91505092915050565b60008060408385031215614e3657614e35614577565b5b6000614e44858286016145ca565b925050602083013567ffffffffffffffff811115614e6557614e6461457c565b5b614e7185828601614df1565b9150509250929050565b614e84816148e3565b82525050565b6000602082019050614e9f6000830184614e7b565b92915050565b60008060008060608587031215614ebf57614ebe614577565b5b6000614ecd878288016145ca565b9450506020614ede87828801614904565b935050604085013567ffffffffffffffff811115614eff57614efe61457c565b5b614f0b87828801614624565b925092505092959194509250565b600067ffffffffffffffff821115614f3457614f33614cf4565b5b602082029050919050565b6000614f52614f4d84614f19565b614d54565b90508060208402830185811115614f6c57614f6b61461f565b5b835b81811015614f955780614f818882614600565b845260208401935050602081019050614f6e565b5050509392505050565b600082601f830112614fb457614fb3614615565b5b6004614fc1848285614f3f565b91505092915050565b60008060a08385031215614fe157614fe0614577565b5b6000614fef85828601614c0b565b925050602061500085828601614f9f565b9150509250929050565b6000819050919050565b600061502f61502a61502584614581565b61500a565b614581565b9050919050565b600061504182615014565b9050919050565b600061505382615036565b9050919050565b61506381615048565b82525050565b600060208201905061507e600083018461505a565b92915050565b6000806000806060858703121561509e5761509d614577565b5b60006150ac878288016145ca565b94505060206150bd87828801614600565b935050604085013567ffffffffffffffff8111156150de576150dd61457c565b5b6150ea87828801614624565b925092505092959194509250565b60008083601f84011261510e5761510d614615565b5b8235905067ffffffffffffffff81111561512b5761512a61461a565b5b6020830191508360208202830111156151475761514661461f565b5b9250929050565b60008060008060008060008060a0898b03121561516e5761516d614577565b5b600061517c8b828c016145ca565b985050602061518d8b828c016145ca565b975050604089013567ffffffffffffffff8111156151ae576151ad61457c565b5b6151ba8b828c016150f8565b9650965050606089013567ffffffffffffffff8111156151dd576151dc61457c565b5b6151e98b828c016150f8565b9450945050608089013567ffffffffffffffff81111561520c5761520b61457c565b5b6152188b828c01614624565b92509250509295985092959890939650565b600060049050919050565b600081905092915050565b6000819050919050565b615253816145df565b82525050565b6000615265838361524a565b60208301905092915050565b6000602082019050919050565b6152878161522a565b6152918184615235565b925061529c82615240565b8060005b838110156152cd5781516152b48782615259565b96506152bf83615271565b9250506001810190506152a0565b505050505050565b60006080820190506152ea600083018461527e565b92915050565b60008060008060008060a0878903121561530d5761530c614577565b5b600061531b89828a016145ca565b965050602061532c89828a016145ca565b955050604061533d89828a01614600565b945050606061534e89828a01614600565b935050608087013567ffffffffffffffff81111561536f5761536e61457c565b5b61537b89828a01614624565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153c4826145df565b91506153cf836145df565b92508282039050818111156153e7576153e661538a565b5b92915050565b600080fd5b600080fd5b6000808585111561540b5761540a6153ed565b5b8386111561541c5761541b6153f2565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006154568383615432565b8261546181356148e3565b925060208210156154a15761549c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261543d565b831692505b505092915050565b6000806000606084860312156154c2576154c1614577565b5b60006154d086828701614c89565b935050602084013567ffffffffffffffff8111156154f1576154f061457c565b5b6154fd86828701614df1565b925050604084013567ffffffffffffffff81111561551e5761551d61457c565b5b61552a86828701614df1565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561556857808201518184015260208101905061554d565b60008484015250505050565b600061557f82615534565b615589818561553f565b935061559981856020860161554a565b80840191505092915050565b60006155b18284615574565b915081905092915050565b600082825260208201905092915050565b60006155d882615534565b6155e281856155bc565b93506155f281856020860161554a565b6155fb81614ce3565b840191505092915050565b6000602082019050818103600083015261562081846155cd565b905092915050565b600060408201905061563d6000830185614e7b565b818103602083015261564f81846155cd565b90509392505050565b60008151905061566781614775565b92915050565b60006020828403121561568357615682614577565b5b600061569184828501615658565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615707603a8361569a565b9150615712826156ab565b604082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006157c8602d8361569a565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b600060ff82169050919050565b615814816157fe565b82525050565b600060808201905061582f6000830187614e7b565b61583c602083018661580b565b6158496040830185614e7b565b6158566060830184614e7b565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006158bb60338361569a565b91506158c68261585f565b604082019050919050565b600060208201905081810360008301526158ea816158ae565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261591d5761591c6158f1565b5b80840192508235915067ffffffffffffffff82111561593f5761593e6158f6565b5b60208301925060018202360383131561595b5761595a6158fb565b5b509250929050565b600061596e826145df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159a05761599f61538a565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000615a0760338361569a565b9150615a12826159ab565b604082019050919050565b60006020820190508181036000830152615a36816159fa565b9050919050565b6000604082019050615a526000830185614afa565b615a5f6020830184614afa565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000615ac2602c8361569a565b9150615acd82615a66565b604082019050919050565b60006020820190508181036000830152615af181615ab5565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615b54602c8361569a565b9150615b5f82615af8565b604082019050919050565b60006020820190508181036000830152615b8381615b47565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615be6602e8361569a565b9150615bf182615b8a565b604082019050919050565b60006020820190508181036000830152615c1581615bd9565b9050919050565b6000819050919050565b6000615c41615c3c615c3784615c1c565b61500a565b6157fe565b9050919050565b615c5181615c26565b82525050565b6000602082019050615c6c6000830184615c48565b92915050565b615c7b81614c60565b82525050565b6000604082019050615c966000830185615c72565b615ca36020830184614bb8565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615d0660388361569a565b9150615d1182615caa565b604082019050919050565b60006020820190508181036000830152615d3581615cf9565b9050919050565b6000615d4883856155bc565b9350615d55838584614da0565b615d5e83614ce3565b840190509392505050565b6000608082019050615d7e6000830188614afa565b615d8b6020830187614e7b565b8181036040830152615d9e818587615d3c565b9050615dad60608301846147da565b9695505050505050565b600081519050615dc681614919565b92915050565b600060208284031215615de257615de1614577565b5b6000615df084828501615db7565b91505092915050565b600081519050615e08816145e9565b92915050565b600060208284031215615e2457615e23614577565b5b6000615e3284828501615df9565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615e9760288361569a565b9150615ea282615e3b565b604082019050919050565b60006020820190508181036000830152615ec681615e8a565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615f03601a8361569a565b9150615f0e82615ecd565b602082019050919050565b60006020820190508181036000830152615f3281615ef6565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615f6f601b8361569a565b9150615f7a82615f39565b602082019050919050565b60006020820190508181036000830152615f9e81615f62565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b600061600160298361569a565b915061600c82615fa5565b604082019050919050565b6000602082019050818103600083015261603081615ff4565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061606d601c8361569a565b915061607882616037565b602082019050919050565b6000602082019050818103600083015261609c81616060565b9050919050565b6000815190506160b2816148ed565b92915050565b6000602082840312156160ce576160cd614577565b5b60006160dc848285016160a3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000616141602e8361569a565b915061614c826160e5565b604082019050919050565b6000602082019050818103600083015261617081616134565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006161d360298361569a565b91506161de82616177565b604082019050919050565b60006020820190508181036000830152616202816161c6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061626560248361569a565b915061627082616209565b604082019050919050565b6000602082019050818103600083015261629481616258565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006162be8261629b565b91506bffffffffffffffffffffffff82036162dc576162db61538a565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061631d601f8361569a565b9150616328826162e7565b602082019050919050565b6000602082019050818103600083015261634c81616310565b9050919050565b50565b600061636360008361553f565b915061636e82616353565b600082019050919050565b600061638482616356565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006163c460188361569a565b91506163cf8261638e565b602082019050919050565b600060208201905081810360008301526163f3816163b7565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b600061643060208361569a565b915061643b826163fa565b602082019050919050565b6000602082019050818103600083015261645f81616423565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006164c260288361569a565b91506164cd82616466565b604082019050919050565b600060208201905081810360008301526164f1816164b5565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061652e601c8361569a565b9150616539826164f8565b602082019050919050565b6000602082019050818103600083015261655d81616521565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006165c0602d8361569a565b91506165cb82616564565b604082019050919050565b600060208201905081810360008301526165ef816165b3565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061662c601d8361569a565b9150616637826165f6565b602082019050919050565b6000602082019050818103600083015261665b8161661f565b9050919050565b600081519050919050565b600061667882616662565b616682818561569a565b935061669281856020860161554a565b61669b81614ce3565b840191505092915050565b600060208201905081810360008301526166c0818461666d565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ede8abd2a1c106e8ffc26becb70091181ff94e55711fd3061792bb2f38ff4f8164736f6c63430008110033"; type BrokenBLSAccountFactoryConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts index 63676b77..bd680cd5 100644 --- a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts @@ -21,6 +21,28 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -59,42 +81,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -102,24 +118,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -140,18 +176,25 @@ const _abi = [ inputs: [ { indexed: false, - internalType: "uint256[4]", - name: "oldPublicKey", - type: "uint256[4]", + internalType: "address", + name: "newOwner", + type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, - internalType: "uint256[4]", - name: "newPublicKey", - type: "uint256[4]", + internalType: "address", + name: "removedOwner", + type: "address", }, ], - name: "PublicKeyChanged", + name: "OwnerRemoved", type: "event", }, { @@ -159,18 +202,18 @@ const _abi = [ inputs: [ { indexed: false, - internalType: "address", - name: "oldRegistry", - type: "address", + internalType: "uint256[4]", + name: "oldPublicKey", + type: "uint256[4]", }, { indexed: false, - internalType: "address", - name: "newRegistry", - type: "address", + internalType: "uint256[4]", + name: "newPublicKey", + type: "uint256[4]", }, ], - name: "RegistryChanged", + name: "PublicKeyChanged", type: "event", }, { @@ -186,19 +229,6 @@ const _abi = [ name: "Upgraded", type: "event", }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "addDeposit", @@ -207,37 +237,39 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "aggregator", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_newGuardian", type: "address", }, ], - stateMutability: "view", + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, { internalType: "address", - name: "addr", + name: "_newOwner", type: "address", }, ], - name: "canImplementInterfaceForAddress", + name: "addOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "aggregator", outputs: [ { - internalType: "bytes32", + internalType: "address", name: "", - type: "bytes32", + type: "address", }, ], stateMutability: "view", @@ -332,7 +364,20 @@ const _abi = [ }, { internalType: "address", - name: "anRegistry", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", type: "address", }, { @@ -349,72 +394,131 @@ const _abi = [ { inputs: [ { - internalType: "contract IEntryPoint", - name: "anEntryPoint", + internalType: "address", + name: "_address", type: "address", }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ { internalType: "address", - name: "anRegistry", + name: "_address", type: "address", }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ { internalType: "address", - name: "anOwner", + name: "_signer", type: "address", }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "isValidSig", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, ], - name: "initialize", - outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, ], - name: "isValidSignature", + name: "isValidSigImpl", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ { - internalType: "bytes", - name: "message", - type: "bytes", + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -443,14 +547,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -458,7 +562,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -486,13 +590,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -504,16 +613,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ { internalType: "address", name: "", type: "address", }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -530,15 +660,47 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", + type: "address", + }, + ], + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", type: "address", }, ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], stateMutability: "view", type: "function", }, @@ -551,17 +713,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -577,7 +739,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -593,19 +755,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -748,7 +897,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162003dd038038062003dd083398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a051613c466200018a60003960008181610cc40152611b97015260008181610d8001528181610e0f01528181611048015281816110d701526111870152613c466000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b1461055c578063c399ec8814610585578063e02afbae146105b0578063f23a6e61146105db5761018b565b8063affed0e0146104dd578063b0d691fe14610508578063b61d27f6146105335761018b565b80634d44560d146103ec5780634f1ef2861461041557806352d1902d1461043157806379cbc5fa1461045c5780637b103999146104875780638da5cb5b146104b25761018b565b80631b71bb6e1161013e578063249cb3fa11610118578063249cb3fa1461033f5780633659cfe61461037c5780633a871cdd146103a55780634a58db19146103e25761018b565b80631b71bb6e146102ae57806320c13b0b146102d7578063245a7bfc146103145761018b565b806223de291461019057806305d3177d146101b9578063150b7a02146101e25780631626ba7e1461021f57806318dfb3c71461025c5780631a5da6c8146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b2919061217c565b610618565b005b3480156101c557600080fd5b506101e060048036038101906101db91906123c6565b61065d565b005b3480156101ee57600080fd5b5061020960048036038101906102049190612419565b6107a7565b60405161021691906124dc565b60405180910390f35b34801561022b57600080fd5b506102466004803603810190610241919061252d565b6107bc565b60405161025391906124dc565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190612639565b61089f565b005b34801561029157600080fd5b506102ac60048036038101906102a791906126ba565b6109b1565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906126ba565b610ac5565b005b3480156102e357600080fd5b506102fe60048036038101906102f991906126e7565b610bdc565b60405161030b91906124dc565b60405180910390f35b34801561032057600080fd5b50610329610cc2565b6040516103369190612777565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612792565b610ce6565b60405161037391906127e1565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906126ba565b610d7e565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612821565b610f07565b6040516103d9919061289f565b60405180910390f35b6103ea610f51565b005b3480156103f857600080fd5b50610413600480360381019061040e91906128f8565b610fc6565b005b61042f600480360381019061042a91906129ed565b611046565b005b34801561043d57600080fd5b50610446611183565b60405161045391906127e1565b60405180910390f35b34801561046857600080fd5b5061047161123c565b60405161047e9190612777565b60405180910390f35b34801561049357600080fd5b5061049c611260565b6040516104a99190612777565b60405180910390f35b3480156104be57600080fd5b506104c7611289565b6040516104d49190612777565b60405180910390f35b3480156104e957600080fd5b506104f26112af565b6040516104ff919061289f565b60405180910390f35b34801561051457600080fd5b5061051d6112df565b60405161052a9190612aa8565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ac3565b611309565b005b34801561056857600080fd5b50610583600480360381019061057e9190612b37565b611366565b005b34801561059157600080fd5b5061059a6114af565b6040516105a7919061289f565b60405180910390f35b3480156105bc57600080fd5b506105c5611537565b6040516105d29190612c35565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190612c50565b61154e565b60405161060f91906124dc565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161064b93929190612cea565b60405180910390a15050505050505050565b60008060159054906101000a900460ff1615905080801561069057506001600060149054906101000a900460ff1660ff16105b806106bf575061069f30611564565b1580156106be57506001600060149054906101000a900460ff1660ff16145b5b6106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff160217905550801561073c576001600060156101000a81548160ff0219169083151502179055505b61074884846000611587565b80156107a15760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516107989190612e0c565b60405180910390a15b50505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161081e9493929190612e65565b602060405180830381865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612edd565b6108705763ffffffff60e01b610896565b60405160200161087f90612f61565b604051602081830303815290604052805190602001205b90509392505050565b6108a7611723565b8181905084849050146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690612fe8565b60405180910390fd5b60005b848490508110156109aa5761099785858381811061091357610912613008565b5b905060200201602081019061092891906126ba565b600085858581811061093d5761093c613008565b5b905060200281019061094f9190613046565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b80806109a2906130d8565b9150506108f2565b5050505050565b6109b9611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613193565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a7a9291906131b3565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610acd611876565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061324e565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610b909291906131b3565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610c4095949392919061326e565b602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612edd565b610c925763ffffffff60e01b610cb8565b604051602001610ca190613303565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610cf890613364565b6040516020818303038152906040528051906020012084148015610d4757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d7457604051602001610d5b906133c5565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e049061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e4c61193e565b73ffffffffffffffffffffffffffffffffffffffff1614610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906134de565b60405180910390fd5b610eab81611995565b610f0481600067ffffffffffffffff811115610eca57610ec961229a565b5b6040519080825280601f01601f191660200182016040528015610efc5781602001600182028036833780820191505090505b5060006119a0565b50565b6000610f11611b0e565b610f1b8484611b85565b90506000848060400190610f2f9190613046565b90501415610f4157610f4084611bfa565b5b610f4a82611ca8565b9392505050565b610f596112df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610f929190612777565b6000604051808303818588803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b5050505050565b610fce611876565b610fd66112df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161101092919061350d565b600060405180830381600087803b15801561102a57600080fd5b505af115801561103e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061344c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661111461193e565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906134de565b60405180910390fd5b61117382611995565b61117f828260016119a0565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a906135a8565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611311611723565b611360848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506117f2565b50505050565b60008060159054906101000a900460ff1615905080801561139957506001600060149054906101000a900460ff1660ff16105b806113c857506113a830611564565b1580156113c757506001600060149054906101000a900460ff1660ff16145b5b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612da4565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611445576001600060156101000a81548160ff0219169083151502179055505b611450848484611587565b80156114a95760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516114a09190612e0c565b60405180910390a15b50505050565b60006114b96112df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114f19190612777565b602060405180830381865afa15801561150e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153291906135dd565b905090565b61153f61204d565b61154761204d565b8091505090565b600063f23a6e6160e01b90509695505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b61172b6112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117b157506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061367c565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161181b9190613716565b60006040518083038185875af1925050503d8060008114611858576040519150601f19603f3d011682016040523d82523d6000602084013e61185d565b606091505b50915091508161186f57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118fd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613779565b60405180910390fd5b565b600061196c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199d611876565b50565b6119cc7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d4e565b60000160009054906101000a900460ff16156119f0576119eb83611d58565b611b09565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a5857506040513d601f19601f82011682018060405250810190611a5591906137ae565b60015b611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e9061384d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906138df565b60405180910390fd5b50611b08838383611e11565b5b505050565b611b166112df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90613971565b60405180910390fd5b565b6000611bf260405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611e3d565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611c29906139a9565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613a2a565b60405180910390fd5b50565b60008114611d415760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611cf890613a70565b600060405180830381858888f193505050503d8060008114611d36576040519150601f19603f3d011682016040523d82523d6000602084013e611d3b565b606091505b50509050505b50565b6000819050919050565b6000819050919050565b611d6181611564565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790613af7565b60405180910390fd5b80611dcd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d44565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1a83611e85565b600082511180611e275750805b15611e3857611e368383611ed4565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611e8e81611d58565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ef98383604051806060016040528060278152602001613bea60279139611f01565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f2b9190613716565b600060405180830381855af49150503d8060008114611f66576040519150601f19603f3d011682016040523d82523d6000602084013e611f6b565b606091505b5091509150611f7c86838387611f87565b925050509392505050565b60608315611fea57600083511415611fe257611fa285611564565b611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890613b63565b60405180910390fd5b5b829050611ff5565b611ff48383611ffd565b5b949350505050565b6000825111156120105781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120449190613bc7565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120ae82612083565b9050919050565b6120be816120a3565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b6000819050919050565b6120f4816120e1565b81146120ff57600080fd5b50565b600081359050612111816120eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261213c5761213b612117565b5b8235905067ffffffffffffffff8111156121595761215861211c565b5b60208301915083600182028301111561217557612174612121565b5b9250929050565b60008060008060008060008060c0898b03121561219c5761219b612079565b5b60006121aa8b828c016120cc565b98505060206121bb8b828c016120cc565b97505060406121cc8b828c016120cc565b96505060606121dd8b828c01612102565b955050608089013567ffffffffffffffff8111156121fe576121fd61207e565b5b61220a8b828c01612126565b945094505060a089013567ffffffffffffffff81111561222d5761222c61207e565b5b6122398b828c01612126565b92509250509295985092959890939650565b6000612256826120a3565b9050919050565b6122668161224b565b811461227157600080fd5b50565b6000813590506122838161225d565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d282612289565b810181811067ffffffffffffffff821117156122f1576122f061229a565b5b80604052505050565b600061230461206f565b905061231082826122c9565b919050565b600067ffffffffffffffff8211156123305761232f61229a565b5b602082029050919050565b600061234e61234984612315565b6122fa565b9050806020840283018581111561236857612367612121565b5b835b81811015612391578061237d8882612102565b84526020840193505060208101905061236a565b5050509392505050565b600082601f8301126123b0576123af612117565b5b60046123bd84828561233b565b91505092915050565b600080600060c084860312156123df576123de612079565b5b60006123ed86828701612274565b93505060206123fe868287016120cc565b925050604061240f8682870161239b565b9150509250925092565b60008060008060006080868803121561243557612434612079565b5b6000612443888289016120cc565b9550506020612454888289016120cc565b945050604061246588828901612102565b935050606086013567ffffffffffffffff8111156124865761248561207e565b5b61249288828901612126565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d6816124a1565b82525050565b60006020820190506124f160008301846124cd565b92915050565b6000819050919050565b61250a816124f7565b811461251557600080fd5b50565b60008135905061252781612501565b92915050565b60008060006040848603121561254657612545612079565b5b600061255486828701612518565b935050602084013567ffffffffffffffff8111156125755761257461207e565b5b61258186828701612126565b92509250509250925092565b60008083601f8401126125a3576125a2612117565b5b8235905067ffffffffffffffff8111156125c0576125bf61211c565b5b6020830191508360208202830111156125dc576125db612121565b5b9250929050565b60008083601f8401126125f9576125f8612117565b5b8235905067ffffffffffffffff8111156126165761261561211c565b5b60208301915083602082028301111561263257612631612121565b5b9250929050565b6000806000806040858703121561265357612652612079565b5b600085013567ffffffffffffffff8111156126715761267061207e565b5b61267d8782880161258d565b9450945050602085013567ffffffffffffffff8111156126a05761269f61207e565b5b6126ac878288016125e3565b925092505092959194509250565b6000602082840312156126d0576126cf612079565b5b60006126de848285016120cc565b91505092915050565b6000806000806040858703121561270157612700612079565b5b600085013567ffffffffffffffff81111561271f5761271e61207e565b5b61272b87828801612126565b9450945050602085013567ffffffffffffffff81111561274e5761274d61207e565b5b61275a87828801612126565b925092505092959194509250565b612771816120a3565b82525050565b600060208201905061278c6000830184612768565b92915050565b600080604083850312156127a9576127a8612079565b5b60006127b785828601612518565b92505060206127c8858286016120cc565b9150509250929050565b6127db816124f7565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600080fd5b60006101608284031215612818576128176127fc565b5b81905092915050565b60008060006060848603121561283a57612839612079565b5b600084013567ffffffffffffffff8111156128585761285761207e565b5b61286486828701612801565b935050602061287586828701612518565b925050604061288686828701612102565b9150509250925092565b612899816120e1565b82525050565b60006020820190506128b46000830184612890565b92915050565b60006128c582612083565b9050919050565b6128d5816128ba565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e612079565b5b600061291d858286016128e3565b925050602061292e85828601612102565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156129585761295761229a565b5b61296182612289565b9050602081019050919050565b82818337600083830152505050565b600061299061298b8461293d565b6122fa565b9050828152602081018484840111156129ac576129ab612938565b5b6129b784828561296e565b509392505050565b600082601f8301126129d4576129d3612117565b5b81356129e484826020860161297d565b91505092915050565b60008060408385031215612a0457612a03612079565b5b6000612a12858286016120cc565b925050602083013567ffffffffffffffff811115612a3357612a3261207e565b5b612a3f858286016129bf565b9150509250929050565b6000819050919050565b6000612a6e612a69612a6484612083565b612a49565b612083565b9050919050565b6000612a8082612a53565b9050919050565b6000612a9282612a75565b9050919050565b612aa281612a87565b82525050565b6000602082019050612abd6000830184612a99565b92915050565b60008060008060608587031215612add57612adc612079565b5b6000612aeb878288016120cc565b9450506020612afc87828801612102565b935050604085013567ffffffffffffffff811115612b1d57612b1c61207e565b5b612b2987828801612126565b925092505092959194509250565b600080600060608486031215612b5057612b4f612079565b5b6000612b5e86828701612274565b9350506020612b6f868287016120cc565b9250506040612b80868287016120cc565b9150509250925092565b600060049050919050565b600081905092915050565b6000819050919050565b612bb3816120e1565b82525050565b6000612bc58383612baa565b60208301905092915050565b6000602082019050919050565b612be781612b8a565b612bf18184612b95565b9250612bfc82612ba0565b8060005b83811015612c2d578151612c148782612bb9565b9650612c1f83612bd1565b925050600181019050612c00565b505050505050565b6000608082019050612c4a6000830184612bde565b92915050565b60008060008060008060a08789031215612c6d57612c6c612079565b5b6000612c7b89828a016120cc565b9650506020612c8c89828a016120cc565b9550506040612c9d89828a01612102565b9450506060612cae89828a01612102565b935050608087013567ffffffffffffffff811115612ccf57612cce61207e565b5b612cdb89828a01612126565b92509250509295509295509295565b6000606082019050612cff6000830186612768565b612d0c6020830185612768565b612d196040830184612890565b949350505050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d8e602e83612d21565b9150612d9982612d32565b604082019050919050565b60006020820190508181036000830152612dbd81612d81565b9050919050565b6000819050919050565b600060ff82169050919050565b6000612df6612df1612dec84612dc4565b612a49565b612dce565b9050919050565b612e0681612ddb565b82525050565b6000602082019050612e216000830184612dfd565b92915050565b600082825260208201905092915050565b6000612e448385612e27565b9350612e5183858461296e565b612e5a83612289565b840190509392505050565b6000606082019050612e7a6000830187612768565b612e8760208301866127d2565b8181036040830152612e9a818486612e38565b905095945050505050565b60008115159050919050565b612eba81612ea5565b8114612ec557600080fd5b50565b600081519050612ed781612eb1565b92915050565b600060208284031215612ef357612ef2612079565b5b6000612f0184828501612ec8565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612f4b601f83612f0a565b9150612f5682612f15565b601f82019050919050565b6000612f6c82612f3e565b9150819050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612fd2603383612d21565b9150612fdd82612f76565b604082019050919050565b6000602082019050818103600083015261300181612fc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261306357613062613037565b5b80840192508235915067ffffffffffffffff8211156130855761308461303c565b5b6020830192506001820236038313156130a1576130a0613041565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130e3826120e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613116576131156130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061317d603183612d21565b915061318882613121565b604082019050919050565b600060208201905081810360008301526131ac81613170565b9050919050565b60006040820190506131c86000830185612768565b6131d56020830184612768565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000613238603383612d21565b9150613243826131dc565b604082019050919050565b600060208201905081810360008301526132678161322b565b9050919050565b60006060820190506132836000830188612768565b8181036020830152613296818688612e38565b905081810360408301526132ab818486612e38565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006132ed601d83612f0a565b91506132f8826132b7565b601d82019050919050565b600061330e826132e0565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b600061334e601583612f0a565b915061335982613318565b601582019050919050565b600061336f82613341565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006133af601483612f0a565b91506133ba82613379565b601482019050919050565b60006133d0826133a2565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613436602c83612d21565b9150613441826133da565b604082019050919050565b6000602082019050818103600083015261346581613429565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006134c8602c83612d21565b91506134d38261346c565b604082019050919050565b600060208201905081810360008301526134f7816134bb565b9050919050565b613507816128ba565b82525050565b600060408201905061352260008301856134fe565b61352f6020830184612890565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613592603883612d21565b915061359d82613536565b604082019050919050565b600060208201905081810360008301526135c181613585565b9050919050565b6000815190506135d7816120eb565b92915050565b6000602082840312156135f3576135f2612079565b5b6000613601848285016135c8565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613666602983612d21565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156136d05780820151818401526020810190506136b5565b838111156136df576000848401525b50505050565b60006136f08261369c565b6136fa81856136a7565b935061370a8185602086016136b2565b80840191505092915050565b600061372282846136e5565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613763601c83612d21565b915061376e8261372d565b602082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b6000815190506137a881612501565b92915050565b6000602082840312156137c4576137c3612079565b5b60006137d284828501613799565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613837602e83612d21565b9150613842826137db565b604082019050919050565b600060208201905081810360008301526138668161382a565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006138c9602983612d21565b91506138d48261386d565b604082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061395b602483612d21565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006139b482613991565b91506bffffffffffffffffffffffff8214156139d3576139d26130a9565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613a14601f83612d21565b9150613a1f826139de565b602082019050919050565b60006020820190508181036000830152613a4381613a07565b9050919050565b50565b6000613a5a6000836136a7565b9150613a6582613a4a565b600082019050919050565b6000613a7b82613a4d565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613ae1602d83612d21565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b4d601d83612d21565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b600081519050919050565b6000613b9982613b83565b613ba38185612d21565b9350613bb38185602086016136b2565b613bbc81612289565b840191505092915050565b60006020820190508181036000830152613be18184613b8e565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d681329940afaf841d42fcc1038e4f740360de20cf344ab1e2734a64f4d4912d64736f6c634300080c0033"; + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b5060405162006afc38038062006afc83398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea672ce72a810e3b755d60c01b6200020b60201b60201c565b6200010667e0e818911fc83a4360c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a051616725620003d76000396000818161195101526137e1015260008181611a0701528181611a9501528181612058015281816120e6015261219601526167256000f3fe6080604052600436106101d05760003560e01c80634f1ef286116100f7578063a526d83b11610095578063bc197c8111610064578063bc197c81146106da578063c399ec8814610717578063e02afbae14610742578063f23a6e611461076d5761022f565b8063a526d83b14610632578063affed0e01461065b578063b0d691fe14610686578063b61d27f6146106b15761022f565b806371404156116100d157806371404156146105665780638f0684301461058f57806398ef1ed8146105cc578063a345a29c146106095761022f565b80634f1ef286146104f657806352d1902d146105125780637065cb481461053d5761022f565b80631b71bb6e1161016f5780633a871cdd1161013e5780633a871cdd1461045d578063485cc9551461049a5780634a58db19146104c35780634d44560d146104cd5761022f565b80631b71bb6e146103a3578063245a7bfc146103cc5780632f54bf6e146103f75780633659cfe6146104345761022f565b8063150b7a02116101ab578063150b7a02146102d757806316d4340114610314578063173825d91461035157806318dfb3c71461037a5761022f565b806223de291461023457806301ffc9a71461025d5780630c68ba211461029a5761022f565b3661022f576101e967290bbd319612162360c01b6107aa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061467a565b6107ad565b005b34801561026957600080fd5b50610284600480360381019061027f91906147a1565b6107cb565b60405161029191906147e9565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190614804565b6109b0565b6040516102ce91906147e9565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190614831565b610a42565b60405161030b91906148c8565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190614945565b610a92565b60405161034891906147e9565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190614804565b61146b565b005b34801561038657600080fd5b506103a1600480360381019061039c9190614a79565b611533565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190614804565b611771565b005b3480156103d857600080fd5b506103e161194f565b6040516103ee9190614b09565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190614804565b611973565b60405161042b91906147e9565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614804565b611a05565b005b34801561046957600080fd5b50610484600480360381019061047f9190614b49565b611b8d565b6040516104919190614bc7565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190614c20565b611ccb565b005b6104cb611e71565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614c9e565b611f22565b005b610510600480360381019061050b9190614e1f565b612056565b005b34801561051e57600080fd5b50610527612192565b6040516105349190614e8a565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190614804565b61224b565b005b34801561057257600080fd5b5061058d60048036038101906105889190614804565b612313565b005b34801561059b57600080fd5b506105b660048036038101906105b19190614ea5565b6123db565b6040516105c391906147e9565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614ea5565b6124a8565b60405161060091906147e9565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614fca565b6126d1565b005b34801561063e57600080fd5b5061065960048036038101906106549190614804565b61288c565b005b34801561066757600080fd5b50610670612954565b60405161067d9190614bc7565b60405180910390f35b34801561069257600080fd5b5061069b6129c0565b6040516106a89190615069565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190615084565b612a26565b005b3480156106e657600080fd5b5061070160048036038101906106fc919061514e565b612b37565b60405161070e91906148c8565b60405180910390f35b34801561072357600080fd5b5061072c612b8b565b6040516107399190614bc7565b60405180910390f35b34801561074e57600080fd5b50610757612c4f565b60405161076491906152d5565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906152f0565b612cca565b6040516107a191906148c8565b60405180910390f35b50565b6107c1671278753381487ed660c01b612d1c565b5050505050505050565b60006107e167f20d647ea02d480060c01b612d1c565b6107f567ffb589296d687db060c01b612d1c565b6108096727ecf9b318901df560c01b612d1c565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108865750610885675d4be9b73183ad3f60c01b612d1f565b5b8061092657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109095750610908674cb5733a4ebd736b60c01b612d1f565b5b8015610925575061092467927753031b1e765d60c01b612d1f565b5b5b806109a957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109a857506109a766bc16169e90631c60c01b612d1f565b5b5b9050919050565b60006109c6679a530c869daa649060c01b612d2a565b6109da677819779a5121f4ad60c01b612d2a565b6109ee67dcc814792f5595a060c01b612d2a565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a576642558288c0c26a60c01b612d1c565b610a6b670cd59c881166cff460c01b612d1c565b610a7f67d8d160ce8c3ef4cc60c01b612d1c565b63150b7a0260e01b905095945050505050565b6000610aa86777258f39a67c0acd60c01b612d2d565b610abc67c9d3460cf31b367060c01b612d2d565b610ad067301450deda14998860c01b612d2d565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610b0067ec35fa0e327aba3360c01b612d2d565b610b146757c603851350fa0960c01b612d2d565b6060610b2a67ed7102d9c731614b60c01b612d2d565b610b3e67260c95324dc5522a60c01b612d2d565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b7691906153b9565b908a8a905092610b88939291906153f7565b90610b93919061544a565b149050610baa67adb0f8e971c6f00460c01b612d2d565b610bbe6775ac95bff94d832360c01b612d2d565b8015610e0b57610bd867b7ce1fa3f7f6604d60c01b612d2d565b610bec679fc1490a6707ce8260c01b612d2d565b610c00679cbd4322f03dcb3060c01b612d2d565b6000610c16677c50636fd0d78e6e60c01b612d2d565b610c2a67b6c96f6498872fdd60c01b612d2d565b6060610c4067d225012c278bc14960c01b612d2d565b888860009060208c8c9050610c5591906153b9565b92610c62939291906153f7565b810190610c6f91906154a9565b809650819350829450505050610c8f67414eafbc10d5dfd460c01b612d2d565b610ca3679735072f1875e8c560c01b612d2d565b60008503610def57610cbf67ece2f114e83cba5460c01b612d2d565b610cd367bb4b7709950fab6560c01b612d2d565b610ce767e556fd7ed728116b60c01b612d2d565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d0f91906155a5565b6000604051808303816000865af19150503d8060008114610d4c576040519150601f19603f3d011682016040523d82523d6000602084013e610d51565b606091505b5091509150610d6a675bb7adbcacc27af760c01b612d2d565b610d7e67925a11ac41b1a62f60c01b612d2d565b81610dd457610d97674b9b350a0c4e240d60c01b612d2d565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610dcb9190615606565b60405180910390fd5b610de867270a9300cfb5deb160c01b612d2d565b5050610e04565b610e036719ddea40eb9c9d5e60c01b612d2d565b5b5050610e7b565b610e1f671617c5f7b544c15460c01b612d2d565b610e3367152cf4f885c3c7bd60c01b612d2d565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e8f678968ba2400116cd160c01b612d2d565b610ea367d26f37fb13c4702060c01b612d2d565b808015610ec05750610ebf67e672c6829c01435e60c01b612d30565b5b80610ee75750600083118015610ee65750610ee5672f1034641526e8e560c01b612d30565b5b5b1561115757610f006787b8bb2f9d833b2360c01b612d2d565b610f146748ed04b5790955de60c01b612d2d565b610f2867c07d3098ed811b0e60c01b612d2d565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f63929190615628565b602060405180830381865afa925050508015610f9d57506040513d601f19601f82011682018060405250810190610f9a919061566d565b60015b611024573d8060008114610fcd576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b606091505b50610fe7672c516c89798db2e060c01b612d2d565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161101b9190615606565b60405180910390fd5b611038677a7dc9015ade993760c01b612d2d565b61104c676bd30bd513db1c1260c01b612d2d565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506110ac67f77b76e97cdda63e60c01b612d2d565b6110c067f2ac3b0c93d4d96060c01b612d2d565b6000851480156110cd5750825b80156110d7575086155b1561110e576110f06732203bac67e9a5c660c01b612d2d565b61110467bacd05270bf834fa60c01b612d2d565b806000526001601ffd5b61112267db508d98998fd4cb60c01b612d2d565b61113667bd809f1f7297a39860c01b612d2d565b61114a671166c1324f0a4d4360c01b612d2d565b8095505050505050611462565b61116b67fb73a16ec6f828a360c01b612d2d565b61117f67124b4f67fba3948f60c01b612d2d565b61119367a72081e2c67a966a60c01b612d2d565b6111a7670ab810c1358d671760c01b612d2d565b604187879050146111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e49061571d565b60405180910390fd5b61120167c0b4b2b739bdbc3e60c01b612d2d565b611215670f81a533fa5be34e60c01b612d2d565b61122967657c1339b273a74660c01b612d2d565b6000878760009060209261123f939291906153f7565b9061124a919061544a565b905061126067dc3d3b49fc92cadb60c01b612d2d565b6112746752ae34fa8263b21b60c01b612d2d565b6000888860209060409261128a939291906153f7565b90611295919061544a565b90506112ab67301232fd22fb824c60c01b612d2d565b6112bf67f519c889a1cef68c60c01b612d2d565b6000898960408181106112d5576112d461573d565b5b9050013560f81c60f81b60f81c90506112f8679a20c64fb3f7324360c01b612d2d565b61130c678a031af26ced764160c01b612d2d565b601b8160ff16141580156113245750601c8160ff1614155b156113a05761133d67cd922db48d204f9b60c01b612d2d565b61135167833a8605e20290ce60c01b612d2d565b61136567b3da6c39eac2834e60c01b612d2d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611397906157de565b60405180910390fd5b6113b4675514297355562d4860c01b612d2d565b6113c86757b333f889b6e2b360c01b612d2d565b6113dc676603fc4d7122128560c01b612d2d565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c83868660405160008152602001604052604051611416949392919061581a565b6020604051602081039080840390855afa158015611438573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b61147f6706cea3225e159afe60c01b6107aa565b61149367768e02f4b4fe93d060c01b6107aa565b6114a767bcb43f0f61fb5a1260c01b6107aa565b6114bb6705112cc091d04b2260c01b6107aa565b6114c3612d3b565b6114d7677b6146229717de8560c01b6107aa565b6114eb671a91445bcd7d6a3660c01b6107aa565b6114ff67087786fe3118ce4560c01b6107aa565b6115136712ac3ecdf13b356f60c01b6107aa565b611527676a822ec913ef224160c01b6107aa565b61153081612e9f565b50565b611547670b312c177376d2f160c01b6107aa565b61155b67526a718f37dbef7960c01b6107aa565b61156f67bc0095b6ec842fe060c01b6107aa565b6115836765a7b825dc91e38260c01b6107aa565b61158b61311b565b61159f67e65dfa654e10de0360c01b6107aa565b6115b36738751a29e4bbac9a60c01b6107aa565b6115c76764a3e3565274624260c01b6107aa565b6115db67e3532f2d278ffcc460c01b6107aa565b6115ef67b28c9cc66aedc63960c01b6107aa565b611603674c0d2e74d59320d660c01b6107aa565b81819050848490501461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906158d1565b60405180910390fd5b61165f6733f49bcf3f677de260c01b6107aa565b61167367fda055a3194df47960c01b6107aa565b611687670ca2693ca40a9c3d60c01b6107aa565b60005b8484905081101561176a576116a967e45fe9f7a89384cd60c01b6107aa565b6116bd677885f77483c8c7a360c01b6107aa565b6117578585838181106116d3576116d261573d565b5b90506020020160208101906116e89190614804565b60008585858181106116fd576116fc61573d565b5b905060200281019061170f9190615900565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061323e565b808061176290615963565b91505061168a565b5050505050565b61178567b0e8e7fc3aed8bf060c01b6107aa565b611799671246157b9919312560c01b6107aa565b6117ad67cbfddca365f5dede60c01b6107aa565b6117b5613362565b6117c967ab4f446b15a2b75360c01b6107aa565b6117dd67140f31a12b03a20160c01b6107aa565b6117f167c2cd95be620e67ae60c01b6107aa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790615a1d565b60405180910390fd5b611874674b99dae5f525e91060c01b6107aa565b61188867897f79a11a9b512360c01b6107aa565b61189c67f01df9d5178d9e0460c01b6107aa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118ef929190615a3d565b60405180910390a161190b6705fb80e775388d3f60c01b6107aa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006119896784c34e023fb786f860c01b61347e565b61199d670d806432bac21d3b60c01b61347e565b6119b1679da5a6f8cf654dc360c01b61347e565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90615ad8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ad2613481565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90615b6a565b60405180910390fd5b611b31816134d8565b611b8a81600067ffffffffffffffff811115611b5057611b4f614cf4565b5b6040519080825280601f01601f191660200182016040528015611b825781602001600182028036833780820191505090505b506000613533565b50565b6000611ba3674a0b745640aaacbe60c01b6136a1565b611bb7673643bc4d265e004d60c01b6136a1565b611bcb67be21e9c3510eef0760c01b6136a1565b611bd36136a4565b611be7670d9ae78f9ca6bca160c01b6136a1565b611bf1848461377f565b9050611c0767bac743df019f783060c01b6136a1565b611c1b674633441562cbb38260c01b6136a1565b6000848060400190611c2d9190615900565b905003611c7e57611c4867b9f604ce3adf50f460c01b6136a1565b611c5c6740dc8d2be550a2ae60c01b6136a1565b611c70678d7f5bf9351f5d3760c01b6136a1565b611c7984613844565b611c93565b611c9267493644fd2e2f359760c01b6136a1565b5b611ca767f86dd1b6eddb849360c01b6136a1565b611cbb67e338ec934ff31c9e60c01b6136a1565b611cc482613956565b9392505050565b611cdf67c8d7dd5c6ec287ee60c01b6107aa565b60008060019054906101000a900460ff16159050808015611d105750600160008054906101000a900460ff1660ff16105b80611d3d5750611d1f30613a97565b158015611d3c5750600160008054906101000a900460ff1660ff16145b5b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390615bfc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611db9576001600060016101000a81548160ff0219169083151502179055505b611dcd67e0a1587b9fff733460c01b6107aa565b611de16799f49c2236f581d560c01b6107aa565b611df56713255a13306bce2760c01b6107aa565b611e09679103bdf53b9e3db060c01b6107aa565b611e138383613aba565b8015611e6c5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611e639190615c57565b60405180910390a15b505050565b611e8567a987bf12f6bf98ab60c01b6107aa565b611e99671fbaaa4dbb3f884d60c01b6107aa565b611ead67e797a3f7fa46660c60c01b6107aa565b611eb56129c0565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611eee9190614b09565b6000604051808303818588803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b5050505050565b611f3667fbabf181d33082b660c01b6107aa565b611f4a67bee35484a90cfd2660c01b6107aa565b611f5e673ceb9bb2daab856d60c01b6107aa565b611f726791fab911752e5b5c60c01b6107aa565b611f7a613362565b611f8e672877b8446bdb5f0060c01b6107aa565b611fa2676c6fc7cbb8b3b97860c01b6107aa565b611fb667eb87ca9da684e3db60c01b6107aa565b611fca673d9d17fec85dda7860c01b6107aa565b611fde675017b987e5f4e1e060c01b6107aa565b611fe66129c0565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401612020929190615c81565b600060405180830381600087803b15801561203a57600080fd5b505af115801561204e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90615ad8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612123613481565b73ffffffffffffffffffffffffffffffffffffffff1614612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090615b6a565b60405180910390fd5b612182826134d8565b61218e82826001613533565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990615d1c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61225f67b4c2b632b250bc6360c01b6107aa565b61227367768e02f4b4fe93d060c01b6107aa565b61228767bcb43f0f61fb5a1260c01b6107aa565b61229b6705112cc091d04b2260c01b6107aa565b6122a3612d3b565b6122b7677b6146229717de8560c01b6107aa565b6122cb6732bce9776427685f60c01b6107aa565b6122df675c4d3c86a9602c6f60c01b6107aa565b6122f3670877748d77ec420260c01b6107aa565b6123076732ccb44361bec49260c01b6107aa565b61231081613bfc565b50565b612327676bacc25ce52307dd60c01b6107aa565b61233b67bee35484a90cfd2660c01b6107aa565b61234f673ceb9bb2daab856d60c01b6107aa565b6123636791fab911752e5b5c60c01b6107aa565b61236b613362565b61237f672877b8446bdb5f0060c01b6107aa565b61239367edec01844939018360c01b6107aa565b6123a7672d1676c1874371c960c01b6107aa565b6123bb6767895a735b76188060c01b6107aa565b6123cf6762377381d2b1f71460c01b6107aa565b6123d881613dba565b50565b60006123f167a69e23ef0cf0d80560c01b612d2d565b6124056789508a17c1e5baf860c01b612d2d565b61241967f0e90fa9dac9b5a260c01b612d2d565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b815260040161245b959493929190615d69565b6020604051808303816000875af115801561247a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249e9190615dcc565b9050949350505050565b60006124be678cc395c88e3ae24060c01b612d2d565b6124d2670e6cd08ae62d699160c01b612d2d565b6124e6671a6d203d14bbeb3560c01b612d2d565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612528959493929190615d69565b6020604051808303816000875af192505050801561256457506040513d601f19601f820116820180604052508101906125619190615dcc565b60015b61269c573d8060008114612594576040519150601f19603f3d011682016040523d82523d6000602084013e612599565b606091505b506125ae6763fa3d4afb8cd55b60c01b612d2d565b6125c267c78e77a5e38dc67760c01b612d2d565b6000815190506125dc67a2319ac582c5f8b960c01b612d2d565b6125f0679d791f94f379b3d460c01b612d2d565b600181036126705761260c674b6df8afb2c0610f60c01b612d2d565b612620671241dc8732fa093a60c01b612d2d565b600160f81b826000815181106126395761263861573d565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506126c9565b61268467fb87cb9c02294f9f60c01b612d2d565b6126986773311759eab4f85760c01b612d2d565b8082fd5b6126b0672f68b0ad8fd39c0a60c01b612d2d565b6126c467ba867e4ef348d1a360c01b612d2d565b809150505b949350505050565b6126e5677fc8140b5d255eea60c01b613f78565b60008060019054906101000a900460ff161590508080156127165750600160008054906101000a900460ff1660ff16105b80612743575061272530613a97565b1580156127425750600160008054906101000a900460ff1660ff16145b5b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990615bfc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156127bf576001600060016101000a81548160ff0219169083151502179055505b6127d367e2039407864bfb2960c01b613f78565b6127e767cbec76833205b45960c01b613f78565b6127fb67952b440c3a5aa4f660c01b613f78565b61280f670d4db254ae51781f60c01b613f78565b612823677db60b2d0faf4ea560c01b613f78565b61282e836000613aba565b80156128875760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161287e9190615c57565b60405180910390a15b505050565b6128a0675a98b12456966aba60c01b6107aa565b6128b467bee35484a90cfd2660c01b6107aa565b6128c8673ceb9bb2daab856d60c01b6107aa565b6128dc6791fab911752e5b5c60c01b6107aa565b6128e4613362565b6128f8672877b8446bdb5f0060c01b6107aa565b61290c67915d8b16ac69ed9860c01b6107aa565b612920671f5e91ee5a02596360c01b6107aa565b612934674b8e9096393c06f860c01b6107aa565b61294867301fc09d047c18d960c01b6107aa565b61295181613f7b565b50565b600061296a67e6997cbe175ef33460c01b6107aa565b61297e677a25fccec1173dd960c01b6107aa565b61299267431301e0e2e31e9060c01b6107aa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60006129d667f561f09cfc8827bd60c01b6107aa565b6129ea673350b6d208da79ee60c01b6107aa565b6129fe671896327d0b3f375a60c01b6107aa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612a3a67e2dda3667fd3757160c01b6107aa565b612a4e67526a718f37dbef7960c01b6107aa565b612a6267bc0095b6ec842fe060c01b6107aa565b612a766765a7b825dc91e38260c01b6107aa565b612a7e61311b565b612a9267e65dfa654e10de0360c01b6107aa565b612aa667aeaf6d5fe58842a960c01b6107aa565b612aba67370ad7169464cc0060c01b6107aa565b612ace6739a00ff772ffbf9060c01b6107aa565b612ae26792e03ae1c25d108960c01b6107aa565b612b31848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061323e565b50505050565b6000612b4d67f6036d4dbbf1553b60c01b612d1c565b612b6167e574cfd0134a53a360c01b612d1c565b612b7567481cad8a93626dbc60c01b612d1c565b63bc197c8160e01b905098975050505050505050565b6000612ba1673908573a227c011760c01b6107aa565b612bb567f95a3d25f4a4d56660c01b6107aa565b612bc96701732dbf20a7ffe360c01b6107aa565b612bd16129c0565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c099190614b09565b602060405180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a9190615e0e565b905090565b612c5761454b565b612c6b670d3661d4eaad386e60c01b613f78565b612c7f67dd44bb398e429d1660c01b613f78565b612c93675b3ecf54e60c995660c01b613f78565b612c9b61454b565b612caf6706ba37708b59038260c01b613f78565b612cc3672f08555e9b207b0660c01b613f78565b8091505090565b6000612ce067d55e6083e458695760c01b612d1c565b612cf467229756682a8526f660c01b612d1c565b612d08672d0f5a7f66d6c2a060c01b612d1c565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612d4f67216671dc6f7d651060c01b6107aa565b612d6367fc696b44f549a3bd60c01b6107aa565b612d77677d2f775bb38d794b60c01b6107aa565b612d8b672c1b7774324d16e460c01b6107aa565b612d9433611973565b8015612db05750612daf679d6b1a88bd04a29560c01b6141f9565b5b80612e1e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612e015750612e0067c1169fb68056496660c01b6141f9565b5b8015612e1d5750612e1c67290c2b81e499218360c01b6141f9565b5b5b80612e4a5750612e2d336109b0565b8015612e495750612e486777d0513cc85b13d160c01b6141f9565b5b5b612e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8090615ead565b60405180910390fd5b612e9d67023020f196fe710560c01b6107aa565b565b612eb367595c0e9f3251c28760c01b61347e565b612ec7676c9e8facf275455460c01b61347e565b612edb675fd1ba867bad8d9060c01b61347e565b612eef675d4405176a4c718660c01b61347e565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5490615f19565b60405180910390fd5b612f71678d884950e2a04aa760c01b61347e565b612f85672dca0c18590376fc60c01b61347e565b612f9967a4f7a20d65860e4d60c01b61347e565b612fad675167170fc48a61af60c01b61347e565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303090615f85565b60405180910390fd5b61304d67d711364ae0826ec060c01b61347e565b613061670a57bd871732b8ad60c01b61347e565b613075675d1d32267273ab9260c01b61347e565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da816040516130a49190614b09565b60405180910390a16130c067dcc232605f03b59860c01b61347e565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61312f6731b64f8837124c3160c01b6107aa565b61314367648db564106906a760c01b6107aa565b61315767c4dbbfd60bd1214960c01b6107aa565b61316b6701512b58157c381b60c01b6107aa565b6131736129c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156131bd57506131bc6747f66328b063331a60c01b6141f9565b5b806131e957506131cc33611973565b80156131e857506131e767e429b1ab88ceb31060c01b6141f9565b5b5b613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f90616017565b60405180910390fd5b61323c6762f06635bf7b4acd60c01b6107aa565b565b61325267bdfd46f0589b81c760c01b6107aa565b61326667b0457063cebd82a360c01b6107aa565b61327a675b626d0fcf3aa6ce60c01b6107aa565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516132a391906155a5565b60006040518083038185875af1925050503d80600081146132e0576040519150601f19603f3d011682016040523d82523d6000602084013e6132e5565b606091505b50915091506132fe672fb56cccf4f3b66560c01b6107aa565b6133126747166df0733c52e860c01b6107aa565b816133475761332b6719461c9227bd654a60c01b6107aa565b61333f6767b989a4f1f2a8f560c01b6107aa565b805160208201fd5b61335b67c859f4ceb5b7418760c01b6107aa565b5050505050565b61337667851edf0db3fe6a8060c01b6107aa565b61338a67765412b7902e3abf60c01b6107aa565b61339e67151d6c3106b9e49760c01b6107aa565b6133b2671b070d07d4380e9a60c01b6107aa565b6133bb33611973565b80156133d757506133d667d5ef82e5a5d379e060c01b6141f9565b5b8061342957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156134285750613427670cc2ae0862027a8c60c01b6141f9565b5b5b613468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345f90616083565b60405180910390fd5b61347c67362a52eb7781e15260c01b6107aa565b565b50565b60006134af7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614204565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6134ec675b243153b1324c8660c01b6107aa565b61350067703050f3f8cbae0160c01b6107aa565b61351467096f3ba87c8df4a960c01b6107aa565b61352867360d12c388c6eb2e60c01b6107aa565b613530613362565b50565b61355f7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b61420e565b60000160009054906101000a900460ff16156135835761357e83614218565b61369c565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156135eb57506040513d601f19601f820116820180604052508101906135e891906160b8565b60015b61362a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362190616157565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461368f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613686906161e9565b60405180910390fd5b5061369b8383836142d1565b5b505050565b50565b6136b867e67927338dfde90a60c01b6136a1565b6136cc670e51b57b7e9b4da560c01b6136a1565b6136e067e3f66e826ec687ff60c01b6136a1565b6136f46792d1df458e7acb7960c01b6136a1565b6136fc6129c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613769576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137609061627b565b60405180910390fd5b61377d67f59af56761c9812d60c01b6136a1565b565b60006137956739791b7bf1ba96b460c01b613f78565b6137a9677d14df618b69459060c01b613f78565b6137bd67a2c39ce327bfe21660c01b613f78565b6137d1673e608acec34f245360c01b613f78565b61383c60405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff168152506142fd565b905092915050565b61385867f347b6eb768867bd60c01b6107aa565b61386c67e4b8fad4d2d1902a60c01b6107aa565b6138806722ce8514c24b563d60c01b6107aa565b613894676bd35fd711427f6d60c01b6107aa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff16809291906138c3906162b3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461393f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393690616333565b60405180910390fd5b613953675143066244fa845f60c01b6107aa565b50565b61396a67cc5c47196db5bd6160c01b6136a1565b61397e678b55e749b3c352ab60c01b6136a1565b61399267e6442311764077fa60c01b6136a1565b60008114613a7f576139ae671589e0478f7a186060c01b6136a1565b6139c267d37e8b3807985e7360c01b6136a1565b6139d667c2c62d2bb50a980360c01b6136a1565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051613a1e90616379565b600060405180830381858888f193505050503d8060008114613a5c576040519150601f19603f3d011682016040523d82523d6000602084013e613a61565b606091505b50509050613a796714643eaa19656f6660c01b6136a1565b50613a94565b613a9367cc382f158ab6697a60c01b6136a1565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613ace6703748e24ba0bf9ec60c01b6107aa565b613ae2670bc8db960be8c07860c01b6107aa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613b3767019acf8eca98742f60c01b6107aa565b613b4b67ffb0ee9b4a9774fe60c01b6107aa565b613b5481613bfc565b613b68675b78c5bf4202c90360c01b6107aa565b613b7c6725b6d74483d24a8260c01b6107aa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613c106717c7d6a68a08773960c01b61347e565b613c2467cc8de6b882acb1a360c01b61347e565b613c38671ec2242cb4213daf60c01b61347e565b613c4c67e7bfe4742339224760c01b61347e565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd0906163da565b60405180910390fd5b613ced676270d7427db14f5b60c01b61347e565b613d016704aa357520b4416d60c01b61347e565b613d15672b9382deb815da6060c01b61347e565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613d449190614b09565b60405180910390a1613d6067c36c72a8ecc3a90660c01b61347e565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613dce67c36ba9a4464b6ea960c01b612d2a565b613de267dbc59bf60721ec3760c01b612d2a565b613df667a9b899a25d7f84f360c01b612d2a565b613e0a676ccf2b04ef43fe2c60c01b612d2a565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8d90616446565b60405180910390fd5b613eaa677f234f21a7a7167460c01b612d2a565b613ebe675dad748d723fc1a560c01b612d2a565b613ed267bcc423d1b918455e60c01b612d2a565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613f019190614b09565b60405180910390a1613f1d67ea5e8a43da197a0d60c01b612d2a565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b50565b613f8f67473271421f468fd260c01b612d2a565b613fa36792976a0e8d69a1f860c01b612d2a565b613fb76722fdc4cd5a73662060c01b612d2a565b613fcb677f1705d0822221e360c01b612d2a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361403a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614031906164d8565b60405180910390fd5b61404e67d29ec12c81e5975160c01b612d2a565b614062675ce58ff31b29be9c60c01b612d2a565b61407667e300c4231196178660c01b612d2a565b61408a6756d066aad6d03b2860c01b612d2a565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410e90616544565b60405180910390fd5b61412b67ceace18cb99efb4860c01b612d2a565b61413f67b298b03df19232ce60c01b612d2a565b6141536771c3a697a02cf77360c01b612d2a565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969816040516141829190614b09565b60405180910390a161419e673094a602565cca5360c01b612d2a565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b61422181613a97565b614260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614257906165d6565b60405180910390fd5b8061428d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614204565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6142da83614381565b6000825111806142e75750805b156142f8576142f683836143d0565b505b505050565b60006143136717718d3268584e5860c01b6143fd565b6143276719e6416798285bdf60c01b6143fd565b61433b67a626d76b40db563f60c01b6143fd565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b61438a81614218565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606143f583836040518060600160405280602781526020016166c960279139614400565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161442a91906155a5565b600060405180830381855af49150503d8060008114614465576040519150601f19603f3d011682016040523d82523d6000602084013e61446a565b606091505b509150915061447b86838387614486565b925050509392505050565b606083156144e85760008351036144e0576144a085613a97565b6144df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144d690616642565b60405180910390fd5b5b8290506144f3565b6144f283836144fb565b5b949350505050565b60008251111561450e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454291906166a6565b60405180910390fd5b6040518060800160405280600490602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145ac82614581565b9050919050565b6145bc816145a1565b81146145c757600080fd5b50565b6000813590506145d9816145b3565b92915050565b6000819050919050565b6145f2816145df565b81146145fd57600080fd5b50565b60008135905061460f816145e9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261463a57614639614615565b5b8235905067ffffffffffffffff8111156146575761465661461a565b5b6020830191508360018202830111156146735761467261461f565b5b9250929050565b60008060008060008060008060c0898b03121561469a57614699614577565b5b60006146a88b828c016145ca565b98505060206146b98b828c016145ca565b97505060406146ca8b828c016145ca565b96505060606146db8b828c01614600565b955050608089013567ffffffffffffffff8111156146fc576146fb61457c565b5b6147088b828c01614624565b945094505060a089013567ffffffffffffffff81111561472b5761472a61457c565b5b6147378b828c01614624565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61477e81614749565b811461478957600080fd5b50565b60008135905061479b81614775565b92915050565b6000602082840312156147b7576147b6614577565b5b60006147c58482850161478c565b91505092915050565b60008115159050919050565b6147e3816147ce565b82525050565b60006020820190506147fe60008301846147da565b92915050565b60006020828403121561481a57614819614577565b5b6000614828848285016145ca565b91505092915050565b60008060008060006080868803121561484d5761484c614577565b5b600061485b888289016145ca565b955050602061486c888289016145ca565b945050604061487d88828901614600565b935050606086013567ffffffffffffffff81111561489e5761489d61457c565b5b6148aa88828901614624565b92509250509295509295909350565b6148c281614749565b82525050565b60006020820190506148dd60008301846148b9565b92915050565b6000819050919050565b6148f6816148e3565b811461490157600080fd5b50565b600081359050614913816148ed565b92915050565b614922816147ce565b811461492d57600080fd5b50565b60008135905061493f81614919565b92915050565b60008060008060006080868803121561496157614960614577565b5b600061496f888289016145ca565b955050602061498088828901614904565b945050604086013567ffffffffffffffff8111156149a1576149a061457c565b5b6149ad88828901614624565b935093505060606149c088828901614930565b9150509295509295909350565b60008083601f8401126149e3576149e2614615565b5b8235905067ffffffffffffffff811115614a00576149ff61461a565b5b602083019150836020820283011115614a1c57614a1b61461f565b5b9250929050565b60008083601f840112614a3957614a38614615565b5b8235905067ffffffffffffffff811115614a5657614a5561461a565b5b602083019150836020820283011115614a7257614a7161461f565b5b9250929050565b60008060008060408587031215614a9357614a92614577565b5b600085013567ffffffffffffffff811115614ab157614ab061457c565b5b614abd878288016149cd565b9450945050602085013567ffffffffffffffff811115614ae057614adf61457c565b5b614aec87828801614a23565b925092505092959194509250565b614b03816145a1565b82525050565b6000602082019050614b1e6000830184614afa565b92915050565b600080fd5b60006101608284031215614b4057614b3f614b24565b5b81905092915050565b600080600060608486031215614b6257614b61614577565b5b600084013567ffffffffffffffff811115614b8057614b7f61457c565b5b614b8c86828701614b29565b9350506020614b9d86828701614904565b9250506040614bae86828701614600565b9150509250925092565b614bc1816145df565b82525050565b6000602082019050614bdc6000830184614bb8565b92915050565b6000614bed826145a1565b9050919050565b614bfd81614be2565b8114614c0857600080fd5b50565b600081359050614c1a81614bf4565b92915050565b60008060408385031215614c3757614c36614577565b5b6000614c4585828601614c0b565b9250506020614c56858286016145ca565b9150509250929050565b6000614c6b82614581565b9050919050565b614c7b81614c60565b8114614c8657600080fd5b50565b600081359050614c9881614c72565b92915050565b60008060408385031215614cb557614cb4614577565b5b6000614cc385828601614c89565b9250506020614cd485828601614600565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d2c82614ce3565b810181811067ffffffffffffffff82111715614d4b57614d4a614cf4565b5b80604052505050565b6000614d5e61456d565b9050614d6a8282614d23565b919050565b600067ffffffffffffffff821115614d8a57614d89614cf4565b5b614d9382614ce3565b9050602081019050919050565b82818337600083830152505050565b6000614dc2614dbd84614d6f565b614d54565b905082815260208101848484011115614dde57614ddd614cde565b5b614de9848285614da0565b509392505050565b600082601f830112614e0657614e05614615565b5b8135614e16848260208601614daf565b91505092915050565b60008060408385031215614e3657614e35614577565b5b6000614e44858286016145ca565b925050602083013567ffffffffffffffff811115614e6557614e6461457c565b5b614e7185828601614df1565b9150509250929050565b614e84816148e3565b82525050565b6000602082019050614e9f6000830184614e7b565b92915050565b60008060008060608587031215614ebf57614ebe614577565b5b6000614ecd878288016145ca565b9450506020614ede87828801614904565b935050604085013567ffffffffffffffff811115614eff57614efe61457c565b5b614f0b87828801614624565b925092505092959194509250565b600067ffffffffffffffff821115614f3457614f33614cf4565b5b602082029050919050565b6000614f52614f4d84614f19565b614d54565b90508060208402830185811115614f6c57614f6b61461f565b5b835b81811015614f955780614f818882614600565b845260208401935050602081019050614f6e565b5050509392505050565b600082601f830112614fb457614fb3614615565b5b6004614fc1848285614f3f565b91505092915050565b60008060a08385031215614fe157614fe0614577565b5b6000614fef85828601614c0b565b925050602061500085828601614f9f565b9150509250929050565b6000819050919050565b600061502f61502a61502584614581565b61500a565b614581565b9050919050565b600061504182615014565b9050919050565b600061505382615036565b9050919050565b61506381615048565b82525050565b600060208201905061507e600083018461505a565b92915050565b6000806000806060858703121561509e5761509d614577565b5b60006150ac878288016145ca565b94505060206150bd87828801614600565b935050604085013567ffffffffffffffff8111156150de576150dd61457c565b5b6150ea87828801614624565b925092505092959194509250565b60008083601f84011261510e5761510d614615565b5b8235905067ffffffffffffffff81111561512b5761512a61461a565b5b6020830191508360208202830111156151475761514661461f565b5b9250929050565b60008060008060008060008060a0898b03121561516e5761516d614577565b5b600061517c8b828c016145ca565b985050602061518d8b828c016145ca565b975050604089013567ffffffffffffffff8111156151ae576151ad61457c565b5b6151ba8b828c016150f8565b9650965050606089013567ffffffffffffffff8111156151dd576151dc61457c565b5b6151e98b828c016150f8565b9450945050608089013567ffffffffffffffff81111561520c5761520b61457c565b5b6152188b828c01614624565b92509250509295985092959890939650565b600060049050919050565b600081905092915050565b6000819050919050565b615253816145df565b82525050565b6000615265838361524a565b60208301905092915050565b6000602082019050919050565b6152878161522a565b6152918184615235565b925061529c82615240565b8060005b838110156152cd5781516152b48782615259565b96506152bf83615271565b9250506001810190506152a0565b505050505050565b60006080820190506152ea600083018461527e565b92915050565b60008060008060008060a0878903121561530d5761530c614577565b5b600061531b89828a016145ca565b965050602061532c89828a016145ca565b955050604061533d89828a01614600565b945050606061534e89828a01614600565b935050608087013567ffffffffffffffff81111561536f5761536e61457c565b5b61537b89828a01614624565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153c4826145df565b91506153cf836145df565b92508282039050818111156153e7576153e661538a565b5b92915050565b600080fd5b600080fd5b6000808585111561540b5761540a6153ed565b5b8386111561541c5761541b6153f2565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006154568383615432565b8261546181356148e3565b925060208210156154a15761549c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261543d565b831692505b505092915050565b6000806000606084860312156154c2576154c1614577565b5b60006154d086828701614c89565b935050602084013567ffffffffffffffff8111156154f1576154f061457c565b5b6154fd86828701614df1565b925050604084013567ffffffffffffffff81111561551e5761551d61457c565b5b61552a86828701614df1565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561556857808201518184015260208101905061554d565b60008484015250505050565b600061557f82615534565b615589818561553f565b935061559981856020860161554a565b80840191505092915050565b60006155b18284615574565b915081905092915050565b600082825260208201905092915050565b60006155d882615534565b6155e281856155bc565b93506155f281856020860161554a565b6155fb81614ce3565b840191505092915050565b6000602082019050818103600083015261562081846155cd565b905092915050565b600060408201905061563d6000830185614e7b565b818103602083015261564f81846155cd565b90509392505050565b60008151905061566781614775565b92915050565b60006020828403121561568357615682614577565b5b600061569184828501615658565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615707603a8361569a565b9150615712826156ab565b604082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006157c8602d8361569a565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b600060ff82169050919050565b615814816157fe565b82525050565b600060808201905061582f6000830187614e7b565b61583c602083018661580b565b6158496040830185614e7b565b6158566060830184614e7b565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006158bb60338361569a565b91506158c68261585f565b604082019050919050565b600060208201905081810360008301526158ea816158ae565b9050919050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261591d5761591c6158f1565b5b80840192508235915067ffffffffffffffff82111561593f5761593e6158f6565b5b60208301925060018202360383131561595b5761595a6158fb565b5b509250929050565b600061596e826145df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036159a05761599f61538a565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000615a0760338361569a565b9150615a12826159ab565b604082019050919050565b60006020820190508181036000830152615a36816159fa565b9050919050565b6000604082019050615a526000830185614afa565b615a5f6020830184614afa565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000615ac2602c8361569a565b9150615acd82615a66565b604082019050919050565b60006020820190508181036000830152615af181615ab5565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615b54602c8361569a565b9150615b5f82615af8565b604082019050919050565b60006020820190508181036000830152615b8381615b47565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615be6602e8361569a565b9150615bf182615b8a565b604082019050919050565b60006020820190508181036000830152615c1581615bd9565b9050919050565b6000819050919050565b6000615c41615c3c615c3784615c1c565b61500a565b6157fe565b9050919050565b615c5181615c26565b82525050565b6000602082019050615c6c6000830184615c48565b92915050565b615c7b81614c60565b82525050565b6000604082019050615c966000830185615c72565b615ca36020830184614bb8565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615d0660388361569a565b9150615d1182615caa565b604082019050919050565b60006020820190508181036000830152615d3581615cf9565b9050919050565b6000615d4883856155bc565b9350615d55838584614da0565b615d5e83614ce3565b840190509392505050565b6000608082019050615d7e6000830188614afa565b615d8b6020830187614e7b565b8181036040830152615d9e818587615d3c565b9050615dad60608301846147da565b9695505050505050565b600081519050615dc681614919565b92915050565b600060208284031215615de257615de1614577565b5b6000615df084828501615db7565b91505092915050565b600081519050615e08816145e9565b92915050565b600060208284031215615e2457615e23614577565b5b6000615e3284828501615df9565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615e9760288361569a565b9150615ea282615e3b565b604082019050919050565b60006020820190508181036000830152615ec681615e8a565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615f03601a8361569a565b9150615f0e82615ecd565b602082019050919050565b60006020820190508181036000830152615f3281615ef6565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615f6f601b8361569a565b9150615f7a82615f39565b602082019050919050565b60006020820190508181036000830152615f9e81615f62565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b600061600160298361569a565b915061600c82615fa5565b604082019050919050565b6000602082019050818103600083015261603081615ff4565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061606d601c8361569a565b915061607882616037565b602082019050919050565b6000602082019050818103600083015261609c81616060565b9050919050565b6000815190506160b2816148ed565b92915050565b6000602082840312156160ce576160cd614577565b5b60006160dc848285016160a3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000616141602e8361569a565b915061614c826160e5565b604082019050919050565b6000602082019050818103600083015261617081616134565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006161d360298361569a565b91506161de82616177565b604082019050919050565b60006020820190508181036000830152616202816161c6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061626560248361569a565b915061627082616209565b604082019050919050565b6000602082019050818103600083015261629481616258565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006162be8261629b565b91506bffffffffffffffffffffffff82036162dc576162db61538a565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061631d601f8361569a565b9150616328826162e7565b602082019050919050565b6000602082019050818103600083015261634c81616310565b9050919050565b50565b600061636360008361553f565b915061636e82616353565b600082019050919050565b600061638482616356565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006163c460188361569a565b91506163cf8261638e565b602082019050919050565b600060208201905081810360008301526163f3816163b7565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b600061643060208361569a565b915061643b826163fa565b602082019050919050565b6000602082019050818103600083015261645f81616423565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006164c260288361569a565b91506164cd82616466565b604082019050919050565b600060208201905081810360008301526164f1816164b5565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061652e601c8361569a565b9150616539826164f8565b602082019050919050565b6000602082019050818103600083015261655d81616521565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006165c0602d8361569a565b91506165cb82616564565b604082019050919050565b600060208201905081810360008301526165ef816165b3565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061662c601d8361569a565b9150616637826165f6565b602082019050919050565b6000602082019050818103600083015261665b8161661f565b9050919050565b600081519050919050565b600061667882616662565b616682818561569a565b935061669281856020860161554a565b61669b81614ce3565b840191505092915050565b600060208201905081810360008301526166c0818461666d565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ede8abd2a1c106e8ffc26becb70091181ff94e55711fd3061792bb2f38ff4f8164736f6c63430008110033"; type BrokenBLSAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts index 87607851..a9b73634 100644 --- a/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts @@ -116,7 +116,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052604051610607380380610607833981810160405281019061002591906100e0565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009b82610070565b9050919050565b60006100ad82610090565b9050919050565b6100bd816100a2565b81146100c857600080fd5b50565b6000815190506100da816100b4565b92915050565b6000602082840312156100f6576100f561006b565b5b6000610104848285016100cb565b91505092915050565b6104eb8061011c6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a871cdd14610030575b600080fd5b61004a6004803603810190610045919061022a565b610060565b60405161005791906102a8565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b81526004016100bd9190610304565b6000604051808303818588803b1580156100d657600080fd5b505af11580156100ea573d6000803e3d6000fd5b505050505060008460c001358560a00135866080013561010a919061034e565b610114919061034e565b90506000818461012491906103d3565b90506000866101000135826101399190610404565b905086602001358114610181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017890610495565b60405180910390fd5b600093505050509392505050565b600080fd5b600080fd5b600080fd5b600061016082840312156101b5576101b4610199565b5b81905092915050565b6000819050919050565b6101d1816101be565b81146101dc57600080fd5b50565b6000813590506101ee816101c8565b92915050565b6000819050919050565b610207816101f4565b811461021257600080fd5b50565b600081359050610224816101fe565b92915050565b6000806000606084860312156102435761024261018f565b5b600084013567ffffffffffffffff81111561026157610260610194565b5b61026d8682870161019e565b935050602061027e868287016101df565b925050604061028f86828701610215565b9150509250925092565b6102a2816101f4565b82525050565b60006020820190506102bd6000830184610299565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102ee826102c3565b9050919050565b6102fe816102e3565b82525050565b600060208201905061031960008301846102f5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610359826101f4565b9150610364836101f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103995761039861031f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006103de826101f4565b91506103e9836101f4565b9250826103f9576103f86103a4565b5b828204905092915050565b600061040f826101f4565b915061041a836101f4565b92508282101561042d5761042c61031f565b5b828203905092915050565b600082825260208201905092915050565b7f5265766572742061667465722066697273742076616c69646174696f6e000000600082015250565b600061047f601d83610438565b915061048a82610449565b602082019050919050565b600060208201905081810360008301526104ae81610472565b905091905056fea264697066735822122099332b3f09d8268dca15aa7275cf4e661e4a287298292021e73dc2765563482264736f6c634300080c0033"; + "0x608060405260405161074a38038061074a83398181016040528101906100259190610117565b61003f67b1c42666877eec7660c01b61009f60201b60201c565b61005967d38130321fa1640f60c01b61009f60201b60201c565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610144565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d2826100a7565b9050919050565b60006100e4826100c7565b9050919050565b6100f4816100d9565b81146100ff57600080fd5b50565b600081519050610111816100eb565b92915050565b60006020828403121561012d5761012c6100a2565b5b600061013b84828501610102565b91505092915050565b6105f7806101536000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a871cdd14610030575b600080fd5b61004a60048036038101906100459190610358565b610060565b60405161005791906103d6565b60405180910390f35b600061007667766b89c4bda46e0660c01b6102ba565b61008a67165af625e9ab9f8360c01b6102ba565b61009e67e87db5b3282b05e360c01b6102ba565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b81526004016100f89190610432565b6000604051808303818588803b15801561011157600080fd5b505af1158015610125573d6000803e3d6000fd5b505050505061013e67766735cc849dc02a60c01b6102ba565b6101526774b141f33daca82060c01b6102ba565b60008460c001358560a00135866080013561016d919061047c565b610177919061047c565b905061018d677a562f86acfa254d60c01b6102ba565b6101a167a83c158591cbc12860c01b6102ba565b600081846101af91906104df565b90506101c5678d9784b41f5ac6ad60c01b6102ba565b6101d96743b2418eed2d64c760c01b6102ba565b6000866101000135826101ec9190610510565b905061020267490bba215357938060c01b6102ba565b61021667424d06d3cbb9a4f260c01b6102ba565b61022a6762b622659b9e30c460c01b6102ba565b86602001358114610270576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610267906105a1565b60405180910390fd5b610284673c6bbc86a340b29460c01b6102ba565b6102986772ae809e3c15500a60c01b6102ba565b6102ac67aa82c210619738a660c01b6102ba565b600093505050509392505050565b50565b600080fd5b600080fd5b600080fd5b600061016082840312156102e3576102e26102c7565b5b81905092915050565b6000819050919050565b6102ff816102ec565b811461030a57600080fd5b50565b60008135905061031c816102f6565b92915050565b6000819050919050565b61033581610322565b811461034057600080fd5b50565b6000813590506103528161032c565b92915050565b600080600060608486031215610371576103706102bd565b5b600084013567ffffffffffffffff81111561038f5761038e6102c2565b5b61039b868287016102cc565b93505060206103ac8682870161030d565b92505060406103bd86828701610343565b9150509250925092565b6103d081610322565b82525050565b60006020820190506103eb60008301846103c7565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061041c826103f1565b9050919050565b61042c81610411565b82525050565b60006020820190506104476000830184610423565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061048782610322565b915061049283610322565b92508282019050808211156104aa576104a961044d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006104ea82610322565b91506104f583610322565b925082610505576105046104b0565b5b828204905092915050565b600061051b82610322565b915061052683610322565b925082820390508181111561053e5761053d61044d565b5b92915050565b600082825260208201905092915050565b7f5265766572742061667465722066697273742076616c69646174696f6e000000600082015250565b600061058b601d83610544565b915061059682610555565b602082019050919050565b600060208201905081810360008301526105ba8161057e565b905091905056fea264697066735822122016f357c1ad0e6bfbd88d00fb986696c71c0ebdaeec09b236068c0fb89ab67ce664736f6c63430008110033"; type MaliciousAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts index 996ca765..b0837667 100644 --- a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts @@ -41,11 +41,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "owner", @@ -75,11 +70,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "owner", @@ -105,7 +95,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b5060405162004f5638038062004f5683398181016040528101906100349190610112565b80604051610041906100a1565b61004b919061014e565b604051809103906000f080158015610067573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610169565b6139fa806200155c83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100df826100b4565b9050919050565b6100ef816100d4565b81146100fa57600080fd5b50565b60008151905061010c816100e6565b92915050565b600060208284031215610128576101276100af565b5b6000610136848285016100fd565b91505092915050565b610148816100d4565b82525050565b6000602082019050610163600083018461013f565b92915050565b6080516113ca620001926000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206d09ac52964ac9cc5a488deefb74933cd9f8a3a5011361362292b85d7e998d1b64736f6c634300080c003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039fa380380620039fa83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516138706200018a60003960008181610af001526117ee015260008181610bac01528181610c3b01528181610e7401528181610f030152610fb301526138706000f3fe60806040526004361061014e5760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e01461047e578063b0d691fe146104a9578063b61d27f6146104d4578063c0c53b8b146104fd578063c399ec8814610526578063f23a6e611461055157610155565b80634d44560d1461038d5780634f1ef286146103b657806352d1902d146103d257806379cbc5fa146103fd5780637b103999146104285780638da5cb5b1461045357610155565b806320c13b0b1161010857806320c13b0b14610278578063245a7bfc146102b5578063249cb3fa146102e05780633659cfe61461031d5780633a871cdd146103465780634a58db191461038357610155565b806223de291461015a578063150b7a02146101835780631626ba7e146101c057806318dfb3c7146101fd5780631a5da6c8146102265780631b71bb6e1461024f57610155565b3661015557005b600080fd5b34801561016657600080fd5b50610181600480360381019061017c9190611f70565b61058e565b005b34801561018f57600080fd5b506101aa60048036038101906101a5919061203f565b6105d3565b6040516101b79190612102565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190612153565b6105e8565b6040516101f49190612102565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f919061225f565b6106cb565b005b34801561023257600080fd5b5061024d600480360381019061024891906122e0565b6107dd565b005b34801561025b57600080fd5b50610276600480360381019061027191906122e0565b6108f1565b005b34801561028457600080fd5b5061029f600480360381019061029a919061230d565b610a08565b6040516102ac9190612102565b60405180910390f35b3480156102c157600080fd5b506102ca610aee565b6040516102d7919061239d565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906123b8565b610b12565b6040516103149190612407565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906122e0565b610baa565b005b34801561035257600080fd5b5061036d60048036038101906103689190612447565b610d33565b60405161037a91906124c5565b60405180910390f35b61038b610d7d565b005b34801561039957600080fd5b506103b460048036038101906103af919061251e565b610df2565b005b6103d060048036038101906103cb919061269f565b610e72565b005b3480156103de57600080fd5b506103e7610faf565b6040516103f49190612407565b60405180910390f35b34801561040957600080fd5b50610412611068565b60405161041f919061239d565b60405180910390f35b34801561043457600080fd5b5061043d61108c565b60405161044a919061239d565b60405180910390f35b34801561045f57600080fd5b506104686110b5565b604051610475919061239d565b60405180910390f35b34801561048a57600080fd5b506104936110db565b6040516104a091906124c5565b60405180910390f35b3480156104b557600080fd5b506104be61110b565b6040516104cb919061275a565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612775565b611135565b005b34801561050957600080fd5b50610524600480360381019061051f9190612827565b611192565b005b34801561053257600080fd5b5061053b6112dc565b60405161054891906124c5565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061287a565b611364565b6040516105859190612102565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d156508787876040516105c193929190612914565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161064a9493929190612989565b602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190612a01565b61069c5763ffffffff60e01b6106c2565b6040516020016106ab90612a85565b604051602081830303815290604052805190602001205b90509392505050565b6106d361137a565b81819050848490501461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290612b1d565b60405180910390fd5b60005b848490508110156107d6576107c385858381811061073f5761073e612b3d565b5b905060200201602081019061075491906122e0565b600085858581811061076957610768612b3d565b5b905060200281019061077b9190612b7b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b80806107ce90612c0d565b91505061071e565b5050505050565b6107e56114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612cc8565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108a6929190612ce8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f96114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096090612d83565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516109bc929190612ce8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a6c959493929190612da3565b602060405180830381865afa158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190612a01565b610abe5763ffffffff60e01b610ae4565b604051602001610acd90612e38565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b2490612e99565b6040516020818303038152906040528051906020012084148015610b7357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ba057604051602001610b8790612efa565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c78611595565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613013565b60405180910390fd5b610cd7816115ec565b610d3081600067ffffffffffffffff811115610cf657610cf5612574565b5b6040519080825280601f01601f191660200182016040528015610d285781602001600182028036833780820191505090505b5060006115f7565b50565b6000610d3d611765565b610d4784846117dc565b90506000848060400190610d5b9190612b7b565b90501415610d6d57610d6c84611851565b5b610d76826118ff565b9392505050565b610d8561110b565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610dbe919061239d565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050505050565b610dfa6114cd565b610e0261110b565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610e3c929190613042565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f40611595565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613013565b60405180910390fd5b610f9f826115ec565b610fab828260016115f7565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906130dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61113d61137a565b61118c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b50505050565b60008060159054906101000a900460ff161590508080156111c557506001600060149054906101000a900460ff1660ff16105b806111f457506111d43061199b565b1580156111f357506001600060149054906101000a900460ff1660ff16145b5b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061316f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611271576001600060156101000a81548160ff0219169083151502179055505b61127d848460006119be565b80156112d65760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112cd91906131d7565b60405180910390a15b50505050565b60006112e661110b565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161131e919061239d565b602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613207565b905090565b600063f23a6e6160e01b90509695505050505050565b61138261110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140857506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906132a6565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114729190613340565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c657805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061155457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a906133a3565b60405180910390fd5b565b60006115c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46114cd565b50565b6116237f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b64565b60000160009054906101000a900460ff16156116475761164283611b6e565b611760565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116af57506040513d601f19601f820116820180604052508101906116ac91906133d8565b60015b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613477565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a90613509565b60405180910390fd5b5061175f838383611c27565b5b505050565b61176d61110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d19061359b565b60405180910390fd5b565b600061184960405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611c53565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611880906135d3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613654565b60405180910390fd5b50565b600081146119985760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161194f9061369a565b600060405180830381858888f193505050503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b778161199b565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613721565b60405180910390fd5b80611be37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3083611c9b565b600082511180611c3d5750805b15611c4e57611c4c8383611cea565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611ca481611b6e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d0f838360405180606001604052806027815260200161381460279139611d17565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d419190613340565b600060405180830381855af49150503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b5091509150611d9286838387611d9d565b925050509392505050565b60608315611e0057600083511415611df857611db88561199b565b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061378d565b60405180910390fd5b5b829050611e0b565b611e0a8383611e13565b5b949350505050565b600082511115611e265781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a91906137f1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ea282611e77565b9050919050565b611eb281611e97565b8114611ebd57600080fd5b50565b600081359050611ecf81611ea9565b92915050565b6000819050919050565b611ee881611ed5565b8114611ef357600080fd5b50565b600081359050611f0581611edf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f3057611f2f611f0b565b5b8235905067ffffffffffffffff811115611f4d57611f4c611f10565b5b602083019150836001820283011115611f6957611f68611f15565b5b9250929050565b60008060008060008060008060c0898b031215611f9057611f8f611e6d565b5b6000611f9e8b828c01611ec0565b9850506020611faf8b828c01611ec0565b9750506040611fc08b828c01611ec0565b9650506060611fd18b828c01611ef6565b955050608089013567ffffffffffffffff811115611ff257611ff1611e72565b5b611ffe8b828c01611f1a565b945094505060a089013567ffffffffffffffff81111561202157612020611e72565b5b61202d8b828c01611f1a565b92509250509295985092959890939650565b60008060008060006080868803121561205b5761205a611e6d565b5b600061206988828901611ec0565b955050602061207a88828901611ec0565b945050604061208b88828901611ef6565b935050606086013567ffffffffffffffff8111156120ac576120ab611e72565b5b6120b888828901611f1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120fc816120c7565b82525050565b600060208201905061211760008301846120f3565b92915050565b6000819050919050565b6121308161211d565b811461213b57600080fd5b50565b60008135905061214d81612127565b92915050565b60008060006040848603121561216c5761216b611e6d565b5b600061217a8682870161213e565b935050602084013567ffffffffffffffff81111561219b5761219a611e72565b5b6121a786828701611f1a565b92509250509250925092565b60008083601f8401126121c9576121c8611f0b565b5b8235905067ffffffffffffffff8111156121e6576121e5611f10565b5b60208301915083602082028301111561220257612201611f15565b5b9250929050565b60008083601f84011261221f5761221e611f0b565b5b8235905067ffffffffffffffff81111561223c5761223b611f10565b5b60208301915083602082028301111561225857612257611f15565b5b9250929050565b6000806000806040858703121561227957612278611e6d565b5b600085013567ffffffffffffffff81111561229757612296611e72565b5b6122a3878288016121b3565b9450945050602085013567ffffffffffffffff8111156122c6576122c5611e72565b5b6122d287828801612209565b925092505092959194509250565b6000602082840312156122f6576122f5611e6d565b5b600061230484828501611ec0565b91505092915050565b6000806000806040858703121561232757612326611e6d565b5b600085013567ffffffffffffffff81111561234557612344611e72565b5b61235187828801611f1a565b9450945050602085013567ffffffffffffffff81111561237457612373611e72565b5b61238087828801611f1a565b925092505092959194509250565b61239781611e97565b82525050565b60006020820190506123b2600083018461238e565b92915050565b600080604083850312156123cf576123ce611e6d565b5b60006123dd8582860161213e565b92505060206123ee85828601611ec0565b9150509250929050565b6124018161211d565b82525050565b600060208201905061241c60008301846123f8565b92915050565b600080fd5b6000610160828403121561243e5761243d612422565b5b81905092915050565b6000806000606084860312156124605761245f611e6d565b5b600084013567ffffffffffffffff81111561247e5761247d611e72565b5b61248a86828701612427565b935050602061249b8682870161213e565b92505060406124ac86828701611ef6565b9150509250925092565b6124bf81611ed5565b82525050565b60006020820190506124da60008301846124b6565b92915050565b60006124eb82611e77565b9050919050565b6124fb816124e0565b811461250657600080fd5b50565b600081359050612518816124f2565b92915050565b6000806040838503121561253557612534611e6d565b5b600061254385828601612509565b925050602061255485828601611ef6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125ac82612563565b810181811067ffffffffffffffff821117156125cb576125ca612574565b5b80604052505050565b60006125de611e63565b90506125ea82826125a3565b919050565b600067ffffffffffffffff82111561260a57612609612574565b5b61261382612563565b9050602081019050919050565b82818337600083830152505050565b600061264261263d846125ef565b6125d4565b90508281526020810184848401111561265e5761265d61255e565b5b612669848285612620565b509392505050565b600082601f83011261268657612685611f0b565b5b813561269684826020860161262f565b91505092915050565b600080604083850312156126b6576126b5611e6d565b5b60006126c485828601611ec0565b925050602083013567ffffffffffffffff8111156126e5576126e4611e72565b5b6126f185828601612671565b9150509250929050565b6000819050919050565b600061272061271b61271684611e77565b6126fb565b611e77565b9050919050565b600061273282612705565b9050919050565b600061274482612727565b9050919050565b61275481612739565b82525050565b600060208201905061276f600083018461274b565b92915050565b6000806000806060858703121561278f5761278e611e6d565b5b600061279d87828801611ec0565b94505060206127ae87828801611ef6565b935050604085013567ffffffffffffffff8111156127cf576127ce611e72565b5b6127db87828801611f1a565b925092505092959194509250565b60006127f482611e97565b9050919050565b612804816127e9565b811461280f57600080fd5b50565b600081359050612821816127fb565b92915050565b6000806000606084860312156128405761283f611e6d565b5b600061284e86828701612812565b935050602061285f86828701611ec0565b925050604061287086828701611ec0565b9150509250925092565b60008060008060008060a0878903121561289757612896611e6d565b5b60006128a589828a01611ec0565b96505060206128b689828a01611ec0565b95505060406128c789828a01611ef6565b94505060606128d889828a01611ef6565b935050608087013567ffffffffffffffff8111156128f9576128f8611e72565b5b61290589828a01611f1a565b92509250509295509295509295565b6000606082019050612929600083018661238e565b612936602083018561238e565b61294360408301846124b6565b949350505050565b600082825260208201905092915050565b6000612968838561294b565b9350612975838584612620565b61297e83612563565b840190509392505050565b600060608201905061299e600083018761238e565b6129ab60208301866123f8565b81810360408301526129be81848661295c565b905095945050505050565b60008115159050919050565b6129de816129c9565b81146129e957600080fd5b50565b6000815190506129fb816129d5565b92915050565b600060208284031215612a1757612a16611e6d565b5b6000612a25848285016129ec565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612a6f601f83612a2e565b9150612a7a82612a39565b601f82019050919050565b6000612a9082612a62565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612b07603383612a9a565b9150612b1282612aab565b604082019050919050565b60006020820190508181036000830152612b3681612afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b9857612b97612b6c565b5b80840192508235915067ffffffffffffffff821115612bba57612bb9612b71565b5b602083019250600182023603831315612bd657612bd5612b76565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1882611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4b57612c4a612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612cb2603183612a9a565b9150612cbd82612c56565b604082019050919050565b60006020820190508181036000830152612ce181612ca5565b9050919050565b6000604082019050612cfd600083018561238e565b612d0a602083018461238e565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612d6d603383612a9a565b9150612d7882612d11565b604082019050919050565b60006020820190508181036000830152612d9c81612d60565b9050919050565b6000606082019050612db8600083018861238e565b8181036020830152612dcb81868861295c565b90508181036040830152612de081848661295c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612e22601d83612a2e565b9150612e2d82612dec565b601d82019050919050565b6000612e4382612e15565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000612e83601583612a2e565b9150612e8e82612e4d565b601582019050919050565b6000612ea482612e76565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000612ee4601483612a2e565b9150612eef82612eae565b601482019050919050565b6000612f0582612ed7565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612f6b602c83612a9a565b9150612f7682612f0f565b604082019050919050565b60006020820190508181036000830152612f9a81612f5e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ffd602c83612a9a565b915061300882612fa1565b604082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b61303c816124e0565b82525050565b60006040820190506130576000830185613033565b61306460208301846124b6565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006130c7603883612a9a565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613159602e83612a9a565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b6000819050919050565b600060ff82169050919050565b60006131c16131bc6131b78461318f565b6126fb565b613199565b9050919050565b6131d1816131a6565b82525050565b60006020820190506131ec60008301846131c8565b92915050565b60008151905061320181611edf565b92915050565b60006020828403121561321d5761321c611e6d565b5b600061322b848285016131f2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613290602983612a9a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b83811115613309576000848401525b50505050565b600061331a826132c6565b61332481856132d1565b93506133348185602086016132dc565b80840191505092915050565b600061334c828461330f565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061338d601c83612a9a565b915061339882613357565b602082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b6000815190506133d281612127565b92915050565b6000602082840312156133ee576133ed611e6d565b5b60006133fc848285016133c3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613461602e83612a9a565b915061346c82613405565b604082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006134f3602983612a9a565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613585602483612a9a565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006135de826135bb565b91506bffffffffffffffffffffffff8214156135fd576135fc612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061363e601f83612a9a565b915061364982613608565b602082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b50565b60006136846000836132d1565b915061368f82613674565b600082019050919050565b60006136a582613677565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061370b602d83612a9a565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613777601d83612a9a565b915061378282613741565b602082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b600081519050919050565b60006137c3826137ad565b6137cd8185612a9a565b93506137dd8185602086016132dc565b6137e681612563565b840191505092915050565b6000602082019050818103600083015261380b81846137b8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dbbd5559e3326881dda71ce0f054137186932c3a13d23a194356cd589c120f5264736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b5060405162007d3738038062007d3783398181016040528101906200003791906200015d565b6200005367211d5373ce3892e060c01b620000e260201b60201c565b6200006f673e697256ffebbaf460c01b620000e260201b60201c565b806040516200007e90620000e5565b6200008a9190620001a0565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620001bd565b50565b61668480620016b383390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200012582620000f8565b9050919050565b620001378162000118565b81146200014357600080fd5b50565b60008151905062000157816200012c565b92915050565b600060208284031215620001765762000175620000f3565b5b6000620001868482850162000146565b91505092915050565b6200019a8162000118565b82525050565b6000602082019050620001b760008301846200018f565b92915050565b6080516114cc620001e76000396000818161014d01528181610222015261039601526114cc6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806308a6354e146200004b57806311464fbe14620000815780631230aea214620000a3575b600080fd5b62000069600480360381019062000063919062000595565b620000d9565b60405162000078919062000602565b60405180910390f35b6200008b62000220565b6040516200009a91906200068a565b60405180910390f35b620000c16004803603810190620000bb919062000595565b62000244565b604051620000d091906200068a565b60405180910390f35b6000620000f167073fcc77112858cf60c01b62000458565b6200010767c595bdb6d10c67ce60c01b62000458565b6200011d673daf0c0d6f4cf63d60c01b62000458565b620002178260001b6040518060200162000137906200049d565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000878760405160240162000181929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001d9929190620007a7565b604051602081830303815290604052604051602001620001fb9291906200081d565b604051602081830303815290604052805190602001206200045b565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006200025c6795c1970e0974433260c01b62000458565b62000272679257a02f04bd3fb960c01b62000458565b62000288670bf45b7f3f2ccddf60c01b62000458565b600062000297858585620000d9565b9050620002af67dfac05246ec77f0e60c01b62000458565b620002c56754cb4bd732eac11460c01b62000458565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620002f7672e1e5ff93037832860c01b62000458565b6200030d67b2ec239ada6390f060c01b62000458565b600081111562000364576200032d6774a7c25cbe5745f460c01b62000458565b620003436731b0bd524fc33ec060c01b62000458565b6200035967de4fb76a66f71f6960c01b62000458565b819250505062000451565b6200037a6727a767425c118ef760c01b62000458565b6200039067a6896923b5e307a760c01b62000458565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008787604051602401620003ca929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200041d906200049d565b6200042a929190620007a7565b8190604051809103906000f59050801580156200044b573d6000803e3d6000fd5b50925050505b9392505050565b50565b60006200046a83833062000472565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c51806200084683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004dd82620004b0565b9050919050565b6000620004f182620004d0565b9050919050565b6200050381620004e4565b81146200050f57600080fd5b50565b6000813590506200052381620004f8565b92915050565b6200053481620004d0565b81146200054057600080fd5b50565b600081359050620005548162000529565b92915050565b6000819050919050565b6200056f816200055a565b81146200057b57600080fd5b50565b6000813590506200058f8162000564565b92915050565b600080600060608486031215620005b157620005b0620004ab565b5b6000620005c18682870162000512565b9350506020620005d48682870162000543565b9250506040620005e7868287016200057e565b9150509250925092565b620005fc81620004d0565b82525050565b6000602082019050620006196000830184620005f1565b92915050565b6000819050919050565b60006200064a620006446200063e84620004b0565b6200061f565b620004b0565b9050919050565b60006200065e8262000629565b9050919050565b6000620006728262000651565b9050919050565b620006848162000665565b82525050565b6000602082019050620006a1600083018462000679565b92915050565b6000620006b48262000629565b9050919050565b6000620006c882620006a7565b9050919050565b620006da81620006bb565b82525050565b6000604082019050620006f76000830185620006cf565b620007066020830184620005f1565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007495780820151818401526020810190506200072c565b60008484015250505050565b6000601f19601f8301169050919050565b600062000773826200070d565b6200077f818562000718565b93506200079181856020860162000729565b6200079c8162000755565b840191505092915050565b6000604082019050620007be6000830185620005f1565b8181036020830152620007d2818462000766565b90509392505050565b600081905092915050565b6000620007f3826200070d565b620007ff8185620007db565b93506200081181856020860162000729565b80840191505092915050565b60006200082b8285620007e6565b9150620008398284620007e6565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200dc8a13cfb283f1ca62b4ebcb052a80c39f6aac51873cdf79e3078c548ec46b264736f6c6343000811003360c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620066843803806200668483398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea671993378f1b71ba6160c01b6200020b60201b60201c565b6200010667990704978fc4a92760c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a0516162ad620003d7600039600081816118e7015261354201526000818161199d01528181611a2b01528181611fef0152818161207d015261212d01526162ad6000f3fe6080604052600436106101ba5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f614610672578063bc197c811461069b578063c399ec88146106d8578063f23a6e611461070357610219565b8063a526d83b146105f3578063affed0e01461061c578063b0d691fe1461064757610219565b80637065cb48116100c65780637065cb481461052757806371404156146105505780638f0684301461057957806398ef1ed8146105b657610219565b80634d44560d146104b75780634f1ef286146104e057806352d1902d146104fc57610219565b80631b71bb6e116101595780633659cfe6116101335780633659cfe61461041e5780633a871cdd14610447578063485cc955146104845780634a58db19146104ad57610219565b80631b71bb6e1461038d578063245a7bfc146103b65780632f54bf6e146103e157610219565b8063150b7a0211610195578063150b7a02146102c157806316d43401146102fe578063173825d91461033b57806318dfb3c71461036457610219565b806223de291461021e57806301ffc9a7146102475780630c68ba211461028457610219565b36610219576101d367290bbd319612162360c01b610740565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561022a57600080fd5b50610245600480360381019061024091906143b9565b610743565b005b34801561025357600080fd5b5061026e600480360381019061026991906144e0565b610761565b60405161027b9190614528565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190614543565b610946565b6040516102b89190614528565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190614570565b6109d8565b6040516102f59190614607565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190614684565b610a28565b6040516103329190614528565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190614543565b611401565b005b34801561037057600080fd5b5061038b600480360381019061038691906147b8565b6114c9565b005b34801561039957600080fd5b506103b460048036038101906103af9190614543565b611707565b005b3480156103c257600080fd5b506103cb6118e5565b6040516103d89190614848565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614543565b611909565b6040516104159190614528565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614543565b61199b565b005b34801561045357600080fd5b5061046e60048036038101906104699190614888565b611b23565b60405161047b9190614906565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a6919061495f565b611c61565b005b6104b5611e08565b005b3480156104c357600080fd5b506104de60048036038101906104d991906149dd565b611eb9565b005b6104fa60048036038101906104f59190614b5e565b611fed565b005b34801561050857600080fd5b50610511612129565b60405161051e9190614bc9565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614543565b6121e2565b005b34801561055c57600080fd5b5061057760048036038101906105729190614543565b6122aa565b005b34801561058557600080fd5b506105a0600480360381019061059b9190614be4565b612372565b6040516105ad9190614528565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614be4565b61243f565b6040516105ea9190614528565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614543565b612668565b005b34801561062857600080fd5b50610631612730565b60405161063e9190614906565b60405180910390f35b34801561065357600080fd5b5061065c61279c565b6040516106699190614cb7565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614cd2565b612802565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190614d9c565b612913565b6040516106cf9190614607565b60405180910390f35b3480156106e457600080fd5b506106ed612967565b6040516106fa9190614906565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614e78565b612a2b565b6040516107379190614607565b60405180910390f35b50565b610757671278753381487ed660c01b612a7d565b5050505050505050565b600061077767f20d647ea02d480060c01b612a7d565b61078b67ffb589296d687db060c01b612a7d565b61079f6727ecf9b318901df560c01b612a7d565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561081c575061081b675d4be9b73183ad3f60c01b612a80565b5b806108bc57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561089f575061089e674cb5733a4ebd736b60c01b612a80565b5b80156108bb57506108ba67927753031b1e765d60c01b612a80565b5b5b8061093f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561093e575061093d66bc16169e90631c60c01b612a80565b5b5b9050919050565b600061095c679a530c869daa649060c01b612a8b565b610970677819779a5121f4ad60c01b612a8b565b61098467dcc814792f5595a060c01b612a8b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109ed6642558288c0c26a60c01b612a7d565b610a01670cd59c881166cff460c01b612a7d565b610a1567d8d160ce8c3ef4cc60c01b612a7d565b63150b7a0260e01b905095945050505050565b6000610a3e6777258f39a67c0acd60c01b612a8e565b610a5267c9d3460cf31b367060c01b612a8e565b610a6667301450deda14998860c01b612a8e565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a9667ec35fa0e327aba3360c01b612a8e565b610aaa6757c603851350fa0960c01b612a8e565b6060610ac067ed7102d9c731614b60c01b612a8e565b610ad467260c95324dc5522a60c01b612a8e565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b0c9190614f41565b908a8a905092610b1e93929190614f7f565b90610b299190614fd2565b149050610b4067adb0f8e971c6f00460c01b612a8e565b610b546775ac95bff94d832360c01b612a8e565b8015610da157610b6e67b7ce1fa3f7f6604d60c01b612a8e565b610b82679fc1490a6707ce8260c01b612a8e565b610b96679cbd4322f03dcb3060c01b612a8e565b6000610bac677c50636fd0d78e6e60c01b612a8e565b610bc067b6c96f6498872fdd60c01b612a8e565b6060610bd667d225012c278bc14960c01b612a8e565b888860009060208c8c9050610beb9190614f41565b92610bf893929190614f7f565b810190610c059190615031565b809650819350829450505050610c2567414eafbc10d5dfd460c01b612a8e565b610c39679735072f1875e8c560c01b612a8e565b60008503610d8557610c5567ece2f114e83cba5460c01b612a8e565b610c6967bb4b7709950fab6560c01b612a8e565b610c7d67e556fd7ed728116b60c01b612a8e565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610ca5919061512d565b6000604051808303816000865af19150503d8060008114610ce2576040519150601f19603f3d011682016040523d82523d6000602084013e610ce7565b606091505b5091509150610d00675bb7adbcacc27af760c01b612a8e565b610d1467925a11ac41b1a62f60c01b612a8e565b81610d6a57610d2d674b9b350a0c4e240d60c01b612a8e565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d61919061518e565b60405180910390fd5b610d7e67270a9300cfb5deb160c01b612a8e565b5050610d9a565b610d996719ddea40eb9c9d5e60c01b612a8e565b5b5050610e11565b610db5671617c5f7b544c15460c01b612a8e565b610dc967152cf4f885c3c7bd60c01b612a8e565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e25678968ba2400116cd160c01b612a8e565b610e3967d26f37fb13c4702060c01b612a8e565b808015610e565750610e5567e672c6829c01435e60c01b612a91565b5b80610e7d5750600083118015610e7c5750610e7b672f1034641526e8e560c01b612a91565b5b5b156110ed57610e966787b8bb2f9d833b2360c01b612a8e565b610eaa6748ed04b5790955de60c01b612a8e565b610ebe67c07d3098ed811b0e60c01b612a8e565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610ef99291906151b0565b602060405180830381865afa925050508015610f3357506040513d601f19601f82011682018060405250810190610f3091906151f5565b60015b610fba573d8060008114610f63576040519150601f19603f3d011682016040523d82523d6000602084013e610f68565b606091505b50610f7d672c516c89798db2e060c01b612a8e565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610fb1919061518e565b60405180910390fd5b610fce677a7dc9015ade993760c01b612a8e565b610fe2676bd30bd513db1c1260c01b612a8e565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614905061104267f77b76e97cdda63e60c01b612a8e565b61105667f2ac3b0c93d4d96060c01b612a8e565b6000851480156110635750825b801561106d575086155b156110a4576110866732203bac67e9a5c660c01b612a8e565b61109a67bacd05270bf834fa60c01b612a8e565b806000526001601ffd5b6110b867db508d98998fd4cb60c01b612a8e565b6110cc67bd809f1f7297a39860c01b612a8e565b6110e0671166c1324f0a4d4360c01b612a8e565b80955050505050506113f8565b61110167fb73a16ec6f828a360c01b612a8e565b61111567124b4f67fba3948f60c01b612a8e565b61112967a72081e2c67a966a60c01b612a8e565b61113d670ab810c1358d671760c01b612a8e565b60418787905014611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a906152a5565b60405180910390fd5b61119767c0b4b2b739bdbc3e60c01b612a8e565b6111ab670f81a533fa5be34e60c01b612a8e565b6111bf67657c1339b273a74660c01b612a8e565b600087876000906020926111d593929190614f7f565b906111e09190614fd2565b90506111f667dc3d3b49fc92cadb60c01b612a8e565b61120a6752ae34fa8263b21b60c01b612a8e565b6000888860209060409261122093929190614f7f565b9061122b9190614fd2565b905061124167301232fd22fb824c60c01b612a8e565b61125567f519c889a1cef68c60c01b612a8e565b60008989604081811061126b5761126a6152c5565b5b9050013560f81c60f81b60f81c905061128e679a20c64fb3f7324360c01b612a8e565b6112a2678a031af26ced764160c01b612a8e565b601b8160ff16141580156112ba5750601c8160ff1614155b15611336576112d367cd922db48d204f9b60c01b612a8e565b6112e767833a8605e20290ce60c01b612a8e565b6112fb67b3da6c39eac2834e60c01b612a8e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d90615366565b60405180910390fd5b61134a675514297355562d4860c01b612a8e565b61135e6757b333f889b6e2b360c01b612a8e565b611372676603fc4d7122128560c01b612a8e565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113ac94939291906153a2565b6020604051602081039080840390855afa1580156113ce573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6114156706cea3225e159afe60c01b610740565b61142967768e02f4b4fe93d060c01b610740565b61143d67bcb43f0f61fb5a1260c01b610740565b6114516705112cc091d04b2260c01b610740565b611459612a9c565b61146d677b6146229717de8560c01b610740565b611481671a91445bcd7d6a3660c01b610740565b61149567087786fe3118ce4560c01b610740565b6114a96712ac3ecdf13b356f60c01b610740565b6114bd676a822ec913ef224160c01b610740565b6114c681612c00565b50565b6114dd670b312c177376d2f160c01b610740565b6114f167526a718f37dbef7960c01b610740565b61150567bc0095b6ec842fe060c01b610740565b6115196765a7b825dc91e38260c01b610740565b611521612e7c565b61153567e65dfa654e10de0360c01b610740565b6115496738751a29e4bbac9a60c01b610740565b61155d6764a3e3565274624260c01b610740565b61157167e3532f2d278ffcc460c01b610740565b61158567b28c9cc66aedc63960c01b610740565b611599674c0d2e74d59320d660c01b610740565b8181905084849050146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890615459565b60405180910390fd5b6115f56733f49bcf3f677de260c01b610740565b61160967fda055a3194df47960c01b610740565b61161d670ca2693ca40a9c3d60c01b610740565b60005b848490508110156117005761163f67e45fe9f7a89384cd60c01b610740565b611653677885f77483c8c7a360c01b610740565b6116ed858583818110611669576116686152c5565b5b905060200201602081019061167e9190614543565b6000858585818110611693576116926152c5565b5b90506020028101906116a59190615488565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f9f565b80806116f8906154eb565b915050611620565b5050505050565b61171b67b0e8e7fc3aed8bf060c01b610740565b61172f671246157b9919312560c01b610740565b61174367cbfddca365f5dede60c01b610740565b61174b6130c3565b61175f67ab4f446b15a2b75360c01b610740565b61177367140f31a12b03a20160c01b610740565b61178767c2cd95be620e67ae60c01b610740565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed906155a5565b60405180910390fd5b61180a674b99dae5f525e91060c01b610740565b61181e67897f79a11a9b512360c01b610740565b61183267f01df9d5178d9e0460c01b610740565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118859291906155c5565b60405180910390a16118a16705fb80e775388d3f60c01b610740565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061191f6784c34e023fb786f860c01b6131df565b611933670d806432bac21d3b60c01b6131df565b611947679da5a6f8cf654dc360c01b6131df565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090615660565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611a686131e2565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906156f2565b60405180910390fd5b611ac781613239565b611b2081600067ffffffffffffffff811115611ae657611ae5614a33565b5b6040519080825280601f01601f191660200182016040528015611b185781602001600182028036833780820191505090505b506000613294565b50565b6000611b39674a0b745640aaacbe60c01b613402565b611b4d673643bc4d265e004d60c01b613402565b611b6167be21e9c3510eef0760c01b613402565b611b69613405565b611b7d670d9ae78f9ca6bca160c01b613402565b611b8784846134e0565b9050611b9d67bac743df019f783060c01b613402565b611bb1674633441562cbb38260c01b613402565b6000848060400190611bc39190615488565b905003611c1457611bde67b9f604ce3adf50f460c01b613402565b611bf26740dc8d2be550a2ae60c01b613402565b611c06678d7f5bf9351f5d3760c01b613402565b611c0f846135a5565b611c29565b611c2867493644fd2e2f359760c01b613402565b5b611c3d67f86dd1b6eddb849360c01b613402565b611c5167e338ec934ff31c9e60c01b613402565b611c5a826136b7565b9392505050565b611c75674de7345356ca025360c01b6137f8565b60008060019054906101000a900460ff16159050808015611ca65750600160008054906101000a900460ff1660ff16105b80611cd35750611cb5306137fb565b158015611cd25750600160008054906101000a900460ff1660ff16145b5b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990615784565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611d4f576001600060016101000a81548160ff0219169083151502179055505b611d636785289b9ca3fc044b60c01b6137f8565b611d77673f724fb686947df060c01b6137f8565b611d8b678b3e2c8d275977d860c01b6137f8565b611d9f678466bb50c83891b360c01b6137f8565b611daa83600061381e565b8015611e035760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611dfa91906157df565b60405180910390a15b505050565b611e1c67a987bf12f6bf98ab60c01b610740565b611e30671fbaaa4dbb3f884d60c01b610740565b611e4467e797a3f7fa46660c60c01b610740565b611e4c61279c565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e859190614848565b6000604051808303818588803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b5050505050565b611ecd67fbabf181d33082b660c01b610740565b611ee167bee35484a90cfd2660c01b610740565b611ef5673ceb9bb2daab856d60c01b610740565b611f096791fab911752e5b5c60c01b610740565b611f116130c3565b611f25672877b8446bdb5f0060c01b610740565b611f39676c6fc7cbb8b3b97860c01b610740565b611f4d67eb87ca9da684e3db60c01b610740565b611f61673d9d17fec85dda7860c01b610740565b611f75675017b987e5f4e1e060c01b610740565b611f7d61279c565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611fb7929190615809565b600060405180830381600087803b158015611fd157600080fd5b505af1158015611fe5573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160361207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290615660565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166120ba6131e2565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612107906156f2565b60405180910390fd5b61211982613239565b61212582826001613294565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b0906158a4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6121f667b4c2b632b250bc6360c01b610740565b61220a67768e02f4b4fe93d060c01b610740565b61221e67bcb43f0f61fb5a1260c01b610740565b6122326705112cc091d04b2260c01b610740565b61223a612a9c565b61224e677b6146229717de8560c01b610740565b6122626732bce9776427685f60c01b610740565b612276675c4d3c86a9602c6f60c01b610740565b61228a670877748d77ec420260c01b610740565b61229e6732ccb44361bec49260c01b610740565b6122a781613960565b50565b6122be676bacc25ce52307dd60c01b610740565b6122d267bee35484a90cfd2660c01b610740565b6122e6673ceb9bb2daab856d60c01b610740565b6122fa6791fab911752e5b5c60c01b610740565b6123026130c3565b612316672877b8446bdb5f0060c01b610740565b61232a67edec01844939018360c01b610740565b61233e672d1676c1874371c960c01b610740565b6123526767895a735b76188060c01b610740565b6123666762377381d2b1f71460c01b610740565b61236f81613b1e565b50565b600061238867a69e23ef0cf0d80560c01b612a8e565b61239c6789508a17c1e5baf860c01b612a8e565b6123b067f0e90fa9dac9b5a260c01b612a8e565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b81526004016123f29594939291906158f1565b6020604051808303816000875af1158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190615954565b9050949350505050565b6000612455678cc395c88e3ae24060c01b612a8e565b612469670e6cd08ae62d699160c01b612a8e565b61247d671a6d203d14bbeb3560c01b612a8e565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b81526004016124bf9594939291906158f1565b6020604051808303816000875af19250505080156124fb57506040513d601f19601f820116820180604052508101906124f89190615954565b60015b612633573d806000811461252b576040519150601f19603f3d011682016040523d82523d6000602084013e612530565b606091505b506125456763fa3d4afb8cd55b60c01b612a8e565b61255967c78e77a5e38dc67760c01b612a8e565b60008151905061257367a2319ac582c5f8b960c01b612a8e565b612587679d791f94f379b3d460c01b612a8e565b60018103612607576125a3674b6df8afb2c0610f60c01b612a8e565b6125b7671241dc8732fa093a60c01b612a8e565b600160f81b826000815181106125d0576125cf6152c5565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050612660565b61261b67fb87cb9c02294f9f60c01b612a8e565b61262f6773311759eab4f85760c01b612a8e565b8082fd5b612647672f68b0ad8fd39c0a60c01b612a8e565b61265b67ba867e4ef348d1a360c01b612a8e565b809150505b949350505050565b61267c675a98b12456966aba60c01b610740565b61269067bee35484a90cfd2660c01b610740565b6126a4673ceb9bb2daab856d60c01b610740565b6126b86791fab911752e5b5c60c01b610740565b6126c06130c3565b6126d4672877b8446bdb5f0060c01b610740565b6126e867915d8b16ac69ed9860c01b610740565b6126fc671f5e91ee5a02596360c01b610740565b612710674b8e9096393c06f860c01b610740565b61272467301fc09d047c18d960c01b610740565b61272d81613cdc565b50565b600061274667e6997cbe175ef33460c01b610740565b61275a677a25fccec1173dd960c01b610740565b61276e67431301e0e2e31e9060c01b610740565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60006127b267f561f09cfc8827bd60c01b610740565b6127c6673350b6d208da79ee60c01b610740565b6127da671896327d0b3f375a60c01b610740565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61281667e2dda3667fd3757160c01b610740565b61282a67526a718f37dbef7960c01b610740565b61283e67bc0095b6ec842fe060c01b610740565b6128526765a7b825dc91e38260c01b610740565b61285a612e7c565b61286e67e65dfa654e10de0360c01b610740565b61288267aeaf6d5fe58842a960c01b610740565b61289667370ad7169464cc0060c01b610740565b6128aa6739a00ff772ffbf9060c01b610740565b6128be6792e03ae1c25d108960c01b610740565b61290d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f9f565b50505050565b600061292967f6036d4dbbf1553b60c01b612a7d565b61293d67e574cfd0134a53a360c01b612a7d565b61295167481cad8a93626dbc60c01b612a7d565b63bc197c8160e01b905098975050505050505050565b600061297d673908573a227c011760c01b610740565b61299167f95a3d25f4a4d56660c01b610740565b6129a56701732dbf20a7ffe360c01b610740565b6129ad61279c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129e59190614848565b602060405180830381865afa158015612a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a269190615996565b905090565b6000612a4167d55e6083e458695760c01b612a7d565b612a5567229756682a8526f660c01b612a7d565b612a69672d0f5a7f66d6c2a060c01b612a7d565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612ab067216671dc6f7d651060c01b610740565b612ac467fc696b44f549a3bd60c01b610740565b612ad8677d2f775bb38d794b60c01b610740565b612aec672c1b7774324d16e460c01b610740565b612af533611909565b8015612b115750612b10679d6b1a88bd04a29560c01b613f5a565b5b80612b7f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612b625750612b6167c1169fb68056496660c01b613f5a565b5b8015612b7e5750612b7d67290c2b81e499218360c01b613f5a565b5b5b80612bab5750612b8e33610946565b8015612baa5750612ba96777d0513cc85b13d160c01b613f5a565b5b5b612bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be190615a35565b60405180910390fd5b612bfe67023020f196fe710560c01b610740565b565b612c1467595c0e9f3251c28760c01b6131df565b612c28676c9e8facf275455460c01b6131df565b612c3c675fd1ba867bad8d9060c01b6131df565b612c50675d4405176a4c718660c01b6131df565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590615aa1565b60405180910390fd5b612cd2678d884950e2a04aa760c01b6131df565b612ce6672dca0c18590376fc60c01b6131df565b612cfa67a4f7a20d65860e4d60c01b6131df565b612d0e675167170fc48a61af60c01b6131df565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9190615b0d565b60405180910390fd5b612dae67d711364ae0826ec060c01b6131df565b612dc2670a57bd871732b8ad60c01b6131df565b612dd6675d1d32267273ab9260c01b6131df565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612e059190614848565b60405180910390a1612e2167dcc232605f03b59860c01b6131df565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e906731b64f8837124c3160c01b610740565b612ea467648db564106906a760c01b610740565b612eb867c4dbbfd60bd1214960c01b610740565b612ecc6701512b58157c381b60c01b610740565b612ed461279c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612f1e5750612f1d6747f66328b063331a60c01b613f5a565b5b80612f4a5750612f2d33611909565b8015612f495750612f4867e429b1ab88ceb31060c01b613f5a565b5b5b612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8090615b9f565b60405180910390fd5b612f9d6762f06635bf7b4acd60c01b610740565b565b612fb367bdfd46f0589b81c760c01b610740565b612fc767b0457063cebd82a360c01b610740565b612fdb675b626d0fcf3aa6ce60c01b610740565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051613004919061512d565b60006040518083038185875af1925050503d8060008114613041576040519150601f19603f3d011682016040523d82523d6000602084013e613046565b606091505b509150915061305f672fb56cccf4f3b66560c01b610740565b6130736747166df0733c52e860c01b610740565b816130a85761308c6719461c9227bd654a60c01b610740565b6130a06767b989a4f1f2a8f560c01b610740565b805160208201fd5b6130bc67c859f4ceb5b7418760c01b610740565b5050505050565b6130d767851edf0db3fe6a8060c01b610740565b6130eb67765412b7902e3abf60c01b610740565b6130ff67151d6c3106b9e49760c01b610740565b613113671b070d07d4380e9a60c01b610740565b61311c33611909565b8015613138575061313767d5ef82e5a5d379e060c01b613f5a565b5b8061318a57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156131895750613188670cc2ae0862027a8c60c01b613f5a565b5b5b6131c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c090615c0b565b60405180910390fd5b6131dd67362a52eb7781e15260c01b610740565b565b50565b60006132107f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613f65565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61324d675b243153b1324c8660c01b610740565b61326167703050f3f8cbae0160c01b610740565b61327567096f3ba87c8df4a960c01b610740565b61328967360d12c388c6eb2e60c01b610740565b6132916130c3565b50565b6132c07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613f6f565b60000160009054906101000a900460ff16156132e4576132df83613f79565b6133fd565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561334c57506040513d601f19601f820116820180604052508101906133499190615c40565b60015b61338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338290615cdf565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e790615d71565b60405180910390fd5b506133fc838383614032565b5b505050565b50565b61341967e67927338dfde90a60c01b613402565b61342d670e51b57b7e9b4da560c01b613402565b61344167e3f66e826ec687ff60c01b613402565b6134556792d1df458e7acb7960c01b613402565b61345d61279c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c190615e03565b60405180910390fd5b6134de67f59af56761c9812d60c01b613402565b565b60006134f667bef7c9f9e10181f460c01b6137f8565b61350a67195d80a20eb6c55a60c01b6137f8565b61351e671429a8a5e3b067b460c01b6137f8565b61353267d826ce8361cc2e3d60c01b6137f8565b61359d60405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525061405e565b905092915050565b6135b967f347b6eb768867bd60c01b610740565b6135cd67e4b8fad4d2d1902a60c01b610740565b6135e16722ce8514c24b563d60c01b610740565b6135f5676bd35fd711427f6d60c01b610740565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff168092919061362490615e3b565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369790615ebb565b60405180910390fd5b6136b4675143066244fa845f60c01b610740565b50565b6136cb67cc5c47196db5bd6160c01b613402565b6136df678b55e749b3c352ab60c01b613402565b6136f367e6442311764077fa60c01b613402565b600081146137e05761370f671589e0478f7a186060c01b613402565b61372367d37e8b3807985e7360c01b613402565b61373767c2c62d2bb50a980360c01b613402565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161377f90615f01565b600060405180830381858888f193505050503d80600081146137bd576040519150601f19603f3d011682016040523d82523d6000602084013e6137c2565b606091505b505090506137da6714643eaa19656f6660c01b613402565b506137f5565b6137f467cc382f158ab6697a60c01b613402565b5b50565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138326703748e24ba0bf9ec60c01b610740565b613846670bc8db960be8c07860c01b610740565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061389b67019acf8eca98742f60c01b610740565b6138af67ffb0ee9b4a9774fe60c01b610740565b6138b881613960565b6138cc675b78c5bf4202c90360c01b610740565b6138e06725b6d74483d24a8260c01b610740565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139746717c7d6a68a08773960c01b6131df565b61398867cc8de6b882acb1a360c01b6131df565b61399c671ec2242cb4213daf60c01b6131df565b6139b067e7bfe4742339224760c01b6131df565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3490615f62565b60405180910390fd5b613a51676270d7427db14f5b60c01b6131df565b613a656704aa357520b4416d60c01b6131df565b613a79672b9382deb815da6060c01b6131df565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613aa89190614848565b60405180910390a1613ac467c36c72a8ecc3a90660c01b6131df565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b3267c36ba9a4464b6ea960c01b612a8b565b613b4667dbc59bf60721ec3760c01b612a8b565b613b5a67a9b899a25d7f84f360c01b612a8b565b613b6e676ccf2b04ef43fe2c60c01b612a8b565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf190615fce565b60405180910390fd5b613c0e677f234f21a7a7167460c01b612a8b565b613c22675dad748d723fc1a560c01b612a8b565b613c3667bcc423d1b918455e60c01b612a8b565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613c659190614848565b60405180910390a1613c8167ea5e8a43da197a0d60c01b612a8b565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613cf067473271421f468fd260c01b612a8b565b613d046792976a0e8d69a1f860c01b612a8b565b613d186722fdc4cd5a73662060c01b612a8b565b613d2c677f1705d0822221e360c01b612a8b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9290616060565b60405180910390fd5b613daf67d29ec12c81e5975160c01b612a8b565b613dc3675ce58ff31b29be9c60c01b612a8b565b613dd767e300c4231196178660c01b612a8b565b613deb6756d066aad6d03b2860c01b612a8b565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6f906160cc565b60405180910390fd5b613e8c67ceace18cb99efb4860c01b612a8b565b613ea067b298b03df19232ce60c01b612a8b565b613eb46771c3a697a02cf77360c01b612a8b565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613ee39190614848565b60405180910390a1613eff673094a602565cca5360c01b612a8b565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613f82816137fb565b613fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb89061615e565b60405180910390fd5b80613fee7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613f65565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61403b836140e2565b6000825111806140485750805b15614059576140578383614131565b505b505050565b60006140746717718d3268584e5860c01b61415e565b6140886719e6416798285bdf60c01b61415e565b61409c67a626d76b40db563f60c01b61415e565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6140eb81613f79565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614156838360405180606001604052806027815260200161625160279139614161565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161418b919061512d565b600060405180830381855af49150503d80600081146141c6576040519150601f19603f3d011682016040523d82523d6000602084013e6141cb565b606091505b50915091506141dc868383876141e7565b925050509392505050565b6060831561424957600083510361424157614201856137fb565b614240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614237906161ca565b60405180910390fd5b5b829050614254565b614253838361425c565b5b949350505050565b60008251111561426f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a3919061622e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142eb826142c0565b9050919050565b6142fb816142e0565b811461430657600080fd5b50565b600081359050614318816142f2565b92915050565b6000819050919050565b6143318161431e565b811461433c57600080fd5b50565b60008135905061434e81614328565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437957614378614354565b5b8235905067ffffffffffffffff81111561439657614395614359565b5b6020830191508360018202830111156143b2576143b161435e565b5b9250929050565b60008060008060008060008060c0898b0312156143d9576143d86142b6565b5b60006143e78b828c01614309565b98505060206143f88b828c01614309565b97505060406144098b828c01614309565b965050606061441a8b828c0161433f565b955050608089013567ffffffffffffffff81111561443b5761443a6142bb565b5b6144478b828c01614363565b945094505060a089013567ffffffffffffffff81111561446a576144696142bb565b5b6144768b828c01614363565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144bd81614488565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b6000602082840312156144f6576144f56142b6565b5b6000614504848285016144cb565b91505092915050565b60008115159050919050565b6145228161450d565b82525050565b600060208201905061453d6000830184614519565b92915050565b600060208284031215614559576145586142b6565b5b600061456784828501614309565b91505092915050565b60008060008060006080868803121561458c5761458b6142b6565b5b600061459a88828901614309565b95505060206145ab88828901614309565b94505060406145bc8882890161433f565b935050606086013567ffffffffffffffff8111156145dd576145dc6142bb565b5b6145e988828901614363565b92509250509295509295909350565b61460181614488565b82525050565b600060208201905061461c60008301846145f8565b92915050565b6000819050919050565b61463581614622565b811461464057600080fd5b50565b6000813590506146528161462c565b92915050565b6146618161450d565b811461466c57600080fd5b50565b60008135905061467e81614658565b92915050565b6000806000806000608086880312156146a05761469f6142b6565b5b60006146ae88828901614309565b95505060206146bf88828901614643565b945050604086013567ffffffffffffffff8111156146e0576146df6142bb565b5b6146ec88828901614363565b935093505060606146ff8882890161466f565b9150509295509295909350565b60008083601f84011261472257614721614354565b5b8235905067ffffffffffffffff81111561473f5761473e614359565b5b60208301915083602082028301111561475b5761475a61435e565b5b9250929050565b60008083601f84011261477857614777614354565b5b8235905067ffffffffffffffff81111561479557614794614359565b5b6020830191508360208202830111156147b1576147b061435e565b5b9250929050565b600080600080604085870312156147d2576147d16142b6565b5b600085013567ffffffffffffffff8111156147f0576147ef6142bb565b5b6147fc8782880161470c565b9450945050602085013567ffffffffffffffff81111561481f5761481e6142bb565b5b61482b87828801614762565b925092505092959194509250565b614842816142e0565b82525050565b600060208201905061485d6000830184614839565b92915050565b600080fd5b6000610160828403121561487f5761487e614863565b5b81905092915050565b6000806000606084860312156148a1576148a06142b6565b5b600084013567ffffffffffffffff8111156148bf576148be6142bb565b5b6148cb86828701614868565b93505060206148dc86828701614643565b92505060406148ed8682870161433f565b9150509250925092565b6149008161431e565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600061492c826142e0565b9050919050565b61493c81614921565b811461494757600080fd5b50565b60008135905061495981614933565b92915050565b60008060408385031215614976576149756142b6565b5b60006149848582860161494a565b925050602061499585828601614309565b9150509250929050565b60006149aa826142c0565b9050919050565b6149ba8161499f565b81146149c557600080fd5b50565b6000813590506149d7816149b1565b92915050565b600080604083850312156149f4576149f36142b6565b5b6000614a02858286016149c8565b9250506020614a138582860161433f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a6b82614a22565b810181811067ffffffffffffffff82111715614a8a57614a89614a33565b5b80604052505050565b6000614a9d6142ac565b9050614aa98282614a62565b919050565b600067ffffffffffffffff821115614ac957614ac8614a33565b5b614ad282614a22565b9050602081019050919050565b82818337600083830152505050565b6000614b01614afc84614aae565b614a93565b905082815260208101848484011115614b1d57614b1c614a1d565b5b614b28848285614adf565b509392505050565b600082601f830112614b4557614b44614354565b5b8135614b55848260208601614aee565b91505092915050565b60008060408385031215614b7557614b746142b6565b5b6000614b8385828601614309565b925050602083013567ffffffffffffffff811115614ba457614ba36142bb565b5b614bb085828601614b30565b9150509250929050565b614bc381614622565b82525050565b6000602082019050614bde6000830184614bba565b92915050565b60008060008060608587031215614bfe57614bfd6142b6565b5b6000614c0c87828801614309565b9450506020614c1d87828801614643565b935050604085013567ffffffffffffffff811115614c3e57614c3d6142bb565b5b614c4a87828801614363565b925092505092959194509250565b6000819050919050565b6000614c7d614c78614c73846142c0565b614c58565b6142c0565b9050919050565b6000614c8f82614c62565b9050919050565b6000614ca182614c84565b9050919050565b614cb181614c96565b82525050565b6000602082019050614ccc6000830184614ca8565b92915050565b60008060008060608587031215614cec57614ceb6142b6565b5b6000614cfa87828801614309565b9450506020614d0b8782880161433f565b935050604085013567ffffffffffffffff811115614d2c57614d2b6142bb565b5b614d3887828801614363565b925092505092959194509250565b60008083601f840112614d5c57614d5b614354565b5b8235905067ffffffffffffffff811115614d7957614d78614359565b5b602083019150836020820283011115614d9557614d9461435e565b5b9250929050565b60008060008060008060008060a0898b031215614dbc57614dbb6142b6565b5b6000614dca8b828c01614309565b9850506020614ddb8b828c01614309565b975050604089013567ffffffffffffffff811115614dfc57614dfb6142bb565b5b614e088b828c01614d46565b9650965050606089013567ffffffffffffffff811115614e2b57614e2a6142bb565b5b614e378b828c01614d46565b9450945050608089013567ffffffffffffffff811115614e5a57614e596142bb565b5b614e668b828c01614363565b92509250509295985092959890939650565b60008060008060008060a08789031215614e9557614e946142b6565b5b6000614ea389828a01614309565b9650506020614eb489828a01614309565b9550506040614ec589828a0161433f565b9450506060614ed689828a0161433f565b935050608087013567ffffffffffffffff811115614ef757614ef66142bb565b5b614f0389828a01614363565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f4c8261431e565b9150614f578361431e565b9250828203905081811115614f6f57614f6e614f12565b5b92915050565b600080fd5b600080fd5b60008085851115614f9357614f92614f75565b5b83861115614fa457614fa3614f7a565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000614fde8383614fba565b82614fe98135614622565b92506020821015615029576150247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802614fc5565b831692505b505092915050565b60008060006060848603121561504a576150496142b6565b5b6000615058868287016149c8565b935050602084013567ffffffffffffffff811115615079576150786142bb565b5b61508586828701614b30565b925050604084013567ffffffffffffffff8111156150a6576150a56142bb565b5b6150b286828701614b30565b9150509250925092565b600081519050919050565b600081905092915050565b60005b838110156150f05780820151818401526020810190506150d5565b60008484015250505050565b6000615107826150bc565b61511181856150c7565b93506151218185602086016150d2565b80840191505092915050565b600061513982846150fc565b915081905092915050565b600082825260208201905092915050565b6000615160826150bc565b61516a8185615144565b935061517a8185602086016150d2565b61518381614a22565b840191505092915050565b600060208201905081810360008301526151a88184615155565b905092915050565b60006040820190506151c56000830185614bba565b81810360208301526151d78184615155565b90509392505050565b6000815190506151ef816144b4565b92915050565b60006020828403121561520b5761520a6142b6565b5b6000615219848285016151e0565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061528f603a83615222565b915061529a82615233565b604082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615350602d83615222565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b600060ff82169050919050565b61539c81615386565b82525050565b60006080820190506153b76000830187614bba565b6153c46020830186615393565b6153d16040830185614bba565b6153de6060830184614bba565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000615443603383615222565b915061544e826153e7565b604082019050919050565b6000602082019050818103600083015261547281615436565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126154a5576154a4615479565b5b80840192508235915067ffffffffffffffff8211156154c7576154c661547e565b5b6020830192506001820236038313156154e3576154e2615483565b5b509250929050565b60006154f68261431e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361552857615527614f12565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061558f603383615222565b915061559a82615533565b604082019050919050565b600060208201905081810360008301526155be81615582565b9050919050565b60006040820190506155da6000830185614839565b6155e76020830184614839565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061564a602c83615222565b9150615655826155ee565b604082019050919050565b600060208201905081810360008301526156798161563d565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006156dc602c83615222565b91506156e782615680565b604082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061576e602e83615222565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b6000819050919050565b60006157c96157c46157bf846157a4565b614c58565b615386565b9050919050565b6157d9816157ae565b82525050565b60006020820190506157f460008301846157d0565b92915050565b6158038161499f565b82525050565b600060408201905061581e60008301856157fa565b61582b60208301846148f7565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061588e603883615222565b915061589982615832565b604082019050919050565b600060208201905081810360008301526158bd81615881565b9050919050565b60006158d08385615144565b93506158dd838584614adf565b6158e683614a22565b840190509392505050565b60006080820190506159066000830188614839565b6159136020830187614bba565b81810360408301526159268185876158c4565b90506159356060830184614519565b9695505050505050565b60008151905061594e81614658565b92915050565b60006020828403121561596a576159696142b6565b5b60006159788482850161593f565b91505092915050565b60008151905061599081614328565b92915050565b6000602082840312156159ac576159ab6142b6565b5b60006159ba84828501615981565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615a1f602883615222565b9150615a2a826159c3565b604082019050919050565b60006020820190508181036000830152615a4e81615a12565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615a8b601a83615222565b9150615a9682615a55565b602082019050919050565b60006020820190508181036000830152615aba81615a7e565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615af7601b83615222565b9150615b0282615ac1565b602082019050919050565b60006020820190508181036000830152615b2681615aea565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615b89602983615222565b9150615b9482615b2d565b604082019050919050565b60006020820190508181036000830152615bb881615b7c565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615bf5601c83615222565b9150615c0082615bbf565b602082019050919050565b60006020820190508181036000830152615c2481615be8565b9050919050565b600081519050615c3a8161462c565b92915050565b600060208284031215615c5657615c556142b6565b5b6000615c6484828501615c2b565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615cc9602e83615222565b9150615cd482615c6d565b604082019050919050565b60006020820190508181036000830152615cf881615cbc565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000615d5b602983615222565b9150615d6682615cff565b604082019050919050565b60006020820190508181036000830152615d8a81615d4e565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000615ded602483615222565b9150615df882615d91565b604082019050919050565b60006020820190508181036000830152615e1c81615de0565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000615e4682615e23565b91506bffffffffffffffffffffffff8203615e6457615e63614f12565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000615ea5601f83615222565b9150615eb082615e6f565b602082019050919050565b60006020820190508181036000830152615ed481615e98565b9050919050565b50565b6000615eeb6000836150c7565b9150615ef682615edb565b600082019050919050565b6000615f0c82615ede565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b6000615f4c601883615222565b9150615f5782615f16565b602082019050919050565b60006020820190508181036000830152615f7b81615f3f565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b6000615fb8602083615222565b9150615fc382615f82565b602082019050919050565b60006020820190508181036000830152615fe781615fab565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b600061604a602883615222565b915061605582615fee565b604082019050919050565b600060208201905081810360008301526160798161603d565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b60006160b6601c83615222565b91506160c182616080565b602082019050919050565b600060208201905081810360008301526160e5816160a9565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000616148602d83615222565b9150616153826160ec565b604082019050919050565b600060208201905081810360008301526161778161613b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006161b4601d83615222565b91506161bf8261617e565b602082019050919050565b600060208201905081810360008301526161e3816161a7565b9050919050565b600081519050919050565b6000616200826161ea565b61620a8185615222565b935061621a8185602086016150d2565b61622381614a22565b840191505092915050565b6000602082019050818103600083015261624881846161f5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122052ef28c8aab179aabaebb5199bdf2289ef0db3704f4aa8159a9c8efca48f9c2464736f6c63430008110033"; type TestAggregatedAccountFactoryConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts index 00241f58..b4e9f7af 100644 --- a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts @@ -21,6 +21,28 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -59,42 +81,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -102,24 +118,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -141,17 +177,24 @@ const _abi = [ { indexed: false, internalType: "address", - name: "oldRegistry", + name: "newOwner", type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, internalType: "address", - name: "newRegistry", + name: "removedOwner", type: "address", }, ], - name: "RegistryChanged", + name: "OwnerRemoved", type: "event", }, { @@ -167,19 +210,6 @@ const _abi = [ name: "Upgraded", type: "event", }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "addDeposit", @@ -188,37 +218,39 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "aggregator", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_newGuardian", type: "address", }, ], - stateMutability: "view", + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, { internalType: "address", - name: "addr", + name: "_newOwner", type: "address", }, ], - name: "canImplementInterfaceForAddress", + name: "addOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "aggregator", outputs: [ { - internalType: "bytes32", + internalType: "address", name: "", - type: "bytes32", + type: "address", }, ], stateMutability: "view", @@ -300,66 +332,143 @@ const _abi = [ }, { internalType: "address", - name: "anRegistry", + name: "", type: "address", }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ { internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", type: "address", }, ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSig", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "message", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, + ], + name: "isValidSigImpl", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -388,14 +497,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -403,7 +512,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -431,13 +540,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -449,16 +563,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, { internalType: "address", name: "", type: "address", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -475,15 +610,47 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", + type: "address", + }, + ], + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", type: "address", }, ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], stateMutability: "view", type: "function", }, @@ -496,17 +663,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -522,7 +689,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -538,19 +705,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -693,7 +847,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620039fa380380620039fa83398181016040528101906200006a91906200010f565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505062000141565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000d782620000aa565b9050919050565b620000e981620000ca565b8114620000f557600080fd5b50565b6000815190506200010981620000de565b92915050565b600060208284031215620001285762000127620000a5565b5b60006200013884828501620000f8565b91505092915050565b60805160a0516138706200018a60003960008181610af001526117ee015260008181610bac01528181610c3b01528181610e7401528181610f030152610fb301526138706000f3fe60806040526004361061014e5760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e01461047e578063b0d691fe146104a9578063b61d27f6146104d4578063c0c53b8b146104fd578063c399ec8814610526578063f23a6e611461055157610155565b80634d44560d1461038d5780634f1ef286146103b657806352d1902d146103d257806379cbc5fa146103fd5780637b103999146104285780638da5cb5b1461045357610155565b806320c13b0b1161010857806320c13b0b14610278578063245a7bfc146102b5578063249cb3fa146102e05780633659cfe61461031d5780633a871cdd146103465780634a58db191461038357610155565b806223de291461015a578063150b7a02146101835780631626ba7e146101c057806318dfb3c7146101fd5780631a5da6c8146102265780631b71bb6e1461024f57610155565b3661015557005b600080fd5b34801561016657600080fd5b50610181600480360381019061017c9190611f70565b61058e565b005b34801561018f57600080fd5b506101aa60048036038101906101a5919061203f565b6105d3565b6040516101b79190612102565b60405180910390f35b3480156101cc57600080fd5b506101e760048036038101906101e29190612153565b6105e8565b6040516101f49190612102565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f919061225f565b6106cb565b005b34801561023257600080fd5b5061024d600480360381019061024891906122e0565b6107dd565b005b34801561025b57600080fd5b50610276600480360381019061027191906122e0565b6108f1565b005b34801561028457600080fd5b5061029f600480360381019061029a919061230d565b610a08565b6040516102ac9190612102565b60405180910390f35b3480156102c157600080fd5b506102ca610aee565b6040516102d7919061239d565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906123b8565b610b12565b6040516103149190612407565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906122e0565b610baa565b005b34801561035257600080fd5b5061036d60048036038101906103689190612447565b610d33565b60405161037a91906124c5565b60405180910390f35b61038b610d7d565b005b34801561039957600080fd5b506103b460048036038101906103af919061251e565b610df2565b005b6103d060048036038101906103cb919061269f565b610e72565b005b3480156103de57600080fd5b506103e7610faf565b6040516103f49190612407565b60405180910390f35b34801561040957600080fd5b50610412611068565b60405161041f919061239d565b60405180910390f35b34801561043457600080fd5b5061043d61108c565b60405161044a919061239d565b60405180910390f35b34801561045f57600080fd5b506104686110b5565b604051610475919061239d565b60405180910390f35b34801561048a57600080fd5b506104936110db565b6040516104a091906124c5565b60405180910390f35b3480156104b557600080fd5b506104be61110b565b6040516104cb919061275a565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612775565b611135565b005b34801561050957600080fd5b50610524600480360381019061051f9190612827565b611192565b005b34801561053257600080fd5b5061053b6112dc565b60405161054891906124c5565b60405180910390f35b34801561055d57600080fd5b506105786004803603810190610573919061287a565b611364565b6040516105859190612102565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d156508787876040516105c193929190612914565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b815260040161064a9493929190612989565b602060405180830381865afa158015610667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068b9190612a01565b61069c5763ffffffff60e01b6106c2565b6040516020016106ab90612a85565b604051602081830303815290604052805190602001205b90509392505050565b6106d361137a565b81819050848490501461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290612b1d565b60405180910390fd5b60005b848490508110156107d6576107c385858381811061073f5761073e612b3d565b5b905060200201602081019061075491906122e0565b600085858581811061076957610768612b3d565b5b905060200281019061077b9190612b7b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b80806107ce90612c0d565b91505061071e565b5050505050565b6107e56114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612cc8565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516108a6929190612ce8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108f96114cd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096090612d83565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516109bc929190612ce8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a6c959493929190612da3565b602060405180830381865afa158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190612a01565b610abe5763ffffffff60e01b610ae4565b604051602001610acd90612e38565b604051602081830303815290604052805190602001205b9050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080604051602001610b2490612e99565b6040516020818303038152906040528051906020012084148015610b7357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ba057604051602001610b8790612efa565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c78611595565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613013565b60405180910390fd5b610cd7816115ec565b610d3081600067ffffffffffffffff811115610cf657610cf5612574565b5b6040519080825280601f01601f191660200182016040528015610d285781602001600182028036833780820191505090505b5060006115f7565b50565b6000610d3d611765565b610d4784846117dc565b90506000848060400190610d5b9190612b7b565b90501415610d6d57610d6c84611851565b5b610d76826118ff565b9392505050565b610d8561110b565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610dbe919061239d565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050505050565b610dfa6114cd565b610e0261110b565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610e3c929190613042565b600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890612f81565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f40611595565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613013565b60405180910390fd5b610f9f826115ec565b610fab828260016115f7565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906130dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61113d61137a565b61118c848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611449565b50505050565b60008060159054906101000a900460ff161590508080156111c557506001600060149054906101000a900460ff1660ff16105b806111f457506111d43061199b565b1580156111f357506001600060149054906101000a900460ff1660ff16145b5b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061316f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611271576001600060156101000a81548160ff0219169083151502179055505b61127d848460006119be565b80156112d65760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112cd91906131d7565b60405180910390a15b50505050565b60006112e661110b565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161131e919061239d565b602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613207565b905090565b600063f23a6e6160e01b90509695505050505050565b61138261110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140857506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906132a6565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114729190613340565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c657805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061155457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a906133a3565b60405180910390fd5b565b60006115c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46114cd565b50565b6116237f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b64565b60000160009054906101000a900460ff16156116475761164283611b6e565b611760565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116af57506040513d601f19601f820116820180604052508101906116ac91906133d8565b60015b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613477565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a90613509565b60405180910390fd5b5061175f838383611c27565b5b505050565b61176d61110b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d19061359b565b60405180910390fd5b565b600061184960405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff16815250611c53565b905092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611880906135d3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613654565b60405180910390fd5b50565b600081146119985760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161194f9061369a565b600060405180830381858888f193505050503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b778161199b565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613721565b60405180910390fd5b80611be37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b5a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3083611c9b565b600082511180611c3d5750805b15611c4e57611c4c8383611cea565b505b505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b611ca481611b6e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d0f838360405180606001604052806027815260200161381460279139611d17565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d419190613340565b600060405180830381855af49150503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b5091509150611d9286838387611d9d565b925050509392505050565b60608315611e0057600083511415611df857611db88561199b565b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061378d565b60405180910390fd5b5b829050611e0b565b611e0a8383611e13565b5b949350505050565b600082511115611e265781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a91906137f1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ea282611e77565b9050919050565b611eb281611e97565b8114611ebd57600080fd5b50565b600081359050611ecf81611ea9565b92915050565b6000819050919050565b611ee881611ed5565b8114611ef357600080fd5b50565b600081359050611f0581611edf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f3057611f2f611f0b565b5b8235905067ffffffffffffffff811115611f4d57611f4c611f10565b5b602083019150836001820283011115611f6957611f68611f15565b5b9250929050565b60008060008060008060008060c0898b031215611f9057611f8f611e6d565b5b6000611f9e8b828c01611ec0565b9850506020611faf8b828c01611ec0565b9750506040611fc08b828c01611ec0565b9650506060611fd18b828c01611ef6565b955050608089013567ffffffffffffffff811115611ff257611ff1611e72565b5b611ffe8b828c01611f1a565b945094505060a089013567ffffffffffffffff81111561202157612020611e72565b5b61202d8b828c01611f1a565b92509250509295985092959890939650565b60008060008060006080868803121561205b5761205a611e6d565b5b600061206988828901611ec0565b955050602061207a88828901611ec0565b945050604061208b88828901611ef6565b935050606086013567ffffffffffffffff8111156120ac576120ab611e72565b5b6120b888828901611f1a565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120fc816120c7565b82525050565b600060208201905061211760008301846120f3565b92915050565b6000819050919050565b6121308161211d565b811461213b57600080fd5b50565b60008135905061214d81612127565b92915050565b60008060006040848603121561216c5761216b611e6d565b5b600061217a8682870161213e565b935050602084013567ffffffffffffffff81111561219b5761219a611e72565b5b6121a786828701611f1a565b92509250509250925092565b60008083601f8401126121c9576121c8611f0b565b5b8235905067ffffffffffffffff8111156121e6576121e5611f10565b5b60208301915083602082028301111561220257612201611f15565b5b9250929050565b60008083601f84011261221f5761221e611f0b565b5b8235905067ffffffffffffffff81111561223c5761223b611f10565b5b60208301915083602082028301111561225857612257611f15565b5b9250929050565b6000806000806040858703121561227957612278611e6d565b5b600085013567ffffffffffffffff81111561229757612296611e72565b5b6122a3878288016121b3565b9450945050602085013567ffffffffffffffff8111156122c6576122c5611e72565b5b6122d287828801612209565b925092505092959194509250565b6000602082840312156122f6576122f5611e6d565b5b600061230484828501611ec0565b91505092915050565b6000806000806040858703121561232757612326611e6d565b5b600085013567ffffffffffffffff81111561234557612344611e72565b5b61235187828801611f1a565b9450945050602085013567ffffffffffffffff81111561237457612373611e72565b5b61238087828801611f1a565b925092505092959194509250565b61239781611e97565b82525050565b60006020820190506123b2600083018461238e565b92915050565b600080604083850312156123cf576123ce611e6d565b5b60006123dd8582860161213e565b92505060206123ee85828601611ec0565b9150509250929050565b6124018161211d565b82525050565b600060208201905061241c60008301846123f8565b92915050565b600080fd5b6000610160828403121561243e5761243d612422565b5b81905092915050565b6000806000606084860312156124605761245f611e6d565b5b600084013567ffffffffffffffff81111561247e5761247d611e72565b5b61248a86828701612427565b935050602061249b8682870161213e565b92505060406124ac86828701611ef6565b9150509250925092565b6124bf81611ed5565b82525050565b60006020820190506124da60008301846124b6565b92915050565b60006124eb82611e77565b9050919050565b6124fb816124e0565b811461250657600080fd5b50565b600081359050612518816124f2565b92915050565b6000806040838503121561253557612534611e6d565b5b600061254385828601612509565b925050602061255485828601611ef6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125ac82612563565b810181811067ffffffffffffffff821117156125cb576125ca612574565b5b80604052505050565b60006125de611e63565b90506125ea82826125a3565b919050565b600067ffffffffffffffff82111561260a57612609612574565b5b61261382612563565b9050602081019050919050565b82818337600083830152505050565b600061264261263d846125ef565b6125d4565b90508281526020810184848401111561265e5761265d61255e565b5b612669848285612620565b509392505050565b600082601f83011261268657612685611f0b565b5b813561269684826020860161262f565b91505092915050565b600080604083850312156126b6576126b5611e6d565b5b60006126c485828601611ec0565b925050602083013567ffffffffffffffff8111156126e5576126e4611e72565b5b6126f185828601612671565b9150509250929050565b6000819050919050565b600061272061271b61271684611e77565b6126fb565b611e77565b9050919050565b600061273282612705565b9050919050565b600061274482612727565b9050919050565b61275481612739565b82525050565b600060208201905061276f600083018461274b565b92915050565b6000806000806060858703121561278f5761278e611e6d565b5b600061279d87828801611ec0565b94505060206127ae87828801611ef6565b935050604085013567ffffffffffffffff8111156127cf576127ce611e72565b5b6127db87828801611f1a565b925092505092959194509250565b60006127f482611e97565b9050919050565b612804816127e9565b811461280f57600080fd5b50565b600081359050612821816127fb565b92915050565b6000806000606084860312156128405761283f611e6d565b5b600061284e86828701612812565b935050602061285f86828701611ec0565b925050604061287086828701611ec0565b9150509250925092565b60008060008060008060a0878903121561289757612896611e6d565b5b60006128a589828a01611ec0565b96505060206128b689828a01611ec0565b95505060406128c789828a01611ef6565b94505060606128d889828a01611ef6565b935050608087013567ffffffffffffffff8111156128f9576128f8611e72565b5b61290589828a01611f1a565b92509250509295509295509295565b6000606082019050612929600083018661238e565b612936602083018561238e565b61294360408301846124b6565b949350505050565b600082825260208201905092915050565b6000612968838561294b565b9350612975838584612620565b61297e83612563565b840190509392505050565b600060608201905061299e600083018761238e565b6129ab60208301866123f8565b81810360408301526129be81848661295c565b905095945050505050565b60008115159050919050565b6129de816129c9565b81146129e957600080fd5b50565b6000815190506129fb816129d5565b92915050565b600060208284031215612a1757612a16611e6d565b5b6000612a25848285016129ec565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612a6f601f83612a2e565b9150612a7a82612a39565b601f82019050919050565b6000612a9082612a62565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612b07603383612a9a565b9150612b1282612aab565b604082019050919050565b60006020820190508181036000830152612b3681612afa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b9857612b97612b6c565b5b80840192508235915067ffffffffffffffff821115612bba57612bb9612b71565b5b602083019250600182023603831315612bd657612bd5612b76565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c1882611ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4b57612c4a612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612cb2603183612a9a565b9150612cbd82612c56565b604082019050919050565b60006020820190508181036000830152612ce181612ca5565b9050919050565b6000604082019050612cfd600083018561238e565b612d0a602083018461238e565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612d6d603383612a9a565b9150612d7882612d11565b604082019050919050565b60006020820190508181036000830152612d9c81612d60565b9050919050565b6000606082019050612db8600083018861238e565b8181036020830152612dcb81868861295c565b90508181036040830152612de081848661295c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612e22601d83612a2e565b9150612e2d82612dec565b601d82019050919050565b6000612e4382612e15565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000612e83601583612a2e565b9150612e8e82612e4d565b601582019050919050565b6000612ea482612e76565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000612ee4601483612a2e565b9150612eef82612eae565b601482019050919050565b6000612f0582612ed7565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612f6b602c83612a9a565b9150612f7682612f0f565b604082019050919050565b60006020820190508181036000830152612f9a81612f5e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612ffd602c83612a9a565b915061300882612fa1565b604082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b61303c816124e0565b82525050565b60006040820190506130576000830185613033565b61306460208301846124b6565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006130c7603883612a9a565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613159602e83612a9a565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b6000819050919050565b600060ff82169050919050565b60006131c16131bc6131b78461318f565b6126fb565b613199565b9050919050565b6131d1816131a6565b82525050565b60006020820190506131ec60008301846131c8565b92915050565b60008151905061320181611edf565b92915050565b60006020828403121561321d5761321c611e6d565b5b600061322b848285016131f2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613290602983612a9a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b83811115613309576000848401525b50505050565b600061331a826132c6565b61332481856132d1565b93506133348185602086016132dc565b80840191505092915050565b600061334c828461330f565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061338d601c83612a9a565b915061339882613357565b602082019050919050565b600060208201905081810360008301526133bc81613380565b9050919050565b6000815190506133d281612127565b92915050565b6000602082840312156133ee576133ed611e6d565b5b60006133fc848285016133c3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613461602e83612a9a565b915061346c82613405565b604082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006134f3602983612a9a565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613585602483612a9a565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006135de826135bb565b91506bffffffffffffffffffffffff8214156135fd576135fc612bde565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061363e601f83612a9a565b915061364982613608565b602082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b50565b60006136846000836132d1565b915061368f82613674565b600082019050919050565b60006136a582613677565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061370b602d83612a9a565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613777601d83612a9a565b915061378282613741565b602082019050919050565b600060208201905081810360008301526137a68161376a565b9050919050565b600081519050919050565b60006137c3826137ad565b6137cd8185612a9a565b93506137dd8185602086016132dc565b6137e681612563565b840191505092915050565b6000602082019050818103600083015261380b81846137b8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dbbd5559e3326881dda71ce0f054137186932c3a13d23a194356cd589c120f5264736f6c634300080c0033"; + "0x60c06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50604051620066843803806200668483398181016040528101906200006a919062000278565b620000866777bd353ae5f6f4b860c01b6200014160201b60201c565b620000a267f4849dbf6086b19760c01b6200014160201b60201c565b620000be671331b88614a8024260c01b6200014160201b60201c565b620000ce6200014460201b60201c565b620000ea671993378f1b71ba6160c01b6200020b60201b60201c565b6200010667990704978fc4a92760c01b6200020b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050506200038e565b50565b600060019054906101000a900460ff161562000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000331565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620002095760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff60405162000200919062000371565b60405180910390a15b565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002408262000213565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000602082840312156200029157620002906200020e565b5b6000620002a18482850162000261565b91505092915050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b600062000319602783620002aa565b91506200032682620002bb565b604082019050919050565b600060208201905081810360008301526200034c816200030a565b9050919050565b600060ff82169050919050565b6200036b8162000353565b82525050565b600060208201905062000388600083018462000360565b92915050565b60805160a0516162ad620003d7600039600081816118e7015261354201526000818161199d01528181611a2b01528181611fef0152818161207d015261212d01526162ad6000f3fe6080604052600436106101ba5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f614610672578063bc197c811461069b578063c399ec88146106d8578063f23a6e611461070357610219565b8063a526d83b146105f3578063affed0e01461061c578063b0d691fe1461064757610219565b80637065cb48116100c65780637065cb481461052757806371404156146105505780638f0684301461057957806398ef1ed8146105b657610219565b80634d44560d146104b75780634f1ef286146104e057806352d1902d146104fc57610219565b80631b71bb6e116101595780633659cfe6116101335780633659cfe61461041e5780633a871cdd14610447578063485cc955146104845780634a58db19146104ad57610219565b80631b71bb6e1461038d578063245a7bfc146103b65780632f54bf6e146103e157610219565b8063150b7a0211610195578063150b7a02146102c157806316d43401146102fe578063173825d91461033b57806318dfb3c71461036457610219565b806223de291461021e57806301ffc9a7146102475780630c68ba211461028457610219565b36610219576101d367290bbd319612162360c01b610740565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561022a57600080fd5b50610245600480360381019061024091906143b9565b610743565b005b34801561025357600080fd5b5061026e600480360381019061026991906144e0565b610761565b60405161027b9190614528565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190614543565b610946565b6040516102b89190614528565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190614570565b6109d8565b6040516102f59190614607565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190614684565b610a28565b6040516103329190614528565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190614543565b611401565b005b34801561037057600080fd5b5061038b600480360381019061038691906147b8565b6114c9565b005b34801561039957600080fd5b506103b460048036038101906103af9190614543565b611707565b005b3480156103c257600080fd5b506103cb6118e5565b6040516103d89190614848565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190614543565b611909565b6040516104159190614528565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614543565b61199b565b005b34801561045357600080fd5b5061046e60048036038101906104699190614888565b611b23565b60405161047b9190614906565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a6919061495f565b611c61565b005b6104b5611e08565b005b3480156104c357600080fd5b506104de60048036038101906104d991906149dd565b611eb9565b005b6104fa60048036038101906104f59190614b5e565b611fed565b005b34801561050857600080fd5b50610511612129565b60405161051e9190614bc9565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614543565b6121e2565b005b34801561055c57600080fd5b5061057760048036038101906105729190614543565b6122aa565b005b34801561058557600080fd5b506105a0600480360381019061059b9190614be4565b612372565b6040516105ad9190614528565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614be4565b61243f565b6040516105ea9190614528565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614543565b612668565b005b34801561062857600080fd5b50610631612730565b60405161063e9190614906565b60405180910390f35b34801561065357600080fd5b5061065c61279c565b6040516106699190614cb7565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190614cd2565b612802565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190614d9c565b612913565b6040516106cf9190614607565b60405180910390f35b3480156106e457600080fd5b506106ed612967565b6040516106fa9190614906565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614e78565b612a2b565b6040516107379190614607565b60405180910390f35b50565b610757671278753381487ed660c01b612a7d565b5050505050505050565b600061077767f20d647ea02d480060c01b612a7d565b61078b67ffb589296d687db060c01b612a7d565b61079f6727ecf9b318901df560c01b612a7d565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561081c575061081b675d4be9b73183ad3f60c01b612a80565b5b806108bc57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561089f575061089e674cb5733a4ebd736b60c01b612a80565b5b80156108bb57506108ba67927753031b1e765d60c01b612a80565b5b5b8061093f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561093e575061093d66bc16169e90631c60c01b612a80565b5b5b9050919050565b600061095c679a530c869daa649060c01b612a8b565b610970677819779a5121f4ad60c01b612a8b565b61098467dcc814792f5595a060c01b612a8b565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109ed6642558288c0c26a60c01b612a7d565b610a01670cd59c881166cff460c01b612a7d565b610a1567d8d160ce8c3ef4cc60c01b612a7d565b63150b7a0260e01b905095945050505050565b6000610a3e6777258f39a67c0acd60c01b612a8e565b610a5267c9d3460cf31b367060c01b612a8e565b610a6667301450deda14998860c01b612a8e565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a9667ec35fa0e327aba3360c01b612a8e565b610aaa6757c603851350fa0960c01b612a8e565b6060610ac067ed7102d9c731614b60c01b612a8e565b610ad467260c95324dc5522a60c01b612a8e565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b0c9190614f41565b908a8a905092610b1e93929190614f7f565b90610b299190614fd2565b149050610b4067adb0f8e971c6f00460c01b612a8e565b610b546775ac95bff94d832360c01b612a8e565b8015610da157610b6e67b7ce1fa3f7f6604d60c01b612a8e565b610b82679fc1490a6707ce8260c01b612a8e565b610b96679cbd4322f03dcb3060c01b612a8e565b6000610bac677c50636fd0d78e6e60c01b612a8e565b610bc067b6c96f6498872fdd60c01b612a8e565b6060610bd667d225012c278bc14960c01b612a8e565b888860009060208c8c9050610beb9190614f41565b92610bf893929190614f7f565b810190610c059190615031565b809650819350829450505050610c2567414eafbc10d5dfd460c01b612a8e565b610c39679735072f1875e8c560c01b612a8e565b60008503610d8557610c5567ece2f114e83cba5460c01b612a8e565b610c6967bb4b7709950fab6560c01b612a8e565b610c7d67e556fd7ed728116b60c01b612a8e565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610ca5919061512d565b6000604051808303816000865af19150503d8060008114610ce2576040519150601f19603f3d011682016040523d82523d6000602084013e610ce7565b606091505b5091509150610d00675bb7adbcacc27af760c01b612a8e565b610d1467925a11ac41b1a62f60c01b612a8e565b81610d6a57610d2d674b9b350a0c4e240d60c01b612a8e565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d61919061518e565b60405180910390fd5b610d7e67270a9300cfb5deb160c01b612a8e565b5050610d9a565b610d996719ddea40eb9c9d5e60c01b612a8e565b5b5050610e11565b610db5671617c5f7b544c15460c01b612a8e565b610dc967152cf4f885c3c7bd60c01b612a8e565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610e25678968ba2400116cd160c01b612a8e565b610e3967d26f37fb13c4702060c01b612a8e565b808015610e565750610e5567e672c6829c01435e60c01b612a91565b5b80610e7d5750600083118015610e7c5750610e7b672f1034641526e8e560c01b612a91565b5b5b156110ed57610e966787b8bb2f9d833b2360c01b612a8e565b610eaa6748ed04b5790955de60c01b612a8e565b610ebe67c07d3098ed811b0e60c01b612a8e565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610ef99291906151b0565b602060405180830381865afa925050508015610f3357506040513d601f19601f82011682018060405250810190610f3091906151f5565b60015b610fba573d8060008114610f63576040519150601f19603f3d011682016040523d82523d6000602084013e610f68565b606091505b50610f7d672c516c89798db2e060c01b612a8e565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610fb1919061518e565b60405180910390fd5b610fce677a7dc9015ade993760c01b612a8e565b610fe2676bd30bd513db1c1260c01b612a8e565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614905061104267f77b76e97cdda63e60c01b612a8e565b61105667f2ac3b0c93d4d96060c01b612a8e565b6000851480156110635750825b801561106d575086155b156110a4576110866732203bac67e9a5c660c01b612a8e565b61109a67bacd05270bf834fa60c01b612a8e565b806000526001601ffd5b6110b867db508d98998fd4cb60c01b612a8e565b6110cc67bd809f1f7297a39860c01b612a8e565b6110e0671166c1324f0a4d4360c01b612a8e565b80955050505050506113f8565b61110167fb73a16ec6f828a360c01b612a8e565b61111567124b4f67fba3948f60c01b612a8e565b61112967a72081e2c67a966a60c01b612a8e565b61113d670ab810c1358d671760c01b612a8e565b60418787905014611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a906152a5565b60405180910390fd5b61119767c0b4b2b739bdbc3e60c01b612a8e565b6111ab670f81a533fa5be34e60c01b612a8e565b6111bf67657c1339b273a74660c01b612a8e565b600087876000906020926111d593929190614f7f565b906111e09190614fd2565b90506111f667dc3d3b49fc92cadb60c01b612a8e565b61120a6752ae34fa8263b21b60c01b612a8e565b6000888860209060409261122093929190614f7f565b9061122b9190614fd2565b905061124167301232fd22fb824c60c01b612a8e565b61125567f519c889a1cef68c60c01b612a8e565b60008989604081811061126b5761126a6152c5565b5b9050013560f81c60f81b60f81c905061128e679a20c64fb3f7324360c01b612a8e565b6112a2678a031af26ced764160c01b612a8e565b601b8160ff16141580156112ba5750601c8160ff1614155b15611336576112d367cd922db48d204f9b60c01b612a8e565b6112e767833a8605e20290ce60c01b612a8e565b6112fb67b3da6c39eac2834e60c01b612a8e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d90615366565b60405180910390fd5b61134a675514297355562d4860c01b612a8e565b61135e6757b333f889b6e2b360c01b612a8e565b611372676603fc4d7122128560c01b612a8e565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113ac94939291906153a2565b6020604051602081039080840390855afa1580156113ce573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6114156706cea3225e159afe60c01b610740565b61142967768e02f4b4fe93d060c01b610740565b61143d67bcb43f0f61fb5a1260c01b610740565b6114516705112cc091d04b2260c01b610740565b611459612a9c565b61146d677b6146229717de8560c01b610740565b611481671a91445bcd7d6a3660c01b610740565b61149567087786fe3118ce4560c01b610740565b6114a96712ac3ecdf13b356f60c01b610740565b6114bd676a822ec913ef224160c01b610740565b6114c681612c00565b50565b6114dd670b312c177376d2f160c01b610740565b6114f167526a718f37dbef7960c01b610740565b61150567bc0095b6ec842fe060c01b610740565b6115196765a7b825dc91e38260c01b610740565b611521612e7c565b61153567e65dfa654e10de0360c01b610740565b6115496738751a29e4bbac9a60c01b610740565b61155d6764a3e3565274624260c01b610740565b61157167e3532f2d278ffcc460c01b610740565b61158567b28c9cc66aedc63960c01b610740565b611599674c0d2e74d59320d660c01b610740565b8181905084849050146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890615459565b60405180910390fd5b6115f56733f49bcf3f677de260c01b610740565b61160967fda055a3194df47960c01b610740565b61161d670ca2693ca40a9c3d60c01b610740565b60005b848490508110156117005761163f67e45fe9f7a89384cd60c01b610740565b611653677885f77483c8c7a360c01b610740565b6116ed858583818110611669576116686152c5565b5b905060200201602081019061167e9190614543565b6000858585818110611693576116926152c5565b5b90506020028101906116a59190615488565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f9f565b80806116f8906154eb565b915050611620565b5050505050565b61171b67b0e8e7fc3aed8bf060c01b610740565b61172f671246157b9919312560c01b610740565b61174367cbfddca365f5dede60c01b610740565b61174b6130c3565b61175f67ab4f446b15a2b75360c01b610740565b61177367140f31a12b03a20160c01b610740565b61178767c2cd95be620e67ae60c01b610740565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed906155a5565b60405180910390fd5b61180a674b99dae5f525e91060c01b610740565b61181e67897f79a11a9b512360c01b610740565b61183267f01df9d5178d9e0460c01b610740565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118859291906155c5565b60405180910390a16118a16705fb80e775388d3f60c01b610740565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061191f6784c34e023fb786f860c01b6131df565b611933670d806432bac21d3b60c01b6131df565b611947679da5a6f8cf654dc360c01b6131df565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090615660565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611a686131e2565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906156f2565b60405180910390fd5b611ac781613239565b611b2081600067ffffffffffffffff811115611ae657611ae5614a33565b5b6040519080825280601f01601f191660200182016040528015611b185781602001600182028036833780820191505090505b506000613294565b50565b6000611b39674a0b745640aaacbe60c01b613402565b611b4d673643bc4d265e004d60c01b613402565b611b6167be21e9c3510eef0760c01b613402565b611b69613405565b611b7d670d9ae78f9ca6bca160c01b613402565b611b8784846134e0565b9050611b9d67bac743df019f783060c01b613402565b611bb1674633441562cbb38260c01b613402565b6000848060400190611bc39190615488565b905003611c1457611bde67b9f604ce3adf50f460c01b613402565b611bf26740dc8d2be550a2ae60c01b613402565b611c06678d7f5bf9351f5d3760c01b613402565b611c0f846135a5565b611c29565b611c2867493644fd2e2f359760c01b613402565b5b611c3d67f86dd1b6eddb849360c01b613402565b611c5167e338ec934ff31c9e60c01b613402565b611c5a826136b7565b9392505050565b611c75674de7345356ca025360c01b6137f8565b60008060019054906101000a900460ff16159050808015611ca65750600160008054906101000a900460ff1660ff16105b80611cd35750611cb5306137fb565b158015611cd25750600160008054906101000a900460ff1660ff16145b5b611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990615784565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611d4f576001600060016101000a81548160ff0219169083151502179055505b611d636785289b9ca3fc044b60c01b6137f8565b611d77673f724fb686947df060c01b6137f8565b611d8b678b3e2c8d275977d860c01b6137f8565b611d9f678466bb50c83891b360c01b6137f8565b611daa83600061381e565b8015611e035760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611dfa91906157df565b60405180910390a15b505050565b611e1c67a987bf12f6bf98ab60c01b610740565b611e30671fbaaa4dbb3f884d60c01b610740565b611e4467e797a3f7fa46660c60c01b610740565b611e4c61279c565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e859190614848565b6000604051808303818588803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b5050505050565b611ecd67fbabf181d33082b660c01b610740565b611ee167bee35484a90cfd2660c01b610740565b611ef5673ceb9bb2daab856d60c01b610740565b611f096791fab911752e5b5c60c01b610740565b611f116130c3565b611f25672877b8446bdb5f0060c01b610740565b611f39676c6fc7cbb8b3b97860c01b610740565b611f4d67eb87ca9da684e3db60c01b610740565b611f61673d9d17fec85dda7860c01b610740565b611f75675017b987e5f4e1e060c01b610740565b611f7d61279c565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611fb7929190615809565b600060405180830381600087803b158015611fd157600080fd5b505af1158015611fe5573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160361207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290615660565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166120ba6131e2565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612107906156f2565b60405180910390fd5b61211982613239565b61212582826001613294565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b0906158a4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6121f667b4c2b632b250bc6360c01b610740565b61220a67768e02f4b4fe93d060c01b610740565b61221e67bcb43f0f61fb5a1260c01b610740565b6122326705112cc091d04b2260c01b610740565b61223a612a9c565b61224e677b6146229717de8560c01b610740565b6122626732bce9776427685f60c01b610740565b612276675c4d3c86a9602c6f60c01b610740565b61228a670877748d77ec420260c01b610740565b61229e6732ccb44361bec49260c01b610740565b6122a781613960565b50565b6122be676bacc25ce52307dd60c01b610740565b6122d267bee35484a90cfd2660c01b610740565b6122e6673ceb9bb2daab856d60c01b610740565b6122fa6791fab911752e5b5c60c01b610740565b6123026130c3565b612316672877b8446bdb5f0060c01b610740565b61232a67edec01844939018360c01b610740565b61233e672d1676c1874371c960c01b610740565b6123526767895a735b76188060c01b610740565b6123666762377381d2b1f71460c01b610740565b61236f81613b1e565b50565b600061238867a69e23ef0cf0d80560c01b612a8e565b61239c6789508a17c1e5baf860c01b612a8e565b6123b067f0e90fa9dac9b5a260c01b612a8e565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b81526004016123f29594939291906158f1565b6020604051808303816000875af1158015612411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124359190615954565b9050949350505050565b6000612455678cc395c88e3ae24060c01b612a8e565b612469670e6cd08ae62d699160c01b612a8e565b61247d671a6d203d14bbeb3560c01b612a8e565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b81526004016124bf9594939291906158f1565b6020604051808303816000875af19250505080156124fb57506040513d601f19601f820116820180604052508101906124f89190615954565b60015b612633573d806000811461252b576040519150601f19603f3d011682016040523d82523d6000602084013e612530565b606091505b506125456763fa3d4afb8cd55b60c01b612a8e565b61255967c78e77a5e38dc67760c01b612a8e565b60008151905061257367a2319ac582c5f8b960c01b612a8e565b612587679d791f94f379b3d460c01b612a8e565b60018103612607576125a3674b6df8afb2c0610f60c01b612a8e565b6125b7671241dc8732fa093a60c01b612a8e565b600160f81b826000815181106125d0576125cf6152c5565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050612660565b61261b67fb87cb9c02294f9f60c01b612a8e565b61262f6773311759eab4f85760c01b612a8e565b8082fd5b612647672f68b0ad8fd39c0a60c01b612a8e565b61265b67ba867e4ef348d1a360c01b612a8e565b809150505b949350505050565b61267c675a98b12456966aba60c01b610740565b61269067bee35484a90cfd2660c01b610740565b6126a4673ceb9bb2daab856d60c01b610740565b6126b86791fab911752e5b5c60c01b610740565b6126c06130c3565b6126d4672877b8446bdb5f0060c01b610740565b6126e867915d8b16ac69ed9860c01b610740565b6126fc671f5e91ee5a02596360c01b610740565b612710674b8e9096393c06f860c01b610740565b61272467301fc09d047c18d960c01b610740565b61272d81613cdc565b50565b600061274667e6997cbe175ef33460c01b610740565b61275a677a25fccec1173dd960c01b610740565b61276e67431301e0e2e31e9060c01b610740565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b60006127b267f561f09cfc8827bd60c01b610740565b6127c6673350b6d208da79ee60c01b610740565b6127da671896327d0b3f375a60c01b610740565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61281667e2dda3667fd3757160c01b610740565b61282a67526a718f37dbef7960c01b610740565b61283e67bc0095b6ec842fe060c01b610740565b6128526765a7b825dc91e38260c01b610740565b61285a612e7c565b61286e67e65dfa654e10de0360c01b610740565b61288267aeaf6d5fe58842a960c01b610740565b61289667370ad7169464cc0060c01b610740565b6128aa6739a00ff772ffbf9060c01b610740565b6128be6792e03ae1c25d108960c01b610740565b61290d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f9f565b50505050565b600061292967f6036d4dbbf1553b60c01b612a7d565b61293d67e574cfd0134a53a360c01b612a7d565b61295167481cad8a93626dbc60c01b612a7d565b63bc197c8160e01b905098975050505050505050565b600061297d673908573a227c011760c01b610740565b61299167f95a3d25f4a4d56660c01b610740565b6129a56701732dbf20a7ffe360c01b610740565b6129ad61279c565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129e59190614848565b602060405180830381865afa158015612a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a269190615996565b905090565b6000612a4167d55e6083e458695760c01b612a7d565b612a5567229756682a8526f660c01b612a7d565b612a69672d0f5a7f66d6c2a060c01b612a7d565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612ab067216671dc6f7d651060c01b610740565b612ac467fc696b44f549a3bd60c01b610740565b612ad8677d2f775bb38d794b60c01b610740565b612aec672c1b7774324d16e460c01b610740565b612af533611909565b8015612b115750612b10679d6b1a88bd04a29560c01b613f5a565b5b80612b7f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612b625750612b6167c1169fb68056496660c01b613f5a565b5b8015612b7e5750612b7d67290c2b81e499218360c01b613f5a565b5b5b80612bab5750612b8e33610946565b8015612baa5750612ba96777d0513cc85b13d160c01b613f5a565b5b5b612bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be190615a35565b60405180910390fd5b612bfe67023020f196fe710560c01b610740565b565b612c1467595c0e9f3251c28760c01b6131df565b612c28676c9e8facf275455460c01b6131df565b612c3c675fd1ba867bad8d9060c01b6131df565b612c50675d4405176a4c718660c01b6131df565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590615aa1565b60405180910390fd5b612cd2678d884950e2a04aa760c01b6131df565b612ce6672dca0c18590376fc60c01b6131df565b612cfa67a4f7a20d65860e4d60c01b6131df565b612d0e675167170fc48a61af60c01b6131df565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9190615b0d565b60405180910390fd5b612dae67d711364ae0826ec060c01b6131df565b612dc2670a57bd871732b8ad60c01b6131df565b612dd6675d1d32267273ab9260c01b6131df565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612e059190614848565b60405180910390a1612e2167dcc232605f03b59860c01b6131df565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e906731b64f8837124c3160c01b610740565b612ea467648db564106906a760c01b610740565b612eb867c4dbbfd60bd1214960c01b610740565b612ecc6701512b58157c381b60c01b610740565b612ed461279c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612f1e5750612f1d6747f66328b063331a60c01b613f5a565b5b80612f4a5750612f2d33611909565b8015612f495750612f4867e429b1ab88ceb31060c01b613f5a565b5b5b612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8090615b9f565b60405180910390fd5b612f9d6762f06635bf7b4acd60c01b610740565b565b612fb367bdfd46f0589b81c760c01b610740565b612fc767b0457063cebd82a360c01b610740565b612fdb675b626d0fcf3aa6ce60c01b610740565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051613004919061512d565b60006040518083038185875af1925050503d8060008114613041576040519150601f19603f3d011682016040523d82523d6000602084013e613046565b606091505b509150915061305f672fb56cccf4f3b66560c01b610740565b6130736747166df0733c52e860c01b610740565b816130a85761308c6719461c9227bd654a60c01b610740565b6130a06767b989a4f1f2a8f560c01b610740565b805160208201fd5b6130bc67c859f4ceb5b7418760c01b610740565b5050505050565b6130d767851edf0db3fe6a8060c01b610740565b6130eb67765412b7902e3abf60c01b610740565b6130ff67151d6c3106b9e49760c01b610740565b613113671b070d07d4380e9a60c01b610740565b61311c33611909565b8015613138575061313767d5ef82e5a5d379e060c01b613f5a565b5b8061318a57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156131895750613188670cc2ae0862027a8c60c01b613f5a565b5b5b6131c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c090615c0b565b60405180910390fd5b6131dd67362a52eb7781e15260c01b610740565b565b50565b60006132107f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613f65565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61324d675b243153b1324c8660c01b610740565b61326167703050f3f8cbae0160c01b610740565b61327567096f3ba87c8df4a960c01b610740565b61328967360d12c388c6eb2e60c01b610740565b6132916130c3565b50565b6132c07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613f6f565b60000160009054906101000a900460ff16156132e4576132df83613f79565b6133fd565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561334c57506040513d601f19601f820116820180604052508101906133499190615c40565b60015b61338b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338290615cdf565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e790615d71565b60405180910390fd5b506133fc838383614032565b5b505050565b50565b61341967e67927338dfde90a60c01b613402565b61342d670e51b57b7e9b4da560c01b613402565b61344167e3f66e826ec687ff60c01b613402565b6134556792d1df458e7acb7960c01b613402565b61345d61279c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c190615e03565b60405180910390fd5b6134de67f59af56761c9812d60c01b613402565b565b60006134f667bef7c9f9e10181f460c01b6137f8565b61350a67195d80a20eb6c55a60c01b6137f8565b61351e671429a8a5e3b067b460c01b6137f8565b61353267d826ce8361cc2e3d60c01b6137f8565b61359d60405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525061405e565b905092915050565b6135b967f347b6eb768867bd60c01b610740565b6135cd67e4b8fad4d2d1902a60c01b610740565b6135e16722ce8514c24b563d60c01b610740565b6135f5676bd35fd711427f6d60c01b610740565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff168092919061362490615e3b565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369790615ebb565b60405180910390fd5b6136b4675143066244fa845f60c01b610740565b50565b6136cb67cc5c47196db5bd6160c01b613402565b6136df678b55e749b3c352ab60c01b613402565b6136f367e6442311764077fa60c01b613402565b600081146137e05761370f671589e0478f7a186060c01b613402565b61372367d37e8b3807985e7360c01b613402565b61373767c2c62d2bb50a980360c01b613402565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161377f90615f01565b600060405180830381858888f193505050503d80600081146137bd576040519150601f19603f3d011682016040523d82523d6000602084013e6137c2565b606091505b505090506137da6714643eaa19656f6660c01b613402565b506137f5565b6137f467cc382f158ab6697a60c01b613402565b5b50565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138326703748e24ba0bf9ec60c01b610740565b613846670bc8db960be8c07860c01b610740565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061389b67019acf8eca98742f60c01b610740565b6138af67ffb0ee9b4a9774fe60c01b610740565b6138b881613960565b6138cc675b78c5bf4202c90360c01b610740565b6138e06725b6d74483d24a8260c01b610740565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139746717c7d6a68a08773960c01b6131df565b61398867cc8de6b882acb1a360c01b6131df565b61399c671ec2242cb4213daf60c01b6131df565b6139b067e7bfe4742339224760c01b6131df565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3490615f62565b60405180910390fd5b613a51676270d7427db14f5b60c01b6131df565b613a656704aa357520b4416d60c01b6131df565b613a79672b9382deb815da6060c01b6131df565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613aa89190614848565b60405180910390a1613ac467c36c72a8ecc3a90660c01b6131df565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b3267c36ba9a4464b6ea960c01b612a8b565b613b4667dbc59bf60721ec3760c01b612a8b565b613b5a67a9b899a25d7f84f360c01b612a8b565b613b6e676ccf2b04ef43fe2c60c01b612a8b565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf190615fce565b60405180910390fd5b613c0e677f234f21a7a7167460c01b612a8b565b613c22675dad748d723fc1a560c01b612a8b565b613c3667bcc423d1b918455e60c01b612a8b565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613c659190614848565b60405180910390a1613c8167ea5e8a43da197a0d60c01b612a8b565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613cf067473271421f468fd260c01b612a8b565b613d046792976a0e8d69a1f860c01b612a8b565b613d186722fdc4cd5a73662060c01b612a8b565b613d2c677f1705d0822221e360c01b612a8b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9290616060565b60405180910390fd5b613daf67d29ec12c81e5975160c01b612a8b565b613dc3675ce58ff31b29be9c60c01b612a8b565b613dd767e300c4231196178660c01b612a8b565b613deb6756d066aad6d03b2860c01b612a8b565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6f906160cc565b60405180910390fd5b613e8c67ceace18cb99efb4860c01b612a8b565b613ea067b298b03df19232ce60c01b612a8b565b613eb46771c3a697a02cf77360c01b612a8b565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613ee39190614848565b60405180910390a1613eff673094a602565cca5360c01b612a8b565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613f82816137fb565b613fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb89061615e565b60405180910390fd5b80613fee7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613f65565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61403b836140e2565b6000825111806140485750805b15614059576140578383614131565b505b505050565b60006140746717718d3268584e5860c01b61415e565b6140886719e6416798285bdf60c01b61415e565b61409c67a626d76b40db563f60c01b61415e565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6140eb81613f79565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614156838360405180606001604052806027815260200161625160279139614161565b905092915050565b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161418b919061512d565b600060405180830381855af49150503d80600081146141c6576040519150601f19603f3d011682016040523d82523d6000602084013e6141cb565b606091505b50915091506141dc868383876141e7565b925050509392505050565b6060831561424957600083510361424157614201856137fb565b614240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614237906161ca565b60405180910390fd5b5b829050614254565b614253838361425c565b5b949350505050565b60008251111561426f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a3919061622e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142eb826142c0565b9050919050565b6142fb816142e0565b811461430657600080fd5b50565b600081359050614318816142f2565b92915050565b6000819050919050565b6143318161431e565b811461433c57600080fd5b50565b60008135905061434e81614328565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261437957614378614354565b5b8235905067ffffffffffffffff81111561439657614395614359565b5b6020830191508360018202830111156143b2576143b161435e565b5b9250929050565b60008060008060008060008060c0898b0312156143d9576143d86142b6565b5b60006143e78b828c01614309565b98505060206143f88b828c01614309565b97505060406144098b828c01614309565b965050606061441a8b828c0161433f565b955050608089013567ffffffffffffffff81111561443b5761443a6142bb565b5b6144478b828c01614363565b945094505060a089013567ffffffffffffffff81111561446a576144696142bb565b5b6144768b828c01614363565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144bd81614488565b81146144c857600080fd5b50565b6000813590506144da816144b4565b92915050565b6000602082840312156144f6576144f56142b6565b5b6000614504848285016144cb565b91505092915050565b60008115159050919050565b6145228161450d565b82525050565b600060208201905061453d6000830184614519565b92915050565b600060208284031215614559576145586142b6565b5b600061456784828501614309565b91505092915050565b60008060008060006080868803121561458c5761458b6142b6565b5b600061459a88828901614309565b95505060206145ab88828901614309565b94505060406145bc8882890161433f565b935050606086013567ffffffffffffffff8111156145dd576145dc6142bb565b5b6145e988828901614363565b92509250509295509295909350565b61460181614488565b82525050565b600060208201905061461c60008301846145f8565b92915050565b6000819050919050565b61463581614622565b811461464057600080fd5b50565b6000813590506146528161462c565b92915050565b6146618161450d565b811461466c57600080fd5b50565b60008135905061467e81614658565b92915050565b6000806000806000608086880312156146a05761469f6142b6565b5b60006146ae88828901614309565b95505060206146bf88828901614643565b945050604086013567ffffffffffffffff8111156146e0576146df6142bb565b5b6146ec88828901614363565b935093505060606146ff8882890161466f565b9150509295509295909350565b60008083601f84011261472257614721614354565b5b8235905067ffffffffffffffff81111561473f5761473e614359565b5b60208301915083602082028301111561475b5761475a61435e565b5b9250929050565b60008083601f84011261477857614777614354565b5b8235905067ffffffffffffffff81111561479557614794614359565b5b6020830191508360208202830111156147b1576147b061435e565b5b9250929050565b600080600080604085870312156147d2576147d16142b6565b5b600085013567ffffffffffffffff8111156147f0576147ef6142bb565b5b6147fc8782880161470c565b9450945050602085013567ffffffffffffffff81111561481f5761481e6142bb565b5b61482b87828801614762565b925092505092959194509250565b614842816142e0565b82525050565b600060208201905061485d6000830184614839565b92915050565b600080fd5b6000610160828403121561487f5761487e614863565b5b81905092915050565b6000806000606084860312156148a1576148a06142b6565b5b600084013567ffffffffffffffff8111156148bf576148be6142bb565b5b6148cb86828701614868565b93505060206148dc86828701614643565b92505060406148ed8682870161433f565b9150509250925092565b6149008161431e565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600061492c826142e0565b9050919050565b61493c81614921565b811461494757600080fd5b50565b60008135905061495981614933565b92915050565b60008060408385031215614976576149756142b6565b5b60006149848582860161494a565b925050602061499585828601614309565b9150509250929050565b60006149aa826142c0565b9050919050565b6149ba8161499f565b81146149c557600080fd5b50565b6000813590506149d7816149b1565b92915050565b600080604083850312156149f4576149f36142b6565b5b6000614a02858286016149c8565b9250506020614a138582860161433f565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a6b82614a22565b810181811067ffffffffffffffff82111715614a8a57614a89614a33565b5b80604052505050565b6000614a9d6142ac565b9050614aa98282614a62565b919050565b600067ffffffffffffffff821115614ac957614ac8614a33565b5b614ad282614a22565b9050602081019050919050565b82818337600083830152505050565b6000614b01614afc84614aae565b614a93565b905082815260208101848484011115614b1d57614b1c614a1d565b5b614b28848285614adf565b509392505050565b600082601f830112614b4557614b44614354565b5b8135614b55848260208601614aee565b91505092915050565b60008060408385031215614b7557614b746142b6565b5b6000614b8385828601614309565b925050602083013567ffffffffffffffff811115614ba457614ba36142bb565b5b614bb085828601614b30565b9150509250929050565b614bc381614622565b82525050565b6000602082019050614bde6000830184614bba565b92915050565b60008060008060608587031215614bfe57614bfd6142b6565b5b6000614c0c87828801614309565b9450506020614c1d87828801614643565b935050604085013567ffffffffffffffff811115614c3e57614c3d6142bb565b5b614c4a87828801614363565b925092505092959194509250565b6000819050919050565b6000614c7d614c78614c73846142c0565b614c58565b6142c0565b9050919050565b6000614c8f82614c62565b9050919050565b6000614ca182614c84565b9050919050565b614cb181614c96565b82525050565b6000602082019050614ccc6000830184614ca8565b92915050565b60008060008060608587031215614cec57614ceb6142b6565b5b6000614cfa87828801614309565b9450506020614d0b8782880161433f565b935050604085013567ffffffffffffffff811115614d2c57614d2b6142bb565b5b614d3887828801614363565b925092505092959194509250565b60008083601f840112614d5c57614d5b614354565b5b8235905067ffffffffffffffff811115614d7957614d78614359565b5b602083019150836020820283011115614d9557614d9461435e565b5b9250929050565b60008060008060008060008060a0898b031215614dbc57614dbb6142b6565b5b6000614dca8b828c01614309565b9850506020614ddb8b828c01614309565b975050604089013567ffffffffffffffff811115614dfc57614dfb6142bb565b5b614e088b828c01614d46565b9650965050606089013567ffffffffffffffff811115614e2b57614e2a6142bb565b5b614e378b828c01614d46565b9450945050608089013567ffffffffffffffff811115614e5a57614e596142bb565b5b614e668b828c01614363565b92509250509295985092959890939650565b60008060008060008060a08789031215614e9557614e946142b6565b5b6000614ea389828a01614309565b9650506020614eb489828a01614309565b9550506040614ec589828a0161433f565b9450506060614ed689828a0161433f565b935050608087013567ffffffffffffffff811115614ef757614ef66142bb565b5b614f0389828a01614363565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f4c8261431e565b9150614f578361431e565b9250828203905081811115614f6f57614f6e614f12565b5b92915050565b600080fd5b600080fd5b60008085851115614f9357614f92614f75565b5b83861115614fa457614fa3614f7a565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000614fde8383614fba565b82614fe98135614622565b92506020821015615029576150247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802614fc5565b831692505b505092915050565b60008060006060848603121561504a576150496142b6565b5b6000615058868287016149c8565b935050602084013567ffffffffffffffff811115615079576150786142bb565b5b61508586828701614b30565b925050604084013567ffffffffffffffff8111156150a6576150a56142bb565b5b6150b286828701614b30565b9150509250925092565b600081519050919050565b600081905092915050565b60005b838110156150f05780820151818401526020810190506150d5565b60008484015250505050565b6000615107826150bc565b61511181856150c7565b93506151218185602086016150d2565b80840191505092915050565b600061513982846150fc565b915081905092915050565b600082825260208201905092915050565b6000615160826150bc565b61516a8185615144565b935061517a8185602086016150d2565b61518381614a22565b840191505092915050565b600060208201905081810360008301526151a88184615155565b905092915050565b60006040820190506151c56000830185614bba565b81810360208301526151d78184615155565b90509392505050565b6000815190506151ef816144b4565b92915050565b60006020828403121561520b5761520a6142b6565b5b6000615219848285016151e0565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061528f603a83615222565b915061529a82615233565b604082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615350602d83615222565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b600060ff82169050919050565b61539c81615386565b82525050565b60006080820190506153b76000830187614bba565b6153c46020830186615393565b6153d16040830185614bba565b6153de6060830184614bba565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000615443603383615222565b915061544e826153e7565b604082019050919050565b6000602082019050818103600083015261547281615436565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126154a5576154a4615479565b5b80840192508235915067ffffffffffffffff8211156154c7576154c661547e565b5b6020830192506001820236038313156154e3576154e2615483565b5b509250929050565b60006154f68261431e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361552857615527614f12565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061558f603383615222565b915061559a82615533565b604082019050919050565b600060208201905081810360008301526155be81615582565b9050919050565b60006040820190506155da6000830185614839565b6155e76020830184614839565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061564a602c83615222565b9150615655826155ee565b604082019050919050565b600060208201905081810360008301526156798161563d565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006156dc602c83615222565b91506156e782615680565b604082019050919050565b6000602082019050818103600083015261570b816156cf565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061576e602e83615222565b915061577982615712565b604082019050919050565b6000602082019050818103600083015261579d81615761565b9050919050565b6000819050919050565b60006157c96157c46157bf846157a4565b614c58565b615386565b9050919050565b6157d9816157ae565b82525050565b60006020820190506157f460008301846157d0565b92915050565b6158038161499f565b82525050565b600060408201905061581e60008301856157fa565b61582b60208301846148f7565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061588e603883615222565b915061589982615832565b604082019050919050565b600060208201905081810360008301526158bd81615881565b9050919050565b60006158d08385615144565b93506158dd838584614adf565b6158e683614a22565b840190509392505050565b60006080820190506159066000830188614839565b6159136020830187614bba565b81810360408301526159268185876158c4565b90506159356060830184614519565b9695505050505050565b60008151905061594e81614658565b92915050565b60006020828403121561596a576159696142b6565b5b60006159788482850161593f565b91505092915050565b60008151905061599081614328565b92915050565b6000602082840312156159ac576159ab6142b6565b5b60006159ba84828501615981565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615a1f602883615222565b9150615a2a826159c3565b604082019050919050565b60006020820190508181036000830152615a4e81615a12565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615a8b601a83615222565b9150615a9682615a55565b602082019050919050565b60006020820190508181036000830152615aba81615a7e565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615af7601b83615222565b9150615b0282615ac1565b602082019050919050565b60006020820190508181036000830152615b2681615aea565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615b89602983615222565b9150615b9482615b2d565b604082019050919050565b60006020820190508181036000830152615bb881615b7c565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615bf5601c83615222565b9150615c0082615bbf565b602082019050919050565b60006020820190508181036000830152615c2481615be8565b9050919050565b600081519050615c3a8161462c565b92915050565b600060208284031215615c5657615c556142b6565b5b6000615c6484828501615c2b565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615cc9602e83615222565b9150615cd482615c6d565b604082019050919050565b60006020820190508181036000830152615cf881615cbc565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000615d5b602983615222565b9150615d6682615cff565b604082019050919050565b60006020820190508181036000830152615d8a81615d4e565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000615ded602483615222565b9150615df882615d91565b604082019050919050565b60006020820190508181036000830152615e1c81615de0565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000615e4682615e23565b91506bffffffffffffffffffffffff8203615e6457615e63614f12565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000615ea5601f83615222565b9150615eb082615e6f565b602082019050919050565b60006020820190508181036000830152615ed481615e98565b9050919050565b50565b6000615eeb6000836150c7565b9150615ef682615edb565b600082019050919050565b6000615f0c82615ede565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b6000615f4c601883615222565b9150615f5782615f16565b602082019050919050565b60006020820190508181036000830152615f7b81615f3f565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b6000615fb8602083615222565b9150615fc382615f82565b602082019050919050565b60006020820190508181036000830152615fe781615fab565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b600061604a602883615222565b915061605582615fee565b604082019050919050565b600060208201905081810360008301526160798161603d565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b60006160b6601c83615222565b91506160c182616080565b602082019050919050565b600060208201905081810360008301526160e5816160a9565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000616148602d83615222565b9150616153826160ec565b604082019050919050565b600060208201905081810360008301526161778161613b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006161b4601d83615222565b91506161bf8261617e565b602082019050919050565b600060208201905081810360008301526161e3816161a7565b9050919050565b600081519050919050565b6000616200826161ea565b61620a8185615222565b935061621a8185602086016150d2565b61622381614a22565b840191505092915050565b6000602082019050818103600083015261624881846161f5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122052ef28c8aab179aabaebb5199bdf2289ef0db3704f4aa8159a9c8efca48f9c2464736f6c63430008110033"; type TestAggregatedAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts b/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts index ea241c61..1b50284f 100644 --- a/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts @@ -116,7 +116,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b5061065e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a5e9585f1161005b578063a5e9585f146100b2578063be65ab8c146100e2578063caece69314610112578063d55565441461011c5761007d565b806306661abd14610082578063278ddd3c1461008c578063a1b4689014610096575b600080fd5b61008a61013a565b005b6100946101c9565b005b6100b060048036038101906100ab9190610371565b610202565b005b6100cc60048036038101906100c791906103d1565b61025b565b6040516100d9919061040d565b60405180910390f35b6100fc60048036038101906100f79190610486565b610273565b604051610109919061040d565b60405180910390f35b61011a61028b565b005b6101246102c6565b604051610131919061040d565b60405180910390f35b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461018591906104e2565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b7ffb3b4d6258432a9a3d78dd9bffbcb6cfb1bd94f58da35fd530d08da7d1d05832336040516101f89190610547565b60405180910390a1565b6000600190505b838111610255576002600081548092919061022390610562565b91905055508060016000600254815260200190815260200160002081905550808061024d90610562565b915050610209565b50505050565b60016020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bd90610608565b60405180910390fd5b60025481565b600080fd5b600080fd5b6000819050919050565b6102e9816102d6565b81146102f457600080fd5b50565b600081359050610306816102e0565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103315761033061030c565b5b8235905067ffffffffffffffff81111561034e5761034d610311565b5b60208301915083600182028301111561036a57610369610316565b5b9250929050565b60008060006040848603121561038a576103896102cc565b5b6000610398868287016102f7565b935050602084013567ffffffffffffffff8111156103b9576103b86102d1565b5b6103c58682870161031b565b92509250509250925092565b6000602082840312156103e7576103e66102cc565b5b60006103f5848285016102f7565b91505092915050565b610407816102d6565b82525050565b600060208201905061042260008301846103fe565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061045382610428565b9050919050565b61046381610448565b811461046e57600080fd5b50565b6000813590506104808161045a565b92915050565b60006020828403121561049c5761049b6102cc565b5b60006104aa84828501610471565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006104ed826102d6565b91506104f8836102d6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561052d5761052c6104b3565b5b828201905092915050565b61054181610448565b82525050565b600060208201905061055c6000830184610538565b92915050565b600061056d826102d6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156105a05761059f6104b3565b5b600182019050919050565b600082825260208201905092915050565b7f636f756e74206661696c65640000000000000000000000000000000000000000600082015250565b60006105f2600c836105ab565b91506105fd826105bc565b602082019050919050565b60006020820190508181036000830152610621816105e5565b905091905056fea2646970667358221220335534e66bb89f3bce801158a87f55df9c2eb500d6611484e0f03925cdca409464736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b50610742806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a5e9585f1161005b578063a5e9585f146100b2578063be65ab8c146100e2578063caece69314610112578063d55565441461011c5761007d565b806306661abd14610082578063278ddd3c1461008c578063a1b4689014610096575b600080fd5b61008a61013a565b005b6100946101f1565b005b6100b060048036038101906100ab9190610478565b610266565b005b6100cc60048036038101906100c791906104d8565b610323565b6040516100d99190610514565b60405180910390f35b6100fc60048036038101906100f7919061058d565b61033b565b6040516101099190610514565b60405180910390f35b61011a610353565b005b6101246103ca565b6040516101319190610514565b60405180910390f35b61014e67c36fedd94ca0a2de60c01b6103d0565b610162671f14039bc276c36c60c01b6103d0565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546101ad91906105e9565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610205674f2ad6ba500318cb60c01b6103d0565b610219678c7c6e2b0e91a39f60c01b6103d0565b61022d6742fc7442c2550cfd60c01b6103d0565b7ffb3b4d6258432a9a3d78dd9bffbcb6cfb1bd94f58da35fd530d08da7d1d058323360405161025c919061062c565b60405180910390a1565b61027a67254d2649e410128860c01b6103d0565b61028e67ea8ced0b4f84014e60c01b6103d0565b6102a2675f53018e95f3a8b360c01b6103d0565b6000600190505b83811161031d576102c46789306646c5ccabae60c01b6103d0565b600260008154809291906102d790610647565b91905055506102f0671239800a0abd863a60c01b6103d0565b8060016000600254815260200190815260200160002081905550808061031590610647565b9150506102a9565b50505050565b60016020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b610367674c33878c067f30ef60c01b6103d0565b61037b67ce5ac656eb2fa4c560c01b6103d0565b61038f67bca8f9997a55befd60c01b6103d0565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c1906106ec565b60405180910390fd5b60025481565b50565b600080fd5b600080fd5b6000819050919050565b6103f0816103dd565b81146103fb57600080fd5b50565b60008135905061040d816103e7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261043857610437610413565b5b8235905067ffffffffffffffff81111561045557610454610418565b5b6020830191508360018202830111156104715761047061041d565b5b9250929050565b600080600060408486031215610491576104906103d3565b5b600061049f868287016103fe565b935050602084013567ffffffffffffffff8111156104c0576104bf6103d8565b5b6104cc86828701610422565b92509250509250925092565b6000602082840312156104ee576104ed6103d3565b5b60006104fc848285016103fe565b91505092915050565b61050e816103dd565b82525050565b60006020820190506105296000830184610505565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061055a8261052f565b9050919050565b61056a8161054f565b811461057557600080fd5b50565b60008135905061058781610561565b92915050565b6000602082840312156105a3576105a26103d3565b5b60006105b184828501610578565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006105f4826103dd565b91506105ff836103dd565b9250828201905080821115610617576106166105ba565b5b92915050565b6106268161054f565b82525050565b6000602082019050610641600083018461061d565b92915050565b6000610652826103dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610684576106836105ba565b5b600182019050919050565b600082825260208201905092915050565b7f636f756e74206661696c65640000000000000000000000000000000000000000600082015250565b60006106d6600c8361068f565b91506106e1826106a0565b602082019050919050565b60006020820190508181036000830152610705816106c9565b905091905056fea2646970667358221220dcb608c002f238f81a6c5664764429f2cc2998f2c7d1d79a246963eade9076fe64736f6c63430008110033"; type TestCounterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts b/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts index 98a15c4e..30a2ecbb 100644 --- a/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts @@ -274,7 +274,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b5060405162001561380380620015618339818101604052810190620000379190620001de565b80620000586200004c6200009460201b60201c565b6200009c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000210565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001928262000165565b9050919050565b6000620001a68262000185565b9050919050565b620001b88162000199565b8114620001c457600080fd5b50565b600081519050620001d881620001ad565b92915050565b600060208284031215620001f757620001f662000160565b5b60006200020784828501620001c7565b91505092915050565b6080516113046200025d6000396000818161026d01528181610304015281816103ec01528181610418015281816104a201528181610532015281816105d1015261084801526113046000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c191906109fb565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610abc565b6102fa565b005b3480156100fd57600080fd5b50610106610393565b005b34801561011457600080fd5b5061011d6103a7565b60405161012a9190610b1d565b60405180910390f35b34801561013f57600080fd5b5061015a60048036038101906101559190610bc2565b6103d0565b005b34801561016857600080fd5b506101716103ea565b60405161017e9190610c95565b60405180910390f35b34801561019357600080fd5b5061019c61040e565b005b3480156101aa57600080fd5b506101c560048036038101906101c09190610cb0565b610498565b005b3480156101d357600080fd5b506101dc61052e565b6040516101e99190610cec565b60405180910390f35b6101fa6105cf565b005b34801561020857600080fd5b50610223600480360381019061021e9190610d33565b61065d565b005b34801561023157600080fd5b5061024c60048036038101906102479190610dbb565b6106e1565b60405161025a929190610ec3565b60405180910390f35b61026b610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016102c59190610f02565b6000604051808303818588803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050505050565b610302610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161035d929190610f2c565b600060405180830381600087803b15801561037757600080fd5b505af115801561038b573d6000803e3d6000fd5b505050505050565b61039b610704565b6103a56000610782565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d8610846565b6103e4848484846108d6565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610416610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050565b6104a0610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016104f99190610f55565b600060405180830381600087803b15801561051357600080fd5b505af1158015610527573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105899190610b1d565b602060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190610f85565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016106299190610b1d565b6000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050565b610665610704565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90611035565b60405180910390fd5b6106de81610782565b50565b606060006106ed610846565b6106f8858585610911565b91509150935093915050565b61070c610974565b73ffffffffffffffffffffffffffffffffffffffff1661072a6103a7565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610777906110a1565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061110d565b60405180910390fd5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890611179565b60405180910390fd5b6060600080808680610120019061092891906111a8565b601490809261093993929190611215565b810190610946919061128e565b915091506109566000828461097c565b92506040518060200160405280600081525093505050935093915050565b600033905090565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b856109a45760006109a7565b60015b60ff16171790509392505050565b600080fd5b600080fd5b600063ffffffff82169050919050565b6109d8816109bf565b81146109e357600080fd5b50565b6000813590506109f5816109cf565b92915050565b600060208284031215610a1157610a106109b5565b5b6000610a1f848285016109e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a5382610a28565b9050919050565b610a6381610a48565b8114610a6e57600080fd5b50565b600081359050610a8081610a5a565b92915050565b6000819050919050565b610a9981610a86565b8114610aa457600080fd5b50565b600081359050610ab681610a90565b92915050565b60008060408385031215610ad357610ad26109b5565b5b6000610ae185828601610a71565b9250506020610af285828601610aa7565b9150509250929050565b6000610b0782610a28565b9050919050565b610b1781610afc565b82525050565b6000602082019050610b326000830184610b0e565b92915050565b60038110610b4557600080fd5b50565b600081359050610b5781610b38565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610b8257610b81610b5d565b5b8235905067ffffffffffffffff811115610b9f57610b9e610b62565b5b602083019150836001820283011115610bbb57610bba610b67565b5b9250929050565b60008060008060608587031215610bdc57610bdb6109b5565b5b6000610bea87828801610b48565b945050602085013567ffffffffffffffff811115610c0b57610c0a6109ba565b5b610c1787828801610b6c565b93509350506040610c2a87828801610aa7565b91505092959194509250565b6000819050919050565b6000610c5b610c56610c5184610a28565b610c36565b610a28565b9050919050565b6000610c6d82610c40565b9050919050565b6000610c7f82610c62565b9050919050565b610c8f81610c74565b82525050565b6000602082019050610caa6000830184610c86565b92915050565b600060208284031215610cc657610cc56109b5565b5b6000610cd484828501610a71565b91505092915050565b610ce681610a86565b82525050565b6000602082019050610d016000830184610cdd565b92915050565b610d1081610afc565b8114610d1b57600080fd5b50565b600081359050610d2d81610d07565b92915050565b600060208284031215610d4957610d486109b5565b5b6000610d5784828501610d1e565b91505092915050565b600080fd5b60006101608284031215610d7c57610d7b610d60565b5b81905092915050565b6000819050919050565b610d9881610d85565b8114610da357600080fd5b50565b600081359050610db581610d8f565b92915050565b600080600060608486031215610dd457610dd36109b5565b5b600084013567ffffffffffffffff811115610df257610df16109ba565b5b610dfe86828701610d65565b9350506020610e0f86828701610da6565b9250506040610e2086828701610aa7565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e64578082015181840152602081019050610e49565b83811115610e73576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e9582610e2a565b610e9f8185610e35565b9350610eaf818560208601610e46565b610eb881610e79565b840191505092915050565b60006040820190508181036000830152610edd8185610e8a565b9050610eec6020830184610cdd565b9392505050565b610efc816109bf565b82525050565b6000602082019050610f176000830184610ef3565b92915050565b610f2681610a48565b82525050565b6000604082019050610f416000830185610f1d565b610f4e6020830184610cdd565b9392505050565b6000602082019050610f6a6000830184610f1d565b92915050565b600081519050610f7f81610a90565b92915050565b600060208284031215610f9b57610f9a6109b5565b5b6000610fa984828501610f70565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061101f602683610fb2565b915061102a82610fc3565b604082019050919050565b6000602082019050818103600083015261104e81611012565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061108b602083610fb2565b915061109682611055565b602082019050919050565b600060208201905081810360008301526110ba8161107e565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b60006110f7601583610fb2565b9150611102826110c1565b602082019050919050565b60006020820190508181036000830152611126816110ea565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611163600d83610fb2565b915061116e8261112d565b602082019050919050565b6000602082019050818103600083015261119281611156565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126111c5576111c4611199565b5b80840192508235915067ffffffffffffffff8211156111e7576111e661119e565b5b602083019250600182023603831315611203576112026111a3565b5b509250929050565b600080fd5b600080fd5b600080858511156112295761122861120b565b5b8386111561123a57611239611210565b5b6001850283019150848603905094509492505050565b600065ffffffffffff82169050919050565b61126b81611250565b811461127657600080fd5b50565b60008135905061128881611262565b92915050565b600080604083850312156112a5576112a46109b5565b5b60006112b385828601611279565b92505060206112c485828601611279565b915050925092905056fea2646970667358221220ef7137fdd6e05e34117c5f0ef14e83a5c065d1d9eca823e40a0ab991beb9e3e864736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b5060405162001a3c38038062001a3c833981810160405281019062000037919062000238565b80620000586200004c620000e860201b60201c565b620000f060201b60201c565b6200007467aabb336c9ce83de860c01b620001b460201b60201c565b62000090672d07becd259a4ef060c01b620001b460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620000e167df1b572e3856863860c01b620001b760201b60201c565b506200026a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ec82620001bf565b9050919050565b60006200020082620001df565b9050919050565b6200021281620001f3565b81146200021e57600080fd5b50565b600081519050620002328162000207565b92915050565b600060208284031215620002515762000250620001ba565b5b6000620002618482850162000221565b91505092915050565b608051611785620002b7600039600081816102d1015281816103cc01528181610518015281816105a801528181610696015281816107620152818161083d0152610b6a01526117856000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c19190610e85565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610f46565b61035e565b005b3480156100fd57600080fd5b5061010661045b565b005b34801561011457600080fd5b5061011d61046f565b60405161012a9190610fa7565b60405180910390f35b34801561013f57600080fd5b5061015a6004803603810190610155919061104c565b610498565b005b34801561016857600080fd5b50610171610516565b60405161017e919061111f565b60405180910390f35b34801561019357600080fd5b5061019c61053a565b005b3480156101aa57600080fd5b506101c560048036038101906101c0919061113a565b610628565b005b3480156101d357600080fd5b506101dc610722565b6040516101e99190611176565b60405180910390f35b6101fa6107ff565b005b34801561020857600080fd5b50610223600480360381019061021e91906111bd565b6108c9565b005b34801561023157600080fd5b5061024c60048036038101906102479190611245565b61094c565b60405161025a929190611344565b60405180910390f35b61027767b8237d27482ab06b60c01b6109d3565b61027f6109d6565b61029367e2f107173549500460c01b6109d3565b6102a76701033209d47e5b2460c01b6109d3565b6102bb67dcd4652c61f0b32d60c01b6109d3565b6102cf67eae392c3eb511cc760c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016103299190611383565b6000604051808303818588803b15801561034257600080fd5b505af1158015610356573d6000803e3d6000fd5b505050505050565b610372672907e6d97c3d1da360c01b6109d3565b61037a6109d6565b61038e678ac019c63563710260c01b6109d3565b6103a267da1f1c840719888260c01b6109d3565b6103b667bc135ce98e9f326f60c01b6109d3565b6103ca67532d977f60999f3e60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016104259291906113ad565b600060405180830381600087803b15801561043f57600080fd5b505af1158015610453573d6000803e3d6000fd5b505050505050565b6104636109d6565b61046d6000610a54565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104ac672cf57c41b8b89fcb60c01b6109d3565b6104c06799497fbe705cd9f760c01b6109d3565b6104d4679b4512fe9e58bae960c01b6109d3565b6104dc610b18565b6104f06793ce2f3709fe770560c01b6109d3565b6105046790067c65a6f5d3a860c01b6109d3565b61051084848484610c0c565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e67ec8a9719e7b677d060c01b6109d3565b6105566109d6565b61056a67672cc496b6067cea60c01b6109d3565b61057e674fdbd001b77629ae60c01b6109d3565b610592677362eae3491c0ae160c01b6109d3565b6105a66797f9e99fb1d4b33860c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561060e57600080fd5b505af1158015610622573d6000803e3d6000fd5b50505050565b61063c67c9ef1b986fb51fe860c01b6109d3565b6106446109d6565b61065867de53cad8928d67f560c01b6109d3565b61066c677af1d989d252676f60c01b6109d3565b610680676fd423196847dbb160c01b6109d3565b61069467097023434434ee0460c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016106ed91906113d6565b600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b5050505050565b600061073867f6be01970597753160c01b6109d3565b61074c673f87ae81816372b460c01b6109d3565b61076067bd328ab4ce68c2fb60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107b99190610fa7565b602060405180830381865afa1580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa9190611406565b905090565b610813673943ebd1bec8d2d660c01b6109d3565b6108276702fc4196924a47ac60c01b6109d3565b61083b675d10604969f00bcf60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108959190610fa7565b6000604051808303818588803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505050565b6108d16109d6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906114b6565b60405180910390fd5b61094981610a54565b50565b606060006109646791cf27427781cd8860c01b6109d3565b610978676434b0ee41880ab260c01b6109d3565b61098c67f2c91afe86e9062d60c01b6109d3565b610994610b18565b6109a86723ccedb6dfbcc30860c01b6109d3565b6109bc67287492035946b96c60c01b6109d3565b6109c7858585610c97565b91509150935093915050565b50565b6109de610d73565b73ffffffffffffffffffffffffffffffffffffffff166109fc61046f565b73ffffffffffffffffffffffffffffffffffffffff1614610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990611522565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b2c6793fe0ed3ca04f82b60c01b6109d3565b610b40678abd782107e62dce60c01b6109d3565b610b5467b9c2ce2852bf0cf360c01b6109d3565b610b6867f8314810c2ffd6e460c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed9061158e565b60405180910390fd5b610c0a677eb1fed1a5060b5e60c01b6109d3565b565b610c2067fadd006a881f054660c01b6109d3565b610c3467d9873e623a945ead60c01b6109d3565b610c4867b1300829c5ca164560c01b6109d3565b610c5c67b80ccfd3afb0094c60c01b6109d3565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906115fa565b60405180910390fd5b60606000610caf67eb8470f1ec4622b160c01b610d7b565b610cc367415a1cea66cc082c60c01b610d7b565b610cd76780c0c917d680294a60c01b610d7b565b610ceb67c207178efe70c0d060c01b610d7b565b60008086806101200190610cff9190611629565b6014908092610d1093929190611696565b810190610d1d919061170f565b91509150610d35676eb41316c87a8eda60c01b610d7b565b610d4160008284610d7e565b9250610d57679b2f16d97cd7f94c60c01b610d7b565b6040518060200160405280600081525093505050935093915050565b600033905090565b50565b6000610d9467f46661bb4e8bad1e60c01b610e2a565b610da867ad115cf58922913f60c01b610e2a565b610dbc67e939de70e4ee463c60c01b610e2a565b60d08265ffffffffffff16901b60a08465ffffffffffff16901b858015610df35750610df2675d24490627414a1d60c01b610e2d565b5b80610e0e5750610e0d6748f460bd74afa2fc60c01b610e38565b5b610e19576000610e1c565b60015b60ff16171790509392505050565b50565b600060019050919050565b6000919050565b600080fd5b600080fd5b600063ffffffff82169050919050565b610e6281610e49565b8114610e6d57600080fd5b50565b600081359050610e7f81610e59565b92915050565b600060208284031215610e9b57610e9a610e3f565b5b6000610ea984828501610e70565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610edd82610eb2565b9050919050565b610eed81610ed2565b8114610ef857600080fd5b50565b600081359050610f0a81610ee4565b92915050565b6000819050919050565b610f2381610f10565b8114610f2e57600080fd5b50565b600081359050610f4081610f1a565b92915050565b60008060408385031215610f5d57610f5c610e3f565b5b6000610f6b85828601610efb565b9250506020610f7c85828601610f31565b9150509250929050565b6000610f9182610eb2565b9050919050565b610fa181610f86565b82525050565b6000602082019050610fbc6000830184610f98565b92915050565b60038110610fcf57600080fd5b50565b600081359050610fe181610fc2565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261100c5761100b610fe7565b5b8235905067ffffffffffffffff81111561102957611028610fec565b5b60208301915083600182028301111561104557611044610ff1565b5b9250929050565b6000806000806060858703121561106657611065610e3f565b5b600061107487828801610fd2565b945050602085013567ffffffffffffffff81111561109557611094610e44565b5b6110a187828801610ff6565b935093505060406110b487828801610f31565b91505092959194509250565b6000819050919050565b60006110e56110e06110db84610eb2565b6110c0565b610eb2565b9050919050565b60006110f7826110ca565b9050919050565b6000611109826110ec565b9050919050565b611119816110fe565b82525050565b60006020820190506111346000830184611110565b92915050565b6000602082840312156111505761114f610e3f565b5b600061115e84828501610efb565b91505092915050565b61117081610f10565b82525050565b600060208201905061118b6000830184611167565b92915050565b61119a81610f86565b81146111a557600080fd5b50565b6000813590506111b781611191565b92915050565b6000602082840312156111d3576111d2610e3f565b5b60006111e1848285016111a8565b91505092915050565b600080fd5b60006101608284031215611206576112056111ea565b5b81905092915050565b6000819050919050565b6112228161120f565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b60008060006060848603121561125e5761125d610e3f565b5b600084013567ffffffffffffffff81111561127c5761127b610e44565b5b611288868287016111ef565b935050602061129986828701611230565b92505060406112aa86828701610f31565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b838110156112ee5780820151818401526020810190506112d3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611316826112b4565b61132081856112bf565b93506113308185602086016112d0565b611339816112fa565b840191505092915050565b6000604082019050818103600083015261135e818561130b565b905061136d6020830184611167565b9392505050565b61137d81610e49565b82525050565b60006020820190506113986000830184611374565b92915050565b6113a781610ed2565b82525050565b60006040820190506113c2600083018561139e565b6113cf6020830184611167565b9392505050565b60006020820190506113eb600083018461139e565b92915050565b60008151905061140081610f1a565b92915050565b60006020828403121561141c5761141b610e3f565b5b600061142a848285016113f1565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114a0602683611433565b91506114ab82611444565b604082019050919050565b600060208201905081810360008301526114cf81611493565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061150c602083611433565b9150611517826114d6565b602082019050919050565b6000602082019050818103600083015261153b816114ff565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000611578601583611433565b915061158382611542565b602082019050919050565b600060208201905081810360008301526115a78161156b565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b60006115e4600d83611433565b91506115ef826115ae565b602082019050919050565b60006020820190508181036000830152611613816115d7565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126116465761164561161a565b5b80840192508235915067ffffffffffffffff8211156116685761166761161f565b5b60208301925060018202360383131561168457611683611624565b5b509250929050565b600080fd5b600080fd5b600080858511156116aa576116a961168c565b5b838611156116bb576116ba611691565b5b6001850283019150848603905094509492505050565b600065ffffffffffff82169050919050565b6116ec816116d1565b81146116f757600080fd5b50565b600081359050611709816116e3565b92915050565b6000806040838503121561172657611725610e3f565b5b6000611734858286016116fa565b9250506020611745858286016116fa565b915050925092905056fea26469706673582212200e14cd1cbad54c57a43c9a344ec1ca5415b1b8e39219e32351a28ba117307a1f64736f6c63430008110033"; type TestExpirePaymasterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts index e295e925..dd9c1aae 100644 --- a/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts @@ -15,6 +15,28 @@ const _abi = [ stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -53,42 +75,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -96,24 +112,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -135,17 +171,24 @@ const _abi = [ { indexed: false, internalType: "address", - name: "oldRegistry", + name: "newOwner", type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, internalType: "address", - name: "newRegistry", + name: "removedOwner", type: "address", }, ], - name: "RegistryChanged", + name: "OwnerRemoved", type: "event", }, { @@ -163,22 +206,35 @@ const _abi = [ }, { inputs: [], - name: "_registry", - outputs: [ + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ { internalType: "address", - name: "", + name: "_newGuardian", type: "address", }, ], - stateMutability: "view", + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { - inputs: [], - name: "addDeposit", + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address", + }, + ], + name: "addOwner", outputs: [], - stateMutability: "payable", + stateMutability: "nonpayable", type: "function", }, { @@ -204,30 +260,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "canImplementInterfaceForAddress", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "entryPoint", @@ -302,11 +334,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "anOwner", @@ -320,50 +347,132 @@ const _abi = [ }, { inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSig", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "message", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, + ], + name: "isValidSigImpl", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -392,14 +501,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -407,7 +516,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -435,13 +544,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -453,16 +567,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ { internalType: "address", name: "", type: "address", }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -517,15 +652,47 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", + type: "address", + }, + ], + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", type: "address", }, ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], stateMutability: "view", type: "function", }, @@ -538,17 +705,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -564,7 +731,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -580,19 +747,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -735,7 +889,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b506080516141e061007b60003960008181610c3601528181610cc501528181610f4801528181610fd7015261108701526141e06000f3fe6080604052600436106101845760003560e01c80634d44560d116100d1578063affed0e01161008a578063c0c53b8b11610064578063c0c53b8b14610582578063c399ec88146105ab578063cf6dca55146105d6578063f23a6e61146105ff5761018b565b8063affed0e014610503578063b0d691fe1461052e578063b61d27f6146105595761018b565b80634d44560d146104125780634f1ef2861461043b57806352d1902d1461045757806379cbc5fa146104825780637b103999146104ad5780638da5cb5b146104d85761018b565b806320c13b0b1161013e5780633a871cdd116101185780633a871cdd146103515780633e4769511461038e5780633fb5a7a1146103cb5780634a58db19146104085761018b565b806320c13b0b146102ae578063249cb3fa146102eb5780633659cfe6146103285761018b565b806223de2914610190578063150b7a02146101b95780631626ba7e146101f657806318dfb3c7146102335780631a5da6c81461025c5780631b71bb6e146102855761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101b760048036038101906101b29190612539565b61063c565b005b3480156101c557600080fd5b506101e060048036038101906101db9190612608565b610681565b6040516101ed91906126cb565b60405180910390f35b34801561020257600080fd5b5061021d6004803603810190610218919061271c565b610696565b60405161022a91906126cb565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612828565b610779565b005b34801561026857600080fd5b50610283600480360381019061027e91906128a9565b61088b565b005b34801561029157600080fd5b506102ac60048036038101906102a791906128a9565b61099f565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906128d6565b610ab6565b6040516102e291906126cb565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612957565b610b9c565b60405161031f91906129a6565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a91906128a9565b610c34565b005b34801561035d57600080fd5b50610378600480360381019061037391906129e6565b610dbd565b6040516103859190612a64565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906128a9565b610e07565b6040516103c29190612aa0565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed91906128a9565b610e2c565b6040516103ff9190612aa0565b60405180910390f35b610410610e51565b005b34801561041e57600080fd5b5061043960048036038101906104349190612af9565b610ec6565b005b61045560048036038101906104509190612c7a565b610f46565b005b34801561046357600080fd5b5061046c611083565b60405161047991906129a6565b60405180910390f35b34801561048e57600080fd5b5061049761113c565b6040516104a49190612ce5565b60405180910390f35b3480156104b957600080fd5b506104c2611160565b6040516104cf9190612ce5565b60405180910390f35b3480156104e457600080fd5b506104ed611189565b6040516104fa9190612ce5565b60405180910390f35b34801561050f57600080fd5b506105186111af565b6040516105259190612a64565b60405180910390f35b34801561053a57600080fd5b506105436111df565b6040516105509190612d5f565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190612d7a565b611209565b005b34801561058e57600080fd5b506105a960048036038101906105a49190612e2c565b611266565b005b3480156105b757600080fd5b506105c06113c1565b6040516105cd9190612a64565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190612eab565b611449565b005b34801561060b57600080fd5b5061062660048036038101906106219190612efe565b61156c565b60405161063391906126cb565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161066f93929190612f98565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106f8949392919061300d565b602060405180830381865afa158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190613085565b61074a5763ffffffff60e01b610770565b60405160200161075990613109565b604051602081830303815290604052805190602001205b90509392505050565b610781611582565b8181905084849050146107c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c0906131a1565b60405180910390fd5b60005b84849050811015610884576108718585838181106107ed576107ec6131c1565b5b905060200201602081019061080291906128a9565b6000858585818110610817576108166131c1565b5b905060200281019061082991906131ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611651565b808061087c90613291565b9150506107cc565b5050505050565b6108936116d5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa9061334c565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161095492919061336c565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109a76116d5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90613407565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a6a92919061336c565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610b1a959493929190613427565b602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b9190613085565b610b6c5763ffffffff60e01b610b92565b604051602001610b7b906134bc565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610bae9061351d565b6040516020818303038152906040528051906020012084148015610bfd57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c2a57604051602001610c119061357e565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90613605565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d0261179d565b73ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613697565b60405180910390fd5b610d61816117f4565b610dba81600067ffffffffffffffff811115610d8057610d7f612b4f565b5b6040519080825280601f01601f191660200182016040528015610db25781602001600182028036833780820191505090505b5060006117ff565b50565b6000610dc761196d565b610dd184846119e4565b90506000848060400190610de591906131ff565b90501415610df757610df684611b2f565b5b610e0082611bdd565b9392505050565b60056020528060005260406000206000915054906101000a900465ffffffffffff1681565b60046020528060005260406000206000915054906101000a900465ffffffffffff1681565b610e596111df565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610e929190612ce5565b6000604051808303818588803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b5050505050565b610ece6116d5565b610ed66111df565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610f109291906136c6565b600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613605565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661101461179d565b73ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613697565b60405180910390fd5b611073826117f4565b61107f828260016117ff565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613761565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611211611582565b611260848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611651565b50505050565b60008060159054906101000a900460ff1615905080801561129957506001600060149054906101000a900460ff1660ff16105b806112c857506112a830611c79565b1580156112c757506001600060149054906101000a900460ff1660ff16145b5b611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe906137f3565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611345576001600060156101000a81548160ff0219169083151502179055505b611350848484611c9c565b61136282600065ffffffffffff611449565b80156113bb5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516113b2919061385b565b60405180910390a15b50505050565b60006113cb6111df565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114039190612ce5565b602060405180830381865afa158015611420573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611444919061388b565b905090565b6114516116d5565b8165ffffffffffff168165ffffffffffff16116114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90613904565b60405180910390fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff16021790555080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b600063f23a6e6160e01b90509695505050505050565b61158a6111df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061161057506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690613996565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161167a9190613a30565b60006040518083038185875af1925050503d80600081146116b7576040519150601f19603f3d011682016040523d82523d6000602084013e6116bc565b606091505b5091509150816116ce57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061175c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613a93565b60405180910390fd5b565b60006117cb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611e38565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117fc6116d5565b50565b61182b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611e42565b60000160009054906101000a900460ff161561184f5761184a83611e4c565b611968565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118b757506040513d601f19601f820116820180604052508101906118b49190613ac8565b60015b6118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b67565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613bf9565b60405180910390fd5b50611967838383611f05565b5b505050565b6119756111df565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990613c8b565b60405180910390fd5b565b6000806119f083611f31565b90506000611a5a85806101400190611a0891906131ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083611f6190919063ffffffff16565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506000808365ffffffffffff16149050611b22818484611f88565b9550505050505092915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff1680929190611b5e90613cc3565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613d44565b60405180910390fd5b50565b60008114611c765760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051611c2d90613d8a565b600060405180830381858888f193505050503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611e5581611c79565b611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613e11565b60405180910390fd5b80611ec17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611e38565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f0e83611fc1565b600082511180611f1b5750805b15611f2c57611f2a8383612010565b505b505050565b600081604051602001611f449190613e9e565b604051602081830303815290604052805190602001209050919050565b6000806000611f70858561203d565b91509150611f7d8161208f565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85611fb0576000611fb3565b60015b60ff16171790509392505050565b611fca81611e4c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606120358383604051806060016040528060278152602001614184602791396121fd565b905092915050565b60008060418351141561207f5760008060006020860151925060408601519150606086015160001a905061207387828585612283565b94509450505050612088565b60006002915091505b9250929050565b600060048111156120a3576120a2613ec4565b5b8160048111156120b6576120b5613ec4565b5b14156120c1576121fa565b600160048111156120d5576120d4613ec4565b5b8160048111156120e8576120e7613ec4565b5b1415612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613f3f565b60405180910390fd5b6002600481111561213d5761213c613ec4565b5b8160048111156121505761214f613ec4565b5b1415612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613fab565b60405180910390fd5b600360048111156121a5576121a4613ec4565b5b8160048111156121b8576121b7613ec4565b5b14156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061403d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516122279190613a30565b600060405180830381855af49150503d8060008114612262576040519150601f19603f3d011682016040523d82523d6000602084013e612267565b606091505b509150915061227886838387612366565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156122be57600060039150915061235d565b6000600187878787604051600081526020016040526040516122e3949392919061406c565b6020604051602081039080840390855afa158015612305573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123545760006001925092505061235d565b80600092509250505b94509492505050565b606083156123c9576000835114156123c15761238185611c79565b6123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b7906140fd565b60405180910390fd5b5b8290506123d4565b6123d383836123dc565b5b949350505050565b6000825111156123ef5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124239190614161565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061246b82612440565b9050919050565b61247b81612460565b811461248657600080fd5b50565b60008135905061249881612472565b92915050565b6000819050919050565b6124b18161249e565b81146124bc57600080fd5b50565b6000813590506124ce816124a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126124f9576124f86124d4565b5b8235905067ffffffffffffffff811115612516576125156124d9565b5b602083019150836001820283011115612532576125316124de565b5b9250929050565b60008060008060008060008060c0898b03121561255957612558612436565b5b60006125678b828c01612489565b98505060206125788b828c01612489565b97505060406125898b828c01612489565b965050606061259a8b828c016124bf565b955050608089013567ffffffffffffffff8111156125bb576125ba61243b565b5b6125c78b828c016124e3565b945094505060a089013567ffffffffffffffff8111156125ea576125e961243b565b5b6125f68b828c016124e3565b92509250509295985092959890939650565b60008060008060006080868803121561262457612623612436565b5b600061263288828901612489565b955050602061264388828901612489565b9450506040612654888289016124bf565b935050606086013567ffffffffffffffff8111156126755761267461243b565b5b612681888289016124e3565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126c581612690565b82525050565b60006020820190506126e060008301846126bc565b92915050565b6000819050919050565b6126f9816126e6565b811461270457600080fd5b50565b600081359050612716816126f0565b92915050565b60008060006040848603121561273557612734612436565b5b600061274386828701612707565b935050602084013567ffffffffffffffff8111156127645761276361243b565b5b612770868287016124e3565b92509250509250925092565b60008083601f840112612792576127916124d4565b5b8235905067ffffffffffffffff8111156127af576127ae6124d9565b5b6020830191508360208202830111156127cb576127ca6124de565b5b9250929050565b60008083601f8401126127e8576127e76124d4565b5b8235905067ffffffffffffffff811115612805576128046124d9565b5b602083019150836020820283011115612821576128206124de565b5b9250929050565b6000806000806040858703121561284257612841612436565b5b600085013567ffffffffffffffff8111156128605761285f61243b565b5b61286c8782880161277c565b9450945050602085013567ffffffffffffffff81111561288f5761288e61243b565b5b61289b878288016127d2565b925092505092959194509250565b6000602082840312156128bf576128be612436565b5b60006128cd84828501612489565b91505092915050565b600080600080604085870312156128f0576128ef612436565b5b600085013567ffffffffffffffff81111561290e5761290d61243b565b5b61291a878288016124e3565b9450945050602085013567ffffffffffffffff81111561293d5761293c61243b565b5b612949878288016124e3565b925092505092959194509250565b6000806040838503121561296e5761296d612436565b5b600061297c85828601612707565b925050602061298d85828601612489565b9150509250929050565b6129a0816126e6565b82525050565b60006020820190506129bb6000830184612997565b92915050565b600080fd5b600061016082840312156129dd576129dc6129c1565b5b81905092915050565b6000806000606084860312156129ff576129fe612436565b5b600084013567ffffffffffffffff811115612a1d57612a1c61243b565b5b612a29868287016129c6565b9350506020612a3a86828701612707565b9250506040612a4b868287016124bf565b9150509250925092565b612a5e8161249e565b82525050565b6000602082019050612a796000830184612a55565b92915050565b600065ffffffffffff82169050919050565b612a9a81612a7f565b82525050565b6000602082019050612ab56000830184612a91565b92915050565b6000612ac682612440565b9050919050565b612ad681612abb565b8114612ae157600080fd5b50565b600081359050612af381612acd565b92915050565b60008060408385031215612b1057612b0f612436565b5b6000612b1e85828601612ae4565b9250506020612b2f858286016124bf565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b8782612b3e565b810181811067ffffffffffffffff82111715612ba657612ba5612b4f565b5b80604052505050565b6000612bb961242c565b9050612bc58282612b7e565b919050565b600067ffffffffffffffff821115612be557612be4612b4f565b5b612bee82612b3e565b9050602081019050919050565b82818337600083830152505050565b6000612c1d612c1884612bca565b612baf565b905082815260208101848484011115612c3957612c38612b39565b5b612c44848285612bfb565b509392505050565b600082601f830112612c6157612c606124d4565b5b8135612c71848260208601612c0a565b91505092915050565b60008060408385031215612c9157612c90612436565b5b6000612c9f85828601612489565b925050602083013567ffffffffffffffff811115612cc057612cbf61243b565b5b612ccc85828601612c4c565b9150509250929050565b612cdf81612460565b82525050565b6000602082019050612cfa6000830184612cd6565b92915050565b6000819050919050565b6000612d25612d20612d1b84612440565b612d00565b612440565b9050919050565b6000612d3782612d0a565b9050919050565b6000612d4982612d2c565b9050919050565b612d5981612d3e565b82525050565b6000602082019050612d746000830184612d50565b92915050565b60008060008060608587031215612d9457612d93612436565b5b6000612da287828801612489565b9450506020612db3878288016124bf565b935050604085013567ffffffffffffffff811115612dd457612dd361243b565b5b612de0878288016124e3565b925092505092959194509250565b6000612df982612460565b9050919050565b612e0981612dee565b8114612e1457600080fd5b50565b600081359050612e2681612e00565b92915050565b600080600060608486031215612e4557612e44612436565b5b6000612e5386828701612e17565b9350506020612e6486828701612489565b9250506040612e7586828701612489565b9150509250925092565b612e8881612a7f565b8114612e9357600080fd5b50565b600081359050612ea581612e7f565b92915050565b600080600060608486031215612ec457612ec3612436565b5b6000612ed286828701612489565b9350506020612ee386828701612e96565b9250506040612ef486828701612e96565b9150509250925092565b60008060008060008060a08789031215612f1b57612f1a612436565b5b6000612f2989828a01612489565b9650506020612f3a89828a01612489565b9550506040612f4b89828a016124bf565b9450506060612f5c89828a016124bf565b935050608087013567ffffffffffffffff811115612f7d57612f7c61243b565b5b612f8989828a016124e3565b92509250509295509295509295565b6000606082019050612fad6000830186612cd6565b612fba6020830185612cd6565b612fc76040830184612a55565b949350505050565b600082825260208201905092915050565b6000612fec8385612fcf565b9350612ff9838584612bfb565b61300283612b3e565b840190509392505050565b60006060820190506130226000830187612cd6565b61302f6020830186612997565b8181036040830152613042818486612fe0565b905095945050505050565b60008115159050919050565b6130628161304d565b811461306d57600080fd5b50565b60008151905061307f81613059565b92915050565b60006020828403121561309b5761309a612436565b5b60006130a984828501613070565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b60006130f3601f836130b2565b91506130fe826130bd565b601f82019050919050565b6000613114826130e6565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b600061318b60338361311e565b91506131968261312f565b604082019050919050565b600060208201905081810360008301526131ba8161317e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261321c5761321b6131f0565b5b80840192508235915067ffffffffffffffff82111561323e5761323d6131f5565b5b60208301925060018202360383131561325a576132596131fa565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061329c8261249e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132cf576132ce613262565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b600061333660318361311e565b9150613341826132da565b604082019050919050565b6000602082019050818103600083015261336581613329565b9050919050565b60006040820190506133816000830185612cd6565b61338e6020830184612cd6565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b60006133f160338361311e565b91506133fc82613395565b604082019050919050565b60006020820190508181036000830152613420816133e4565b9050919050565b600060608201905061343c6000830188612cd6565b818103602083015261344f818688612fe0565b90508181036040830152613464818486612fe0565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006134a6601d836130b2565b91506134b182613470565b601d82019050919050565b60006134c782613499565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b60006135076015836130b2565b9150613512826134d1565b601582019050919050565b6000613528826134fa565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006135686014836130b2565b915061357382613532565b601482019050919050565b60006135898261355b565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006135ef602c8361311e565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000613681602c8361311e565b915061368c82613625565b604082019050919050565b600060208201905081810360008301526136b081613674565b9050919050565b6136c081612abb565b82525050565b60006040820190506136db60008301856136b7565b6136e86020830184612a55565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061374b60388361311e565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006137dd602e8361311e565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b6000819050919050565b600060ff82169050919050565b600061384561384061383b84613813565b612d00565b61381d565b9050919050565b6138558161382a565b82525050565b6000602082019050613870600083018461384c565b92915050565b600081519050613885816124a8565b92915050565b6000602082840312156138a1576138a0612436565b5b60006138af84828501613876565b91505092915050565b7f77726f6e6720756e74696c2f6166746572000000000000000000000000000000600082015250565b60006138ee60118361311e565b91506138f9826138b8565b602082019050919050565b6000602082019050818103600083015261391d816138e1565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b600061398060298361311e565b915061398b82613924565b604082019050919050565b600060208201905081810360008301526139af81613973565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156139ea5780820151818401526020810190506139cf565b838111156139f9576000848401525b50505050565b6000613a0a826139b6565b613a1481856139c1565b9350613a248185602086016139cc565b80840191505092915050565b6000613a3c82846139ff565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613a7d601c8361311e565b9150613a8882613a47565b602082019050919050565b60006020820190508181036000830152613aac81613a70565b9050919050565b600081519050613ac2816126f0565b92915050565b600060208284031215613ade57613add612436565b5b6000613aec84828501613ab3565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613b51602e8361311e565b9150613b5c82613af5565b604082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613be360298361311e565b9150613bee82613b87565b604082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613c7560248361311e565b9150613c8082613c19565b604082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613cce82613cab565b91506bffffffffffffffffffffffff821415613ced57613cec613262565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000613d2e601f8361311e565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b50565b6000613d746000836139c1565b9150613d7f82613d64565b600082019050919050565b6000613d9582613d67565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613dfb602d8361311e565b9150613e0682613d9f565b604082019050919050565b60006020820190508181036000830152613e2a81613dee565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613e67601c836130b2565b9150613e7282613e31565b601c82019050919050565b6000819050919050565b613e98613e93826126e6565b613e7d565b82525050565b6000613ea982613e5a565b9150613eb58284613e87565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613f2960188361311e565b9150613f3482613ef3565b602082019050919050565b60006020820190508181036000830152613f5881613f1c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613f95601f8361311e565b9150613fa082613f5f565b602082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061402760228361311e565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b6140668161381d565b82525050565b60006080820190506140816000830187612997565b61408e602083018661405d565b61409b6040830185612997565b6140a86060830184612997565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006140e7601d8361311e565b91506140f2826140b1565b602082019050919050565b60006020820190508181036000830152614116816140da565b9050919050565b600081519050919050565b60006141338261411d565b61413d818561311e565b935061414d8185602086016139cc565b61415681612b3e565b840191505092915050565b6000602082019050818103600083015261417b8184614128565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4c69268be61f48b85ec8565f505da1877248980f5c1e23e193988b94a216ff864736f6c634300080c0033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000616777bd353ae5f6f4b860c01b620000cb60201b60201c565b6200007d67f4849dbf6086b19760c01b620000cb60201b60201c565b62000099671331b88614a8024260c01b620000cb60201b60201c565b620000a9620000ce60201b60201c565b620000c56734c3dc451e7faed860c01b620000ec60201b60201c565b620000ef565b50565b620000ea67415ed60fba6ef16160c01b620000ec60201b60201c565b565b50565b608051616dd46200012760003960008181611a0701528181611a95015281816120dc0152818161216a015261221a0152616dd46000f3fe6080604052600436106101d05760003560e01c80634d44560d116100f7578063a526d83b11610095578063bc197c8111610064578063bc197c8114610700578063c399ec881461073d578063cf6dca5514610768578063f23a6e61146107915761022f565b8063a526d83b14610658578063affed0e014610681578063b0d691fe146106ac578063b61d27f6146106d75761022f565b80637065cb48116100d15780637065cb481461058c57806371404156146105b55780638f068430146105de57806398ef1ed81461061b5761022f565b80634d44560d1461051c5780634f1ef2861461054557806352d1902d146105615761022f565b80631b71bb6e1161016f5780633e4769511161013e5780633e4769511461046f5780633fb5a7a1146104ac578063485cc955146104e95780634a58db19146105125761022f565b80631b71bb6e146103a35780632f54bf6e146103cc5780633659cfe6146104095780633a871cdd146104325761022f565b8063150b7a02116101ab578063150b7a02146102d757806316d4340114610314578063173825d91461035157806318dfb3c71461037a5761022f565b806223de291461023457806301ffc9a71461025d5780630c68ba211461029a5761022f565b3661022f576101e967290bbd319612162360c01b6107ce565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190614b82565b6107d1565b005b34801561026957600080fd5b50610284600480360381019061027f9190614ca9565b6107ef565b6040516102919190614cf1565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190614d0c565b6109d4565b6040516102ce9190614cf1565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190614d39565b610a66565b60405161030b9190614dd0565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190614e4d565b610ab6565b6040516103489190614cf1565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190614d0c565b61148f565b005b34801561038657600080fd5b506103a1600480360381019061039c9190614f81565b611557565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190614d0c565b611795565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190614d0c565b611973565b6040516104009190614cf1565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190614d0c565b611a05565b005b34801561043e57600080fd5b5061045960048036038101906104549190615027565b611b8d565b60405161046691906150a5565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190614d0c565b611ccb565b6040516104a391906150e1565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190614d0c565b611cf0565b6040516104e091906150e1565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061513a565b611d15565b005b61051a611ef5565b005b34801561052857600080fd5b50610543600480360381019061053e91906151b8565b611fa6565b005b61055f600480360381019061055a9190615339565b6120da565b005b34801561056d57600080fd5b50610576612216565b60405161058391906153a4565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190614d0c565b6122cf565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190614d0c565b612397565b005b3480156105ea57600080fd5b50610605600480360381019061060091906153bf565b61245f565b6040516106129190614cf1565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906153bf565b61252c565b60405161064f9190614cf1565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190614d0c565b612755565b005b34801561068d57600080fd5b5061069661281d565b6040516106a391906150a5565b60405180910390f35b3480156106b857600080fd5b506106c1612889565b6040516106ce9190615492565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f991906154ad565b6128ef565b005b34801561070c57600080fd5b5061072760048036038101906107229190615577565b612a00565b6040516107349190614dd0565b60405180910390f35b34801561074957600080fd5b50610752612a54565b60405161075f91906150a5565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a919061567f565b612b18565b005b34801561079d57600080fd5b506107b860048036038101906107b391906156d2565b612d3f565b6040516107c59190614dd0565b60405180910390f35b50565b6107e5671278753381487ed660c01b612d91565b5050505050505050565b600061080567f20d647ea02d480060c01b612d91565b61081967ffb589296d687db060c01b612d91565b61082d6727ecf9b318901df560c01b612d91565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108aa57506108a9675d4be9b73183ad3f60c01b612d94565b5b8061094a57507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561092d575061092c674cb5733a4ebd736b60c01b612d94565b5b8015610949575061094867927753031b1e765d60c01b612d94565b5b5b806109cd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156109cc57506109cb66bc16169e90631c60c01b612d94565b5b5b9050919050565b60006109ea679a530c869daa649060c01b612d9f565b6109fe677819779a5121f4ad60c01b612d9f565b610a1267dcc814792f5595a060c01b612d9f565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a7b6642558288c0c26a60c01b612d91565b610a8f670cd59c881166cff460c01b612d91565b610aa367d8d160ce8c3ef4cc60c01b612d91565b63150b7a0260e01b905095945050505050565b6000610acc6777258f39a67c0acd60c01b612da2565b610ae067c9d3460cf31b367060c01b612da2565b610af467301450deda14998860c01b612da2565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610b2467ec35fa0e327aba3360c01b612da2565b610b386757c603851350fa0960c01b612da2565b6060610b4e67ed7102d9c731614b60c01b612da2565b610b6267260c95324dc5522a60c01b612da2565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610b9a919061579b565b908a8a905092610bac939291906157d9565b90610bb7919061582c565b149050610bce67adb0f8e971c6f00460c01b612da2565b610be26775ac95bff94d832360c01b612da2565b8015610e2f57610bfc67b7ce1fa3f7f6604d60c01b612da2565b610c10679fc1490a6707ce8260c01b612da2565b610c24679cbd4322f03dcb3060c01b612da2565b6000610c3a677c50636fd0d78e6e60c01b612da2565b610c4e67b6c96f6498872fdd60c01b612da2565b6060610c6467d225012c278bc14960c01b612da2565b888860009060208c8c9050610c79919061579b565b92610c86939291906157d9565b810190610c93919061588b565b809650819350829450505050610cb367414eafbc10d5dfd460c01b612da2565b610cc7679735072f1875e8c560c01b612da2565b60008503610e1357610ce367ece2f114e83cba5460c01b612da2565b610cf767bb4b7709950fab6560c01b612da2565b610d0b67e556fd7ed728116b60c01b612da2565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d339190615987565b6000604051808303816000865af19150503d8060008114610d70576040519150601f19603f3d011682016040523d82523d6000602084013e610d75565b606091505b5091509150610d8e675bb7adbcacc27af760c01b612da2565b610da267925a11ac41b1a62f60c01b612da2565b81610df857610dbb674b9b350a0c4e240d60c01b612da2565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610def91906159e8565b60405180910390fd5b610e0c67270a9300cfb5deb160c01b612da2565b5050610e28565b610e276719ddea40eb9c9d5e60c01b612da2565b5b5050610e9f565b610e43671617c5f7b544c15460c01b612da2565b610e5767152cf4f885c3c7bd60c01b612da2565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610eb3678968ba2400116cd160c01b612da2565b610ec767d26f37fb13c4702060c01b612da2565b808015610ee45750610ee367e672c6829c01435e60c01b612da5565b5b80610f0b5750600083118015610f0a5750610f09672f1034641526e8e560c01b612da5565b5b5b1561117b57610f246787b8bb2f9d833b2360c01b612da2565b610f386748ed04b5790955de60c01b612da2565b610f4c67c07d3098ed811b0e60c01b612da2565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610f87929190615a0a565b602060405180830381865afa925050508015610fc157506040513d601f19601f82011682018060405250810190610fbe9190615a4f565b60015b611048573d8060008114610ff1576040519150601f19603f3d011682016040523d82523d6000602084013e610ff6565b606091505b5061100b672c516c89798db2e060c01b612da2565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161103f91906159e8565b60405180910390fd5b61105c677a7dc9015ade993760c01b612da2565b611070676bd30bd513db1c1260c01b612da2565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506110d067f77b76e97cdda63e60c01b612da2565b6110e467f2ac3b0c93d4d96060c01b612da2565b6000851480156110f15750825b80156110fb575086155b15611132576111146732203bac67e9a5c660c01b612da2565b61112867bacd05270bf834fa60c01b612da2565b806000526001601ffd5b61114667db508d98998fd4cb60c01b612da2565b61115a67bd809f1f7297a39860c01b612da2565b61116e671166c1324f0a4d4360c01b612da2565b8095505050505050611486565b61118f67fb73a16ec6f828a360c01b612da2565b6111a367124b4f67fba3948f60c01b612da2565b6111b767a72081e2c67a966a60c01b612da2565b6111cb670ab810c1358d671760c01b612da2565b60418787905014611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890615aff565b60405180910390fd5b61122567c0b4b2b739bdbc3e60c01b612da2565b611239670f81a533fa5be34e60c01b612da2565b61124d67657c1339b273a74660c01b612da2565b60008787600090602092611263939291906157d9565b9061126e919061582c565b905061128467dc3d3b49fc92cadb60c01b612da2565b6112986752ae34fa8263b21b60c01b612da2565b600088886020906040926112ae939291906157d9565b906112b9919061582c565b90506112cf67301232fd22fb824c60c01b612da2565b6112e367f519c889a1cef68c60c01b612da2565b6000898960408181106112f9576112f8615b1f565b5b9050013560f81c60f81b60f81c905061131c679a20c64fb3f7324360c01b612da2565b611330678a031af26ced764160c01b612da2565b601b8160ff16141580156113485750601c8160ff1614155b156113c45761136167cd922db48d204f9b60c01b612da2565b61137567833a8605e20290ce60c01b612da2565b61138967b3da6c39eac2834e60c01b612da2565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90615bc0565b60405180910390fd5b6113d8675514297355562d4860c01b612da2565b6113ec6757b333f889b6e2b360c01b612da2565b611400676603fc4d7122128560c01b612da2565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c8386866040516000815260200160405260405161143a9493929190615bfc565b6020604051602081039080840390855afa15801561145c573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6114a36706cea3225e159afe60c01b6107ce565b6114b767768e02f4b4fe93d060c01b6107ce565b6114cb67bcb43f0f61fb5a1260c01b6107ce565b6114df6705112cc091d04b2260c01b6107ce565b6114e7612db0565b6114fb677b6146229717de8560c01b6107ce565b61150f671a91445bcd7d6a3660c01b6107ce565b61152367087786fe3118ce4560c01b6107ce565b6115376712ac3ecdf13b356f60c01b6107ce565b61154b676a822ec913ef224160c01b6107ce565b61155481612f14565b50565b61156b670b312c177376d2f160c01b6107ce565b61157f67526a718f37dbef7960c01b6107ce565b61159367bc0095b6ec842fe060c01b6107ce565b6115a76765a7b825dc91e38260c01b6107ce565b6115af613190565b6115c367e65dfa654e10de0360c01b6107ce565b6115d76738751a29e4bbac9a60c01b6107ce565b6115eb6764a3e3565274624260c01b6107ce565b6115ff67e3532f2d278ffcc460c01b6107ce565b61161367b28c9cc66aedc63960c01b6107ce565b611627674c0d2e74d59320d660c01b6107ce565b81819050848490501461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690615cb3565b60405180910390fd5b6116836733f49bcf3f677de260c01b6107ce565b61169767fda055a3194df47960c01b6107ce565b6116ab670ca2693ca40a9c3d60c01b6107ce565b60005b8484905081101561178e576116cd67e45fe9f7a89384cd60c01b6107ce565b6116e1677885f77483c8c7a360c01b6107ce565b61177b8585838181106116f7576116f6615b1f565b5b905060200201602081019061170c9190614d0c565b600085858581811061172157611720615b1f565b5b90506020028101906117339190615ce2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132b3565b808061178690615d45565b9150506116ae565b5050505050565b6117a967b0e8e7fc3aed8bf060c01b6107ce565b6117bd671246157b9919312560c01b6107ce565b6117d167cbfddca365f5dede60c01b6107ce565b6117d96133d7565b6117ed67ab4f446b15a2b75360c01b6107ce565b61180167140f31a12b03a20160c01b6107ce565b61181567c2cd95be620e67ae60c01b6107ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90615dff565b60405180910390fd5b611898674b99dae5f525e91060c01b6107ce565b6118ac67897f79a11a9b512360c01b6107ce565b6118c067f01df9d5178d9e0460c01b6107ce565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611913929190615e2e565b60405180910390a161192f6705fb80e775388d3f60c01b6107ce565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006119896784c34e023fb786f860c01b6134f3565b61199d670d806432bac21d3b60c01b6134f3565b6119b1679da5a6f8cf654dc360c01b6134f3565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90615ec9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ad26134f6565b73ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90615f5b565b60405180910390fd5b611b318161354d565b611b8a81600067ffffffffffffffff811115611b5057611b4f61520e565b5b6040519080825280601f01601f191660200182016040528015611b825781602001600182028036833780820191505090505b5060006135a8565b50565b6000611ba3674a0b745640aaacbe60c01b613716565b611bb7673643bc4d265e004d60c01b613716565b611bcb67be21e9c3510eef0760c01b613716565b611bd3613719565b611be7670d9ae78f9ca6bca160c01b613716565b611bf184846137f4565b9050611c0767bac743df019f783060c01b613716565b611c1b674633441562cbb38260c01b613716565b6000848060400190611c2d9190615ce2565b905003611c7e57611c4867b9f604ce3adf50f460c01b613716565b611c5c6740dc8d2be550a2ae60c01b613716565b611c70678d7f5bf9351f5d3760c01b613716565b611c7984613a44565b611c93565b611c9267493644fd2e2f359760c01b613716565b5b611ca767f86dd1b6eddb849360c01b613716565b611cbb67e338ec934ff31c9e60c01b613716565b611cc482613b56565b9392505050565b60076020528060005260406000206000915054906101000a900465ffffffffffff1681565b60066020528060005260406000206000915054906101000a900465ffffffffffff1681565b611d29670737ebcc8ebf35a860c01b613c97565b60008060019054906101000a900460ff16159050808015611d5a5750600160008054906101000a900460ff1660ff16105b80611d875750611d6930613c9a565b158015611d865750600160008054906101000a900460ff1660ff16145b5b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90615fed565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611e03576001600060016101000a81548160ff0219169083151502179055505b611e1767062ab3131080fb3a60c01b613c97565b611e2b67615bda11b0639a3560c01b613c97565b611e3f67db3e5d909db00b0e60c01b613c97565b611e5367fb02f76f17bd42bb60c01b613c97565b611e5d8383613cbd565b611e71676fe071d430295e8160c01b613c97565b611e85673c48caa237a4480260c01b613c97565b611e9782600065ffffffffffff612b18565b8015611ef05760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611ee79190616048565b60405180910390a15b505050565b611f0967a987bf12f6bf98ab60c01b6107ce565b611f1d671fbaaa4dbb3f884d60c01b6107ce565b611f3167e797a3f7fa46660c60c01b6107ce565b611f39612889565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611f729190616063565b6000604051808303818588803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b5050505050565b611fba67fbabf181d33082b660c01b6107ce565b611fce67bee35484a90cfd2660c01b6107ce565b611fe2673ceb9bb2daab856d60c01b6107ce565b611ff66791fab911752e5b5c60c01b6107ce565b611ffe6133d7565b612012672877b8446bdb5f0060c01b6107ce565b612026676c6fc7cbb8b3b97860c01b6107ce565b61203a67eb87ca9da684e3db60c01b6107ce565b61204e673d9d17fec85dda7860c01b6107ce565b612062675017b987e5f4e1e060c01b6107ce565b61206a612889565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016120a492919061608d565b600060405180830381600087803b1580156120be57600080fd5b505af11580156120d2573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90615ec9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121a76134f6565b73ffffffffffffffffffffffffffffffffffffffff16146121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490615f5b565b60405180910390fd5b6122068261354d565b612212828260016135a8565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90616128565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6122e367b4c2b632b250bc6360c01b6107ce565b6122f767768e02f4b4fe93d060c01b6107ce565b61230b67bcb43f0f61fb5a1260c01b6107ce565b61231f6705112cc091d04b2260c01b6107ce565b612327612db0565b61233b677b6146229717de8560c01b6107ce565b61234f6732bce9776427685f60c01b6107ce565b612363675c4d3c86a9602c6f60c01b6107ce565b612377670877748d77ec420260c01b6107ce565b61238b6732ccb44361bec49260c01b6107ce565b61239481613dff565b50565b6123ab676bacc25ce52307dd60c01b6107ce565b6123bf67bee35484a90cfd2660c01b6107ce565b6123d3673ceb9bb2daab856d60c01b6107ce565b6123e76791fab911752e5b5c60c01b6107ce565b6123ef6133d7565b612403672877b8446bdb5f0060c01b6107ce565b61241767edec01844939018360c01b6107ce565b61242b672d1676c1874371c960c01b6107ce565b61243f6767895a735b76188060c01b6107ce565b6124536762377381d2b1f71460c01b6107ce565b61245c81613fbd565b50565b600061247567a69e23ef0cf0d80560c01b612da2565b6124896789508a17c1e5baf860c01b612da2565b61249d67f0e90fa9dac9b5a260c01b612da2565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b81526004016124df959493929190616175565b6020604051808303816000875af11580156124fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252291906161d8565b9050949350505050565b6000612542678cc395c88e3ae24060c01b612da2565b612556670e6cd08ae62d699160c01b612da2565b61256a671a6d203d14bbeb3560c01b612da2565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b81526004016125ac959493929190616175565b6020604051808303816000875af19250505080156125e857506040513d601f19601f820116820180604052508101906125e591906161d8565b60015b612720573d8060008114612618576040519150601f19603f3d011682016040523d82523d6000602084013e61261d565b606091505b506126326763fa3d4afb8cd55b60c01b612da2565b61264667c78e77a5e38dc67760c01b612da2565b60008151905061266067a2319ac582c5f8b960c01b612da2565b612674679d791f94f379b3d460c01b612da2565b600181036126f457612690674b6df8afb2c0610f60c01b612da2565b6126a4671241dc8732fa093a60c01b612da2565b600160f81b826000815181106126bd576126bc615b1f565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149250505061274d565b61270867fb87cb9c02294f9f60c01b612da2565b61271c6773311759eab4f85760c01b612da2565b8082fd5b612734672f68b0ad8fd39c0a60c01b612da2565b61274867ba867e4ef348d1a360c01b612da2565b809150505b949350505050565b612769675a98b12456966aba60c01b6107ce565b61277d67bee35484a90cfd2660c01b6107ce565b612791673ceb9bb2daab856d60c01b6107ce565b6127a56791fab911752e5b5c60c01b6107ce565b6127ad6133d7565b6127c1672877b8446bdb5f0060c01b6107ce565b6127d567915d8b16ac69ed9860c01b6107ce565b6127e9671f5e91ee5a02596360c01b6107ce565b6127fd674b8e9096393c06f860c01b6107ce565b61281167301fc09d047c18d960c01b6107ce565b61281a8161417b565b50565b600061283367e6997cbe175ef33460c01b6107ce565b612847677a25fccec1173dd960c01b6107ce565b61285b67431301e0e2e31e9060c01b6107ce565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061289f67f561f09cfc8827bd60c01b6107ce565b6128b3673350b6d208da79ee60c01b6107ce565b6128c7671896327d0b3f375a60c01b6107ce565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61290367e2dda3667fd3757160c01b6107ce565b61291767526a718f37dbef7960c01b6107ce565b61292b67bc0095b6ec842fe060c01b6107ce565b61293f6765a7b825dc91e38260c01b6107ce565b612947613190565b61295b67e65dfa654e10de0360c01b6107ce565b61296f67aeaf6d5fe58842a960c01b6107ce565b61298367370ad7169464cc0060c01b6107ce565b6129976739a00ff772ffbf9060c01b6107ce565b6129ab6792e03ae1c25d108960c01b6107ce565b6129fa848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506132b3565b50505050565b6000612a1667f6036d4dbbf1553b60c01b612d91565b612a2a67e574cfd0134a53a360c01b612d91565b612a3e67481cad8a93626dbc60c01b612d91565b63bc197c8160e01b905098975050505050505050565b6000612a6a673908573a227c011760c01b6107ce565b612a7e67f95a3d25f4a4d56660c01b6107ce565b612a926701732dbf20a7ffe360c01b6107ce565b612a9a612889565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ad29190616063565b602060405180830381865afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b13919061621a565b905090565b612b2c675c7a92956607043460c01b613c97565b612b4067bee35484a90cfd2660c01b6107ce565b612b54673ceb9bb2daab856d60c01b6107ce565b612b686791fab911752e5b5c60c01b6107ce565b612b706133d7565b612b84672877b8446bdb5f0060c01b6107ce565b612b9867fc97778d9962b11960c01b613c97565b612bac67fa4544be25db1aa360c01b613c97565b612bc06730736912c5d448e660c01b613c97565b612bd46710f72d06f4f5119d60c01b613c97565b612be8674202f633000d748760c01b613c97565b8165ffffffffffff168165ffffffffffff1611612c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3190616293565b60405180910390fd5b612c4e6729427285f77a549e60c01b613c97565b612c6267b706c88c37f2f3d860c01b613c97565b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff160217905550612cd86770fc18092347220860c01b613c97565b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548165ffffffffffff021916908365ffffffffffff160217905550505050565b6000612d5567d55e6083e458695760c01b612d91565b612d6967229756682a8526f660c01b612d91565b612d7d672d0f5a7f66d6c2a060c01b612d91565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612dc467216671dc6f7d651060c01b6107ce565b612dd867fc696b44f549a3bd60c01b6107ce565b612dec677d2f775bb38d794b60c01b6107ce565b612e00672c1b7774324d16e460c01b6107ce565b612e0933611973565b8015612e255750612e24679d6b1a88bd04a29560c01b6143f9565b5b80612e9357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612e765750612e7567c1169fb68056496660c01b6143f9565b5b8015612e925750612e9167290c2b81e499218360c01b6143f9565b5b5b80612ebf5750612ea2336109d4565b8015612ebe5750612ebd6777d0513cc85b13d160c01b6143f9565b5b5b612efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef590616325565b60405180910390fd5b612f1267023020f196fe710560c01b6107ce565b565b612f2867595c0e9f3251c28760c01b6134f3565b612f3c676c9e8facf275455460c01b6134f3565b612f50675fd1ba867bad8d9060c01b6134f3565b612f64675d4405176a4c718660c01b6134f3565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc990616391565b60405180910390fd5b612fe6678d884950e2a04aa760c01b6134f3565b612ffa672dca0c18590376fc60c01b6134f3565b61300e67a4f7a20d65860e4d60c01b6134f3565b613022675167170fc48a61af60c01b6134f3565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a5906163fd565b60405180910390fd5b6130c267d711364ae0826ec060c01b6134f3565b6130d6670a57bd871732b8ad60c01b6134f3565b6130ea675d1d32267273ab9260c01b6134f3565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da816040516131199190616063565b60405180910390a161313567dcc232605f03b59860c01b6134f3565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6131a46731b64f8837124c3160c01b6107ce565b6131b867648db564106906a760c01b6107ce565b6131cc67c4dbbfd60bd1214960c01b6107ce565b6131e06701512b58157c381b60c01b6107ce565b6131e8612889565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561323257506132316747f66328b063331a60c01b6143f9565b5b8061325e575061324133611973565b801561325d575061325c67e429b1ab88ceb31060c01b6143f9565b5b5b61329d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132949061648f565b60405180910390fd5b6132b16762f06635bf7b4acd60c01b6107ce565b565b6132c767bdfd46f0589b81c760c01b6107ce565b6132db67b0457063cebd82a360c01b6107ce565b6132ef675b626d0fcf3aa6ce60c01b6107ce565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516133189190615987565b60006040518083038185875af1925050503d8060008114613355576040519150601f19603f3d011682016040523d82523d6000602084013e61335a565b606091505b5091509150613373672fb56cccf4f3b66560c01b6107ce565b6133876747166df0733c52e860c01b6107ce565b816133bc576133a06719461c9227bd654a60c01b6107ce565b6133b46767b989a4f1f2a8f560c01b6107ce565b805160208201fd5b6133d067c859f4ceb5b7418760c01b6107ce565b5050505050565b6133eb67851edf0db3fe6a8060c01b6107ce565b6133ff67765412b7902e3abf60c01b6107ce565b61341367151d6c3106b9e49760c01b6107ce565b613427671b070d07d4380e9a60c01b6107ce565b61343033611973565b801561344c575061344b67d5ef82e5a5d379e060c01b6143f9565b5b8061349e57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561349d575061349c670cc2ae0862027a8c60c01b6143f9565b5b5b6134dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d4906164fb565b60405180910390fd5b6134f167362a52eb7781e15260c01b6107ce565b565b50565b60006135247f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614404565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b613561675b243153b1324c8660c01b6107ce565b61357567703050f3f8cbae0160c01b6107ce565b61358967096f3ba87c8df4a960c01b6107ce565b61359d67360d12c388c6eb2e60c01b6107ce565b6135a56133d7565b50565b6135d47f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b61440e565b60000160009054906101000a900460ff16156135f8576135f383614418565b613711565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561366057506040513d601f19601f8201168201806040525081019061365d9190616530565b60015b61369f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613696906165cf565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fb90616661565b60405180910390fd5b506137108383836144d1565b5b505050565b50565b61372d67e67927338dfde90a60c01b613716565b613741670e51b57b7e9b4da560c01b613716565b61375567e3f66e826ec687ff60c01b613716565b6137696792d1df458e7acb7960c01b613716565b613771612889565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146137de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d5906166f3565b60405180910390fd5b6137f267f59af56761c9812d60c01b613716565b565b600061380a676093453c1330862460c01b613c97565b61381e67835bb2ad8fc6876660c01b613c97565b613832678a3e1bd4ce6fe80d60c01b613c97565b600061383d836144fd565b9050613853671ebe560aa7e961f160c01b613c97565b61386767b72a53458f9dea9c60c01b613c97565b60006138cf8580610140019061387d9190615ce2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508361452d90919063ffffffff16565b90506138e567e8ce608a983a495f60c01b613c97565b6138f967268b407f65caafab60c01b613c97565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506139636787be9545063f25da60c01b613c97565b61397767bb8a929d7f7031ec60c01b613c97565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900465ffffffffffff1690506139e1679ac3d6404cede78060c01b613c97565b6139f5676ea4d06237a11c8b60c01b613c97565b6000808365ffffffffffff16149050613a1867f68f59b62204b54f60c01b613c97565b613a2c67e894599a91461c5060c01b613c97565b613a37818484614554565b9550505050505092915050565b613a5867f347b6eb768867bd60c01b6107ce565b613a6c67e4b8fad4d2d1902a60c01b6107ce565b613a806722ce8514c24b563d60c01b6107ce565b613a94676bd35fd711427f6d60c01b6107ce565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613ac39061672b565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614613b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b36906167ab565b60405180910390fd5b613b53675143066244fa845f60c01b6107ce565b50565b613b6a67cc5c47196db5bd6160c01b613716565b613b7e678b55e749b3c352ab60c01b613716565b613b9267e6442311764077fa60c01b613716565b60008114613c7f57613bae671589e0478f7a186060c01b613716565b613bc267d37e8b3807985e7360c01b613716565b613bd667c2c62d2bb50a980360c01b613716565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90604051613c1e906167f1565b600060405180830381858888f193505050503d8060008114613c5c576040519150601f19603f3d011682016040523d82523d6000602084013e613c61565b606091505b50509050613c796714643eaa19656f6660c01b613716565b50613c94565b613c9367cc382f158ab6697a60c01b613716565b5b50565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613cd16703748e24ba0bf9ec60c01b6107ce565b613ce5670bc8db960be8c07860c01b6107ce565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d3a67019acf8eca98742f60c01b6107ce565b613d4e67ffb0ee9b4a9774fe60c01b6107ce565b613d5781613dff565b613d6b675b78c5bf4202c90360c01b6107ce565b613d7f6725b6d74483d24a8260c01b6107ce565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b613e136717c7d6a68a08773960c01b6134f3565b613e2767cc8de6b882acb1a360c01b6134f3565b613e3b671ec2242cb4213daf60c01b6134f3565b613e4f67e7bfe4742339224760c01b6134f3565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed390616852565b60405180910390fd5b613ef0676270d7427db14f5b60c01b6134f3565b613f046704aa357520b4416d60c01b6134f3565b613f18672b9382deb815da6060c01b6134f3565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613f479190616063565b60405180910390a1613f6367c36c72a8ecc3a90660c01b6134f3565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613fd167c36ba9a4464b6ea960c01b612d9f565b613fe567dbc59bf60721ec3760c01b612d9f565b613ff967a9b899a25d7f84f360c01b612d9f565b61400d676ccf2b04ef43fe2c60c01b612d9f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614090906168be565b60405180910390fd5b6140ad677f234f21a7a7167460c01b612d9f565b6140c1675dad748d723fc1a560c01b612d9f565b6140d567bcc423d1b918455e60c01b612d9f565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52816040516141049190616063565b60405180910390a161412067ea5e8a43da197a0d60c01b612d9f565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61418f67473271421f468fd260c01b612d9f565b6141a36792976a0e8d69a1f860c01b612d9f565b6141b76722fdc4cd5a73662060c01b612d9f565b6141cb677f1705d0822221e360c01b612d9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361423a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161423190616950565b60405180910390fd5b61424e67d29ec12c81e5975160c01b612d9f565b614262675ce58ff31b29be9c60c01b612d9f565b61427667e300c4231196178660c01b612d9f565b61428a6756d066aad6d03b2860c01b612d9f565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430e906169bc565b60405180910390fd5b61432b67ceace18cb99efb4860c01b612d9f565b61433f67b298b03df19232ce60c01b612d9f565b6143536771c3a697a02cf77360c01b612d9f565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969816040516143829190616063565b60405180910390a161439e673094a602565cca5360c01b612d9f565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b61442181613c9a565b614460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161445790616a4e565b60405180910390fd5b8061448d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614404565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6144da83614600565b6000825111806144e75750805b156144f8576144f6838361464f565b505b505050565b6000816040516020016145109190616ae6565b604051602081830303815290604052805190602001209050919050565b600080600061453c858561467c565b91509150614549816146cd565b819250505092915050565b600061456a67f46661bb4e8bad1e60c01b614833565b61457e67ad115cf58922913f60c01b614833565b61459267e939de70e4ee463c60c01b614833565b60d08265ffffffffffff16901b60a08465ffffffffffff16901b8580156145c957506145c8675d24490627414a1d60c01b614836565b5b806145e457506145e36748f460bd74afa2fc60c01b614841565b5b6145ef5760006145f2565b60015b60ff16171790509392505050565b61460981614418565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606146748383604051806060016040528060278152602001616d7860279139614848565b905092915050565b60008060418351036146bd5760008060006020860151925060408601519150606086015160001a90506146b1878285856148ce565b945094505050506146c6565b60006002915091505b9250929050565b600060048111156146e1576146e0616b0c565b5b8160048111156146f4576146f3616b0c565b5b0315614830576001600481111561470e5761470d616b0c565b5b81600481111561472157614720616b0c565b5b03614761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161475890616b87565b60405180910390fd5b6002600481111561477557614774616b0c565b5b81600481111561478857614787616b0c565b5b036147c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147bf90616bf3565b60405180910390fd5b600360048111156147dc576147db616b0c565b5b8160048111156147ef576147ee616b0c565b5b0361482f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161482690616c85565b60405180910390fd5b5b50565b50565b600060019050919050565b6000919050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516148729190615987565b600060405180830381855af49150503d80600081146148ad576040519150601f19603f3d011682016040523d82523d6000602084013e6148b2565b606091505b50915091506148c3868383876149b0565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156149095760006003915091506149a7565b60006001878787876040516000815260200160405260405161492e9493929190615bfc565b6020604051602081039080840390855afa158015614950573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361499e576000600192509250506149a7565b80600092509250505b94509492505050565b60608315614a12576000835103614a0a576149ca85613c9a565b614a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a0090616cf1565b60405180910390fd5b5b829050614a1d565b614a1c8383614a25565b5b949350505050565b600082511115614a385781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a6c9190616d55565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ab482614a89565b9050919050565b614ac481614aa9565b8114614acf57600080fd5b50565b600081359050614ae181614abb565b92915050565b6000819050919050565b614afa81614ae7565b8114614b0557600080fd5b50565b600081359050614b1781614af1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b4257614b41614b1d565b5b8235905067ffffffffffffffff811115614b5f57614b5e614b22565b5b602083019150836001820283011115614b7b57614b7a614b27565b5b9250929050565b60008060008060008060008060c0898b031215614ba257614ba1614a7f565b5b6000614bb08b828c01614ad2565b9850506020614bc18b828c01614ad2565b9750506040614bd28b828c01614ad2565b9650506060614be38b828c01614b08565b955050608089013567ffffffffffffffff811115614c0457614c03614a84565b5b614c108b828c01614b2c565b945094505060a089013567ffffffffffffffff811115614c3357614c32614a84565b5b614c3f8b828c01614b2c565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614c8681614c51565b8114614c9157600080fd5b50565b600081359050614ca381614c7d565b92915050565b600060208284031215614cbf57614cbe614a7f565b5b6000614ccd84828501614c94565b91505092915050565b60008115159050919050565b614ceb81614cd6565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b600060208284031215614d2257614d21614a7f565b5b6000614d3084828501614ad2565b91505092915050565b600080600080600060808688031215614d5557614d54614a7f565b5b6000614d6388828901614ad2565b9550506020614d7488828901614ad2565b9450506040614d8588828901614b08565b935050606086013567ffffffffffffffff811115614da657614da5614a84565b5b614db288828901614b2c565b92509250509295509295909350565b614dca81614c51565b82525050565b6000602082019050614de56000830184614dc1565b92915050565b6000819050919050565b614dfe81614deb565b8114614e0957600080fd5b50565b600081359050614e1b81614df5565b92915050565b614e2a81614cd6565b8114614e3557600080fd5b50565b600081359050614e4781614e21565b92915050565b600080600080600060808688031215614e6957614e68614a7f565b5b6000614e7788828901614ad2565b9550506020614e8888828901614e0c565b945050604086013567ffffffffffffffff811115614ea957614ea8614a84565b5b614eb588828901614b2c565b93509350506060614ec888828901614e38565b9150509295509295909350565b60008083601f840112614eeb57614eea614b1d565b5b8235905067ffffffffffffffff811115614f0857614f07614b22565b5b602083019150836020820283011115614f2457614f23614b27565b5b9250929050565b60008083601f840112614f4157614f40614b1d565b5b8235905067ffffffffffffffff811115614f5e57614f5d614b22565b5b602083019150836020820283011115614f7a57614f79614b27565b5b9250929050565b60008060008060408587031215614f9b57614f9a614a7f565b5b600085013567ffffffffffffffff811115614fb957614fb8614a84565b5b614fc587828801614ed5565b9450945050602085013567ffffffffffffffff811115614fe857614fe7614a84565b5b614ff487828801614f2b565b925092505092959194509250565b600080fd5b6000610160828403121561501e5761501d615002565b5b81905092915050565b6000806000606084860312156150405761503f614a7f565b5b600084013567ffffffffffffffff81111561505e5761505d614a84565b5b61506a86828701615007565b935050602061507b86828701614e0c565b925050604061508c86828701614b08565b9150509250925092565b61509f81614ae7565b82525050565b60006020820190506150ba6000830184615096565b92915050565b600065ffffffffffff82169050919050565b6150db816150c0565b82525050565b60006020820190506150f660008301846150d2565b92915050565b600061510782614aa9565b9050919050565b615117816150fc565b811461512257600080fd5b50565b6000813590506151348161510e565b92915050565b6000806040838503121561515157615150614a7f565b5b600061515f85828601615125565b925050602061517085828601614ad2565b9150509250929050565b600061518582614a89565b9050919050565b6151958161517a565b81146151a057600080fd5b50565b6000813590506151b28161518c565b92915050565b600080604083850312156151cf576151ce614a7f565b5b60006151dd858286016151a3565b92505060206151ee85828601614b08565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b615246826151fd565b810181811067ffffffffffffffff821117156152655761526461520e565b5b80604052505050565b6000615278614a75565b9050615284828261523d565b919050565b600067ffffffffffffffff8211156152a4576152a361520e565b5b6152ad826151fd565b9050602081019050919050565b82818337600083830152505050565b60006152dc6152d784615289565b61526e565b9050828152602081018484840111156152f8576152f76151f8565b5b6153038482856152ba565b509392505050565b600082601f8301126153205761531f614b1d565b5b81356153308482602086016152c9565b91505092915050565b600080604083850312156153505761534f614a7f565b5b600061535e85828601614ad2565b925050602083013567ffffffffffffffff81111561537f5761537e614a84565b5b61538b8582860161530b565b9150509250929050565b61539e81614deb565b82525050565b60006020820190506153b96000830184615395565b92915050565b600080600080606085870312156153d9576153d8614a7f565b5b60006153e787828801614ad2565b94505060206153f887828801614e0c565b935050604085013567ffffffffffffffff81111561541957615418614a84565b5b61542587828801614b2c565b925092505092959194509250565b6000819050919050565b600061545861545361544e84614a89565b615433565b614a89565b9050919050565b600061546a8261543d565b9050919050565b600061547c8261545f565b9050919050565b61548c81615471565b82525050565b60006020820190506154a76000830184615483565b92915050565b600080600080606085870312156154c7576154c6614a7f565b5b60006154d587828801614ad2565b94505060206154e687828801614b08565b935050604085013567ffffffffffffffff81111561550757615506614a84565b5b61551387828801614b2c565b925092505092959194509250565b60008083601f84011261553757615536614b1d565b5b8235905067ffffffffffffffff81111561555457615553614b22565b5b6020830191508360208202830111156155705761556f614b27565b5b9250929050565b60008060008060008060008060a0898b03121561559757615596614a7f565b5b60006155a58b828c01614ad2565b98505060206155b68b828c01614ad2565b975050604089013567ffffffffffffffff8111156155d7576155d6614a84565b5b6155e38b828c01615521565b9650965050606089013567ffffffffffffffff81111561560657615605614a84565b5b6156128b828c01615521565b9450945050608089013567ffffffffffffffff81111561563557615634614a84565b5b6156418b828c01614b2c565b92509250509295985092959890939650565b61565c816150c0565b811461566757600080fd5b50565b60008135905061567981615653565b92915050565b60008060006060848603121561569857615697614a7f565b5b60006156a686828701614ad2565b93505060206156b78682870161566a565b92505060406156c88682870161566a565b9150509250925092565b60008060008060008060a087890312156156ef576156ee614a7f565b5b60006156fd89828a01614ad2565b965050602061570e89828a01614ad2565b955050604061571f89828a01614b08565b945050606061573089828a01614b08565b935050608087013567ffffffffffffffff81111561575157615750614a84565b5b61575d89828a01614b2c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157a682614ae7565b91506157b183614ae7565b92508282039050818111156157c9576157c861576c565b5b92915050565b600080fd5b600080fd5b600080858511156157ed576157ec6157cf565b5b838611156157fe576157fd6157d4565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006158388383615814565b826158438135614deb565b925060208210156158835761587e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261581f565b831692505b505092915050565b6000806000606084860312156158a4576158a3614a7f565b5b60006158b2868287016151a3565b935050602084013567ffffffffffffffff8111156158d3576158d2614a84565b5b6158df8682870161530b565b925050604084013567ffffffffffffffff811115615900576158ff614a84565b5b61590c8682870161530b565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561594a57808201518184015260208101905061592f565b60008484015250505050565b600061596182615916565b61596b8185615921565b935061597b81856020860161592c565b80840191505092915050565b60006159938284615956565b915081905092915050565b600082825260208201905092915050565b60006159ba82615916565b6159c4818561599e565b93506159d481856020860161592c565b6159dd816151fd565b840191505092915050565b60006020820190508181036000830152615a0281846159af565b905092915050565b6000604082019050615a1f6000830185615395565b8181036020830152615a3181846159af565b90509392505050565b600081519050615a4981614c7d565b92915050565b600060208284031215615a6557615a64614a7f565b5b6000615a7384828501615a3a565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000615ae9603a83615a7c565b9150615af482615a8d565b604082019050919050565b60006020820190508181036000830152615b1881615adc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000615baa602d83615a7c565b9150615bb582615b4e565b604082019050919050565b60006020820190508181036000830152615bd981615b9d565b9050919050565b600060ff82169050919050565b615bf681615be0565b82525050565b6000608082019050615c116000830187615395565b615c1e6020830186615bed565b615c2b6040830185615395565b615c386060830184615395565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000615c9d603383615a7c565b9150615ca882615c41565b604082019050919050565b60006020820190508181036000830152615ccc81615c90565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615cff57615cfe615cd3565b5b80840192508235915067ffffffffffffffff821115615d2157615d20615cd8565b5b602083019250600182023603831315615d3d57615d3c615cdd565b5b509250929050565b6000615d5082614ae7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615d8257615d8161576c565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000615de9603383615a7c565b9150615df482615d8d565b604082019050919050565b60006020820190508181036000830152615e1881615ddc565b9050919050565b615e2881614aa9565b82525050565b6000604082019050615e436000830185615e1f565b615e506020830184615e1f565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000615eb3602c83615a7c565b9150615ebe82615e57565b604082019050919050565b60006020820190508181036000830152615ee281615ea6565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000615f45602c83615a7c565b9150615f5082615ee9565b604082019050919050565b60006020820190508181036000830152615f7481615f38565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000615fd7602e83615a7c565b9150615fe282615f7b565b604082019050919050565b6000602082019050818103600083015261600681615fca565b9050919050565b6000819050919050565b600061603261602d6160288461600d565b615433565b615be0565b9050919050565b61604281616017565b82525050565b600060208201905061605d6000830184616039565b92915050565b60006020820190506160786000830184615e1f565b92915050565b6160878161517a565b82525050565b60006040820190506160a2600083018561607e565b6160af6020830184615096565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000616112603883615a7c565b915061611d826160b6565b604082019050919050565b6000602082019050818103600083015261614181616105565b9050919050565b6000616154838561599e565b93506161618385846152ba565b61616a836151fd565b840190509392505050565b600060808201905061618a6000830188615e1f565b6161976020830187615395565b81810360408301526161aa818587616148565b90506161b96060830184614ce2565b9695505050505050565b6000815190506161d281614e21565b92915050565b6000602082840312156161ee576161ed614a7f565b5b60006161fc848285016161c3565b91505092915050565b60008151905061621481614af1565b92915050565b6000602082840312156162305761622f614a7f565b5b600061623e84828501616205565b91505092915050565b7f77726f6e6720756e74696c2f6166746572000000000000000000000000000000600082015250565b600061627d601183615a7c565b915061628882616247565b602082019050919050565b600060208201905081810360008301526162ac81616270565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b600061630f602883615a7c565b915061631a826162b3565b604082019050919050565b6000602082019050818103600083015261633e81616302565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b600061637b601a83615a7c565b915061638682616345565b602082019050919050565b600060208201905081810360008301526163aa8161636e565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b60006163e7601b83615a7c565b91506163f2826163b1565b602082019050919050565b60006020820190508181036000830152616416816163da565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000616479602983615a7c565b91506164848261641d565b604082019050919050565b600060208201905081810360008301526164a88161646c565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b60006164e5601c83615a7c565b91506164f0826164af565b602082019050919050565b60006020820190508181036000830152616514816164d8565b9050919050565b60008151905061652a81614df5565b92915050565b60006020828403121561654657616545614a7f565b5b60006165548482850161651b565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006165b9602e83615a7c565b91506165c48261655d565b604082019050919050565b600060208201905081810360008301526165e8816165ac565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b600061664b602983615a7c565b9150616656826165ef565b604082019050919050565b6000602082019050818103600083015261667a8161663e565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006166dd602483615a7c565b91506166e882616681565b604082019050919050565b6000602082019050818103600083015261670c816166d0565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061673682616713565b91506bffffffffffffffffffffffff82036167545761675361576c565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b6000616795601f83615a7c565b91506167a08261675f565b602082019050919050565b600060208201905081810360008301526167c481616788565b9050919050565b50565b60006167db600083615921565b91506167e6826167cb565b600082019050919050565b60006167fc826167ce565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b600061683c601883615a7c565b915061684782616806565b602082019050919050565b6000602082019050818103600083015261686b8161682f565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006168a8602083615a7c565b91506168b382616872565b602082019050919050565b600060208201905081810360008301526168d78161689b565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b600061693a602883615a7c565b9150616945826168de565b604082019050919050565b600060208201905081810360008301526169698161692d565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b60006169a6601c83615a7c565b91506169b182616970565b602082019050919050565b600060208201905081810360008301526169d581616999565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000616a38602d83615a7c565b9150616a43826169dc565b604082019050919050565b60006020820190508181036000830152616a6781616a2b565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616aaf601c83616a6e565b9150616aba82616a79565b601c82019050919050565b6000819050919050565b616ae0616adb82614deb565b616ac5565b82525050565b6000616af182616aa2565b9150616afd8284616acf565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000616b71601883615a7c565b9150616b7c82616b3b565b602082019050919050565b60006020820190508181036000830152616ba081616b64565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000616bdd601f83615a7c565b9150616be882616ba7565b602082019050919050565b60006020820190508181036000830152616c0c81616bd0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000616c6f602283615a7c565b9150616c7a82616c13565b604082019050919050565b60006020820190508181036000830152616c9e81616c62565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616cdb601d83615a7c565b9150616ce682616ca5565b602082019050919050565b60006020820190508181036000830152616d0a81616cce565b9050919050565b600081519050919050565b6000616d2782616d11565b616d318185615a7c565b9350616d4181856020860161592c565b616d4a816151fd565b840191505092915050565b60006020820190508181036000830152616d6f8184616d1c565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e6d654d678d3a9ff59c3868db2eafaf0374dc3faa8ae9a15175d0e7ea188bdd664736f6c63430008110033"; type TestExpiryAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts b/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts index 1d0c98eb..4f19bf5d 100644 --- a/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts @@ -155,7 +155,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506107a2806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806324d3cde6146100515780634fe5f5cf14610081578063a4b2282e146100b1578063b059e2fa146100e1575b600080fd5b61006b6004803603810190610066919061056c565b610111565b60405161007891906105b2565b60405180910390f35b61009b600480360381019061009691906105f9565b610123565b6040516100a89190610699565b60405180910390f35b6100cb60048036038101906100c691906106b4565b61013d565b6040516100d89190610699565b60405180910390f35b6100fb60048036038101906100f69190610719565b610155565b60405161010891906105b2565b60405180910390f35b600061011c8261016b565b9050919050565b61012b610385565b61013583836101b3565b905092915050565b610145610385565b61014e826102c7565b9050919050565b600061016284848461034c565b90509392505050565b600060d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6101bb610385565b60006101c6846102c7565b905060006101d3846102c7565b9050600082600001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561021b57816000015190505b6000836020015190506000846040015190506000846020015190506000856040015190508165ffffffffffff168465ffffffffffff16101561025b578193505b8065ffffffffffff168365ffffffffffff161115610277578092505b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6102cf610385565b6000829050600060a084901c905060008165ffffffffffff1614156102f85765ffffffffffff90505b600060d085901c905060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85610374576000610377565b60015b60ff16171790509392505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610429826103e0565b810181811067ffffffffffffffff82111715610448576104476103f1565b5b80604052505050565b600061045b6103cc565b90506104678282610420565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104978261046c565b9050919050565b6104a78161048c565b81146104b257600080fd5b50565b6000813590506104c48161049e565b92915050565b600065ffffffffffff82169050919050565b6104e5816104ca565b81146104f057600080fd5b50565b600081359050610502816104dc565b92915050565b60006060828403121561051e5761051d6103db565b5b6105286060610451565b90506000610538848285016104b5565b600083015250602061054c848285016104f3565b6020830152506040610560848285016104f3565b60408301525092915050565b600060608284031215610582576105816103d6565b5b600061059084828501610508565b91505092915050565b6000819050919050565b6105ac81610599565b82525050565b60006020820190506105c760008301846105a3565b92915050565b6105d681610599565b81146105e157600080fd5b50565b6000813590506105f3816105cd565b92915050565b600080604083850312156106105761060f6103d6565b5b600061061e858286016105e4565b925050602061062f858286016105e4565b9150509250929050565b6106428161048c565b82525050565b610651816104ca565b82525050565b60608201600082015161066d6000850182610639565b5060208201516106806020850182610648565b5060408201516106936040850182610648565b50505050565b60006060820190506106ae6000830184610657565b92915050565b6000602082840312156106ca576106c96103d6565b5b60006106d8848285016105e4565b91505092915050565b60008115159050919050565b6106f6816106e1565b811461070157600080fd5b50565b600081359050610713816106ed565b92915050565b600080600060608486031215610732576107316103d6565b5b600061074086828701610704565b9350506020610751868287016104f3565b9250506040610762868287016104f3565b915050925092509256fea264697066735822122033ee991e40819abe9debf08398c6d0b858ff4f753ab67255e7f397abd7072bfa64736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b50610cdb806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806324d3cde6146100515780634fe5f5cf14610081578063a4b2282e146100b1578063b059e2fa146100e1575b600080fd5b61006b60048036038101906100669190610aa5565b610111565b6040516100789190610aeb565b60405180910390f35b61009b60048036038101906100969190610b32565b61015f565b6040516100a89190610bd2565b60405180910390f35b6100cb60048036038101906100c69190610bed565b6101b5565b6040516100d89190610bd2565b60405180910390f35b6100fb60048036038101906100f69190610c52565b610209565b6040516101089190610aeb565b60405180910390f35b600061012767cae266292b58cddb60c01b61025b565b61013b6760134991dff8120d60c01b61025b565b61014f6743fb9b02296c824d60c01b61025b565b6101588261025e565b9050919050565b6101676108be565b61017b67e7dd0eacf23b854560c01b61025b565b61018f6706e30060de349dd260c01b61025b565b6101a367b82355ada54da35e60c01b61025b565b6101ad83836102e2565b905092915050565b6101bd6108be565b6101d1670c778a37fb6091c260c01b61025b565b6101e5671606f6ef4505580f60c01b61025b565b6101f967633bf8864702a39460c01b61025b565b6102028261065c565b9050919050565b600061021f678da6f0bf1d7f377f60c01b61025b565b61023367f35225933ea1682060c01b61025b565b610247677bdacee441ea9b7060c01b61025b565b6102528484846107fd565b90509392505050565b50565b60006102746717718d3268584e5860c01b6108a9565b6102886719e6416798285bdf60c01b6108a9565b61029c67a626d76b40db563f60c01b6108a9565b60d0826020015165ffffffffffff16901b60a0836040015165ffffffffffff16901b836000015173ffffffffffffffffffffffffffffffffffffffff1617179050919050565b6102ea6108be565b6102fe67e69f7455fa7a07b360c01b6108a9565b61031267b4cd7af03ea2c5fa60c01b6108a9565b61032667ada53efb1dfccb7760c01b6108a9565b60006103318461065c565b9050610347674d0f716f7bcb7b9260c01b6108a9565b61035b67d63d53a2153b304860c01b6108a9565b60006103668461065c565b905061037c6722fc217c8bb3a21260c01b6108a9565b61039067d43a06a00665043560c01b6108a9565b6000826000015190506103ad67151bc2b1c770894460c01b6108a9565b6103c16732841106c226c6e260c01b6108a9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361042957610409671aace643f445af3c60c01b6108a9565b61041d67b767f16e441c791560c01b6108a9565b8160000151905061043e565b61043d6721f72ae527759e0160c01b6108a9565b5b61045267976cb73ee93faf4060c01b6108a9565b61046667fbc1cf9b45ac9e0560c01b6108a9565b600083602001519050610483675ae02cf73427453160c01b6108a9565b610497672f3e3d635ca3dee260c01b6108a9565b6000846040015190506104b467d85c8bdd30a53c2060c01b6108a9565b6104c867479ce7ff317d61d960c01b6108a9565b6000846020015190506104e56748cd0366f66a74d660c01b6108a9565b6104f967233a1ba95415d76360c01b6108a9565b60008560400151905061051667f891c3f91e3987cf60c01b6108a9565b61052a67ee2ac2151246907660c01b6108a9565b8165ffffffffffff168465ffffffffffff16101561055e57610556677765bdded08f417460c01b6108a9565b819350610573565b610572673db76e2382591bc460c01b6108a9565b5b61058767bbd9ea227d2e8b6160c01b6108a9565b61059b67269600f4d05d62c160c01b6108a9565b8065ffffffffffff168365ffffffffffff1611156105cf576105c767769c64441515ae4760c01b6108a9565b8092506105e4565b6105e36792508f8b38fce31860c01b6108a9565b5b6105f867c4465d6321fbb3e560c01b6108a9565b61060c67d764ee64c31d59fd60c01b6108a9565b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6106646108be565b61067867445255dfc48f0c1160c01b6108a9565b61068c67910e9ceb2fd1ddda60c01b6108a9565b6106a0678110ad95ab238bef60c01b6108a9565b60008290506106b967c37597af64d819b260c01b6108a9565b6106cd67745df2de1e3ff8c060c01b6108a9565b600060a084901c90506106ea675f3ae0fbd8e35c5660c01b6108a9565b6106fe679197384898b1248760c01b6108a9565b60008165ffffffffffff160361074457610722676ec2d105430e80aa60c01b6108a9565b610736673b4825f59f411ff360c01b6108a9565b65ffffffffffff9050610759565b61075867d11e3810d26f91af60c01b6108a9565b5b61076d67b9e858fecf1822cf60c01b6108a9565b61078167d84bfe2ecd699a3c60c01b6108a9565b600060d085901c905061079e67bf26ab64782cc21560c01b6108a9565b6107b26716b05318dd950b3260c01b6108a9565b60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b600061081367f46661bb4e8bad1e60c01b6108a9565b61082767ad115cf58922913f60c01b6108a9565b61083b67e939de70e4ee463c60c01b6108a9565b60d08265ffffffffffff16901b60a08465ffffffffffff16901b8580156108725750610871675d24490627414a1d60c01b6108ac565b5b8061088d575061088c6748f460bd74afa2fc60c01b6108b7565b5b61089857600061089b565b60015b60ff16171790509392505050565b50565b600060019050919050565b6000919050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61096282610919565b810181811067ffffffffffffffff821117156109815761098061092a565b5b80604052505050565b6000610994610905565b90506109a08282610959565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109d0826109a5565b9050919050565b6109e0816109c5565b81146109eb57600080fd5b50565b6000813590506109fd816109d7565b92915050565b600065ffffffffffff82169050919050565b610a1e81610a03565b8114610a2957600080fd5b50565b600081359050610a3b81610a15565b92915050565b600060608284031215610a5757610a56610914565b5b610a61606061098a565b90506000610a71848285016109ee565b6000830152506020610a8584828501610a2c565b6020830152506040610a9984828501610a2c565b60408301525092915050565b600060608284031215610abb57610aba61090f565b5b6000610ac984828501610a41565b91505092915050565b6000819050919050565b610ae581610ad2565b82525050565b6000602082019050610b006000830184610adc565b92915050565b610b0f81610ad2565b8114610b1a57600080fd5b50565b600081359050610b2c81610b06565b92915050565b60008060408385031215610b4957610b4861090f565b5b6000610b5785828601610b1d565b9250506020610b6885828601610b1d565b9150509250929050565b610b7b816109c5565b82525050565b610b8a81610a03565b82525050565b606082016000820151610ba66000850182610b72565b506020820151610bb96020850182610b81565b506040820151610bcc6040850182610b81565b50505050565b6000606082019050610be76000830184610b90565b92915050565b600060208284031215610c0357610c0261090f565b5b6000610c1184828501610b1d565b91505092915050565b60008115159050919050565b610c2f81610c1a565b8114610c3a57600080fd5b50565b600081359050610c4c81610c26565b92915050565b600080600060608486031215610c6b57610c6a61090f565b5b6000610c7986828701610c3d565b9350506020610c8a86828701610a2c565b9250506040610c9b86828701610a2c565b915050925092509256fea26469706673582212205f9db45ca01034b5997cec04470e3ba477bb9afbc44deb8366959476b7fe04f764736f6c63430008110033"; type TestHelpersConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts b/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts index 97b15ba4..0a2b2de8 100644 --- a/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts @@ -32,7 +32,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d1eca9cf14610030575b600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b60405180910390f35b600060028261006f9190610137565b9050919050565b600080fd5b6000819050919050565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b91505092915050565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b82820290509291505056fea2646970667358221220e586b7e28ee081659dcb8de8ca6dbe3638946addabdcc46acc7392477e81c4d364736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b506101ee806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063d1eca9cf14610030575b600080fd5b61004a600480360381019061004591906100f0565b610060565b604051610057919061012c565b60405180910390f35b6000610076671de6df21cf0f923a60c01b6100b2565b61008a673ac66211b4f06d2060c01b6100b2565b61009e67f5762ff1a1db9bae60c01b6100b2565b6002826100ab9190610176565b9050919050565b50565b600080fd5b6000819050919050565b6100cd816100ba565b81146100d857600080fd5b50565b6000813590506100ea816100c4565b92915050565b600060208284031215610106576101056100b5565b5b6000610114848285016100db565b91505092915050565b610126816100ba565b82525050565b6000602082019050610141600083018461011d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610181826100ba565b915061018c836100ba565b925082820261019a816100ba565b915082820484148315176101b1576101b0610147565b5b509291505056fea264697066735822122021d72174a66ed2db30b236932b17dda763fb8c4699f9fd1d2d39e4ad9809a99964736f6c63430008110033"; type TestOracleConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts b/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts index 8228b56c..9adbfa69 100644 --- a/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts @@ -274,7 +274,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b506040516200141038038062001410833981810160405281019062000037919062000224565b80620000586200004c620000da60201b60201c565b620000e260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614620000d357620000d232620000e260201b60201c565b5b5062000256565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d882620001ab565b9050919050565b6000620001ec82620001cb565b9050919050565b620001fe81620001df565b81146200020a57600080fd5b50565b6000815190506200021e81620001f3565b92915050565b6000602082840312156200023d576200023c620001a6565b5b60006200024d848285016200020d565b91505092915050565b60805161116d620002a36000396000818161026d01528181610304015281816103ec01528181610418015281816104a201528181610532015281816105d10152610848015261116d6000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c19190610999565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610a5a565b6102fa565b005b3480156100fd57600080fd5b50610106610393565b005b34801561011457600080fd5b5061011d6103a7565b60405161012a9190610abb565b60405180910390f35b34801561013f57600080fd5b5061015a60048036038101906101559190610b60565b6103d0565b005b34801561016857600080fd5b506101716103ea565b60405161017e9190610c33565b60405180910390f35b34801561019357600080fd5b5061019c61040e565b005b3480156101aa57600080fd5b506101c560048036038101906101c09190610c4e565b610498565b005b3480156101d357600080fd5b506101dc61052e565b6040516101e99190610c8a565b60405180910390f35b6101fa6105cf565b005b34801561020857600080fd5b50610223600480360381019061021e9190610cd1565b61065d565b005b34801561023157600080fd5b5061024c60048036038101906102479190610d59565b6106e1565b60405161025a929190610e61565b60405180910390f35b61026b610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016102c59190610ea0565b6000604051808303818588803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050505050565b610302610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161035d929190610eca565b600060405180830381600087803b15801561037757600080fd5b505af115801561038b573d6000803e3d6000fd5b505050505050565b61039b610704565b6103a56000610782565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103d8610846565b6103e4848484846108d6565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610416610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b50505050565b6104a0610704565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016104f99190610ef3565b600060405180830381600087803b15801561051357600080fd5b505af1158015610527573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105899190610abb565b602060405180830381865afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca9190610f23565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016106299190610abb565b6000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b5050505050565b610665610704565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90610fd3565b60405180910390fd5b6106de81610782565b50565b606060006106ed610846565b6106f8858585610911565b91509150935093915050565b61070c61094b565b73ffffffffffffffffffffffffffffffffffffffff1661072a6103a7565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107779061103f565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb906110ab565b60405180910390fd5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890611117565b60405180910390fd5b606060006130398314610925576000610928565b60015b60405180602001604052806000815250908060ff16905091509150935093915050565b600033905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b6109768161095d565b811461098157600080fd5b50565b6000813590506109938161096d565b92915050565b6000602082840312156109af576109ae610953565b5b60006109bd84828501610984565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109f1826109c6565b9050919050565b610a01816109e6565b8114610a0c57600080fd5b50565b600081359050610a1e816109f8565b92915050565b6000819050919050565b610a3781610a24565b8114610a4257600080fd5b50565b600081359050610a5481610a2e565b92915050565b60008060408385031215610a7157610a70610953565b5b6000610a7f85828601610a0f565b9250506020610a9085828601610a45565b9150509250929050565b6000610aa5826109c6565b9050919050565b610ab581610a9a565b82525050565b6000602082019050610ad06000830184610aac565b92915050565b60038110610ae357600080fd5b50565b600081359050610af581610ad6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610b2057610b1f610afb565b5b8235905067ffffffffffffffff811115610b3d57610b3c610b00565b5b602083019150836001820283011115610b5957610b58610b05565b5b9250929050565b60008060008060608587031215610b7a57610b79610953565b5b6000610b8887828801610ae6565b945050602085013567ffffffffffffffff811115610ba957610ba8610958565b5b610bb587828801610b0a565b93509350506040610bc887828801610a45565b91505092959194509250565b6000819050919050565b6000610bf9610bf4610bef846109c6565b610bd4565b6109c6565b9050919050565b6000610c0b82610bde565b9050919050565b6000610c1d82610c00565b9050919050565b610c2d81610c12565b82525050565b6000602082019050610c486000830184610c24565b92915050565b600060208284031215610c6457610c63610953565b5b6000610c7284828501610a0f565b91505092915050565b610c8481610a24565b82525050565b6000602082019050610c9f6000830184610c7b565b92915050565b610cae81610a9a565b8114610cb957600080fd5b50565b600081359050610ccb81610ca5565b92915050565b600060208284031215610ce757610ce6610953565b5b6000610cf584828501610cbc565b91505092915050565b600080fd5b60006101608284031215610d1a57610d19610cfe565b5b81905092915050565b6000819050919050565b610d3681610d23565b8114610d4157600080fd5b50565b600081359050610d5381610d2d565b92915050565b600080600060608486031215610d7257610d71610953565b5b600084013567ffffffffffffffff811115610d9057610d8f610958565b5b610d9c86828701610d03565b9350506020610dad86828701610d44565b9250506040610dbe86828701610a45565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e02578082015181840152602081019050610de7565b83811115610e11576000848401525b50505050565b6000601f19601f8301169050919050565b6000610e3382610dc8565b610e3d8185610dd3565b9350610e4d818560208601610de4565b610e5681610e17565b840191505092915050565b60006040820190508181036000830152610e7b8185610e28565b9050610e8a6020830184610c7b565b9392505050565b610e9a8161095d565b82525050565b6000602082019050610eb56000830184610e91565b92915050565b610ec4816109e6565b82525050565b6000604082019050610edf6000830185610ebb565b610eec6020830184610c7b565b9392505050565b6000602082019050610f086000830184610ebb565b92915050565b600081519050610f1d81610a2e565b92915050565b600060208284031215610f3957610f38610953565b5b6000610f4784828501610f0e565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610fbd602683610f50565b9150610fc882610f61565b604082019050919050565b60006020820190508181036000830152610fec81610fb0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611029602083610f50565b915061103482610ff3565b602082019050919050565b600060208201905081810360008301526110588161101c565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000611095601583610f50565b91506110a08261105f565b602082019050919050565b600060208201905081810360008301526110c481611088565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b6000611101600d83610f50565b915061110c826110cb565b602082019050919050565b60006020820190508181036000830152611130816110f4565b905091905056fea26469706673582212206eafc8801f94bbc1af740176963ae5093ccdcb813cd32f7eacc80e8dc845bd2264736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b50604051620019313803806200193183398181016040528101906200003791906200032c565b80620000586200004c620001dc60201b60201c565b620001e460201b60201c565b6200007467aabb336c9ce83de860c01b620002a860201b60201c565b62000090672d07becd259a4ef060c01b620002a860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620000e167a24a1fbd4460121260c01b620002ab60201b60201c565b620000fd671cdb9e5986247d6c60c01b620002ab60201b60201c565b62000119674c45b8e25fc9156560c01b620002ab60201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614620001b85762000169677ef8045f9f4ada0360c01b620002ab60201b60201c565b62000185671a90269c12c8ba2260c01b620002ab60201b60201c565b620001a16706fe28dc5e467d5e60c01b620002ab60201b60201c565b620001b232620001e460201b60201c565b620001d5565b620001d467cb1ff296503353f360c01b620002ab60201b60201c565b5b506200035e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002e082620002b3565b9050919050565b6000620002f482620002d3565b9050919050565b6200030681620002e7565b81146200031257600080fd5b50565b6000815190506200032681620002fb565b92915050565b600060208284031215620003455762000344620002ae565b5b6000620003558482850162000315565b91505092915050565b608051611586620003ab600039600081816102d1015281816103cc01528181610518015281816105a801528181610696015281816107620152818161083d0152610b6a01526115866000f3fe6080604052600436106100a75760003560e01c8063bb9fe6bf11610064578063bb9fe6bf14610187578063c23a5cea1461019e578063c399ec88146101c7578063d0e30db0146101f2578063f2fde38b146101fc578063f465c77e14610225576100a7565b80630396cb60146100ac578063205c2878146100c8578063715018a6146100f15780638da5cb5b14610108578063a9a2340914610133578063b0d691fe1461015c575b600080fd5b6100c660048036038101906100c19190610dbb565b610263565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190610e7c565b61035e565b005b3480156100fd57600080fd5b5061010661045b565b005b34801561011457600080fd5b5061011d61046f565b60405161012a9190610edd565b60405180910390f35b34801561013f57600080fd5b5061015a60048036038101906101559190610f82565b610498565b005b34801561016857600080fd5b50610171610516565b60405161017e9190611055565b60405180910390f35b34801561019357600080fd5b5061019c61053a565b005b3480156101aa57600080fd5b506101c560048036038101906101c09190611070565b610628565b005b3480156101d357600080fd5b506101dc610722565b6040516101e991906110ac565b60405180910390f35b6101fa6107ff565b005b34801561020857600080fd5b50610223600480360381019061021e91906110f3565b6108c9565b005b34801561023157600080fd5b5061024c6004803603810190610247919061117b565b61094c565b60405161025a92919061127a565b60405180910390f35b61027767b8237d27482ab06b60c01b6109d3565b61027f6109d6565b61029367e2f107173549500460c01b6109d3565b6102a76701033209d47e5b2460c01b6109d3565b6102bb67dcd4652c61f0b32d60c01b6109d3565b6102cf67eae392c3eb511cc760c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161032991906112b9565b6000604051808303818588803b15801561034257600080fd5b505af1158015610356573d6000803e3d6000fd5b505050505050565b610372672907e6d97c3d1da360c01b6109d3565b61037a6109d6565b61038e678ac019c63563710260c01b6109d3565b6103a267da1f1c840719888260c01b6109d3565b6103b667bc135ce98e9f326f60c01b6109d3565b6103ca67532d977f60999f3e60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016104259291906112e3565b600060405180830381600087803b15801561043f57600080fd5b505af1158015610453573d6000803e3d6000fd5b505050505050565b6104636109d6565b61046d6000610a54565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104ac672cf57c41b8b89fcb60c01b6109d3565b6104c06799497fbe705cd9f760c01b6109d3565b6104d4679b4512fe9e58bae960c01b6109d3565b6104dc610b18565b6104f06793ce2f3709fe770560c01b6109d3565b6105046790067c65a6f5d3a860c01b6109d3565b61051084848484610c0c565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e67ec8a9719e7b677d060c01b6109d3565b6105566109d6565b61056a67672cc496b6067cea60c01b6109d3565b61057e674fdbd001b77629ae60c01b6109d3565b610592677362eae3491c0ae160c01b6109d3565b6105a66797f9e99fb1d4b33860c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561060e57600080fd5b505af1158015610622573d6000803e3d6000fd5b50505050565b61063c67c9ef1b986fb51fe860c01b6109d3565b6106446109d6565b61065867de53cad8928d67f560c01b6109d3565b61066c677af1d989d252676f60c01b6109d3565b610680676fd423196847dbb160c01b6109d3565b61069467097023434434ee0460c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b81526004016106ed919061130c565b600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b5050505050565b600061073867f6be01970597753160c01b6109d3565b61074c673f87ae81816372b460c01b6109d3565b61076067bd328ab4ce68c2fb60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107b99190610edd565b602060405180830381865afa1580156107d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fa919061133c565b905090565b610813673943ebd1bec8d2d660c01b6109d3565b6108276702fc4196924a47ac60c01b6109d3565b61083b675d10604969f00bcf60c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016108959190610edd565b6000604051808303818588803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505050565b6108d16109d6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610937906113ec565b60405180910390fd5b61094981610a54565b50565b606060006109646791cf27427781cd8860c01b6109d3565b610978676434b0ee41880ab260c01b6109d3565b61098c67f2c91afe86e9062d60c01b6109d3565b610994610b18565b6109a86723ccedb6dfbcc30860c01b6109d3565b6109bc67287492035946b96c60c01b6109d3565b6109c7858585610c97565b91509150935093915050565b50565b6109de610d58565b73ffffffffffffffffffffffffffffffffffffffff166109fc61046f565b73ffffffffffffffffffffffffffffffffffffffff1614610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990611458565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b2c6793fe0ed3ca04f82b60c01b6109d3565b610b40678abd782107e62dce60c01b6109d3565b610b5467b9c2ce2852bf0cf360c01b6109d3565b610b6867f8314810c2ffd6e460c01b6109d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed906114c4565b60405180910390fd5b610c0a677eb1fed1a5060b5e60c01b6109d3565b565b610c2067fadd006a881f054660c01b6109d3565b610c3467d9873e623a945ead60c01b6109d3565b610c4867b1300829c5ca164560c01b6109d3565b610c5c67b80ccfd3afb0094c60c01b6109d3565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90611530565b60405180910390fd5b60606000610caf6762f9c366a31858ba60c01b610d60565b610cc367bd378096f110ce5c60c01b610d60565b610cd7679e37ab49dcd436c660c01b610d60565b610ceb67bc4b909bf563a64060c01b610d60565b61303983148015610d0c5750610d0b678d644220341def6460c01b610d63565b5b80610d275750610d26677188393ea8a476ba60c01b610d6e565b5b610d32576000610d35565b60015b60405180602001604052806000815250908060ff16905091509150935093915050565b600033905090565b50565b600060019050919050565b6000919050565b600080fd5b600080fd5b600063ffffffff82169050919050565b610d9881610d7f565b8114610da357600080fd5b50565b600081359050610db581610d8f565b92915050565b600060208284031215610dd157610dd0610d75565b5b6000610ddf84828501610da6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e1382610de8565b9050919050565b610e2381610e08565b8114610e2e57600080fd5b50565b600081359050610e4081610e1a565b92915050565b6000819050919050565b610e5981610e46565b8114610e6457600080fd5b50565b600081359050610e7681610e50565b92915050565b60008060408385031215610e9357610e92610d75565b5b6000610ea185828601610e31565b9250506020610eb285828601610e67565b9150509250929050565b6000610ec782610de8565b9050919050565b610ed781610ebc565b82525050565b6000602082019050610ef26000830184610ece565b92915050565b60038110610f0557600080fd5b50565b600081359050610f1781610ef8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610f4257610f41610f1d565b5b8235905067ffffffffffffffff811115610f5f57610f5e610f22565b5b602083019150836001820283011115610f7b57610f7a610f27565b5b9250929050565b60008060008060608587031215610f9c57610f9b610d75565b5b6000610faa87828801610f08565b945050602085013567ffffffffffffffff811115610fcb57610fca610d7a565b5b610fd787828801610f2c565b93509350506040610fea87828801610e67565b91505092959194509250565b6000819050919050565b600061101b61101661101184610de8565b610ff6565b610de8565b9050919050565b600061102d82611000565b9050919050565b600061103f82611022565b9050919050565b61104f81611034565b82525050565b600060208201905061106a6000830184611046565b92915050565b60006020828403121561108657611085610d75565b5b600061109484828501610e31565b91505092915050565b6110a681610e46565b82525050565b60006020820190506110c1600083018461109d565b92915050565b6110d081610ebc565b81146110db57600080fd5b50565b6000813590506110ed816110c7565b92915050565b60006020828403121561110957611108610d75565b5b6000611117848285016110de565b91505092915050565b600080fd5b6000610160828403121561113c5761113b611120565b5b81905092915050565b6000819050919050565b61115881611145565b811461116357600080fd5b50565b6000813590506111758161114f565b92915050565b60008060006060848603121561119457611193610d75565b5b600084013567ffffffffffffffff8111156111b2576111b1610d7a565b5b6111be86828701611125565b93505060206111cf86828701611166565b92505060406111e086828701610e67565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015611224578082015181840152602081019050611209565b60008484015250505050565b6000601f19601f8301169050919050565b600061124c826111ea565b61125681856111f5565b9350611266818560208601611206565b61126f81611230565b840191505092915050565b600060408201905081810360008301526112948185611241565b90506112a3602083018461109d565b9392505050565b6112b381610d7f565b82525050565b60006020820190506112ce60008301846112aa565b92915050565b6112dd81610e08565b82525050565b60006040820190506112f860008301856112d4565b611305602083018461109d565b9392505050565b600060208201905061132160008301846112d4565b92915050565b60008151905061133681610e50565b92915050565b60006020828403121561135257611351610d75565b5b600061136084828501611327565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006113d6602683611369565b91506113e18261137a565b604082019050919050565b60006020820190508181036000830152611405816113c9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611442602083611369565b915061144d8261140c565b602082019050919050565b6000602082019050818103600083015261147181611435565b9050919050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b60006114ae601583611369565b91506114b982611478565b602082019050919050565b600060208201905081810360008301526114dd816114a1565b9050919050565b7f6d757374206f7665727269646500000000000000000000000000000000000000600082015250565b600061151a600d83611369565b9150611525826114e4565b602082019050919050565b600060208201905081810360008301526115498161150d565b905091905056fea2646970667358221220dd1bf70bad39f1119425e8e62f5902d0b2eb181aba24abcb4787650daab10ef764736f6c63430008110033"; type TestPaymasterAcceptAllConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts index 063cb50d..b2713fb1 100644 --- a/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts @@ -129,7 +129,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052604051610435380380610435833981810160405281019061002591906100e0565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061010d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009b82610070565b9050919050565b60006100ad82610090565b9050919050565b6100bd816100a2565b81146100c857600080fd5b50565b6000815190506100da816100b4565b92915050565b6000602082840312156100f6576100f561006b565b5b6000610104848285016100cb565b91505092915050565b6103198061011c6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633a871cdd1461003b578063be76c6ef1461006b575b600080fd5b610055600480360381019061005091906101c1565b610087565b604051610062919061023f565b60405180910390f35b6100856004803603810190610080919061025a565b610121565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b81526004016100e491906102c8565b6000604051808303818588803b1580156100fd57600080fd5b505af1158015610111573d6000803e3d6000fd5b5050505050600090509392505050565b806000fd5b600080fd5b600080fd5b600080fd5b6000610160828403121561014c5761014b610130565b5b81905092915050565b6000819050919050565b61016881610155565b811461017357600080fd5b50565b6000813590506101858161015f565b92915050565b6000819050919050565b61019e8161018b565b81146101a957600080fd5b50565b6000813590506101bb81610195565b92915050565b6000806000606084860312156101da576101d9610126565b5b600084013567ffffffffffffffff8111156101f8576101f761012b565b5b61020486828701610135565b935050602061021586828701610176565b9250506040610226868287016101ac565b9150509250925092565b6102398161018b565b82525050565b60006020820190506102546000830184610230565b92915050565b6000602082840312156102705761026f610126565b5b600061027e848285016101ac565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102b282610287565b9050919050565b6102c2816102a7565b82525050565b60006020820190506102dd60008301846102b9565b9291505056fea2646970667358221220a7812233e7712b8823d42af00ebc96b190dfb22476fb7c675dfb29743b82e9b664736f6c634300080c0033"; + "0x60806040526040516104fa3803806104fa83398181016040528101906100259190610117565b61003f675cec91549a6b597060c01b61009f60201b60201c565b61005967bae9d58e74dddcfe60c01b61009f60201b60201c565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610144565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d2826100a7565b9050919050565b60006100e4826100c7565b9050919050565b6100f4816100d9565b81146100ff57600080fd5b50565b600081519050610111816100eb565b92915050565b60006020828403121561012d5761012c6100a2565b5b600061013b84828501610102565b91505092915050565b6103a7806101536000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80633a871cdd1461003b578063be76c6ef1461006b575b600080fd5b6100556004803603810190610050919061024f565b610087565b60405161006291906102cd565b60405180910390f35b610085600480360381019061008091906102e8565b610184565b005b600061009d673851f64be78f9e2d60c01b6101b1565b6100b167f748b386d7a0187860c01b6101b1565b6100c567d3974bff61c4f11160c01b6101b1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b815260040161011f9190610356565b6000604051808303818588803b15801561013857600080fd5b505af115801561014c573d6000803e3d6000fd5b5050505050610165671be7fc294f27f3fa60c01b6101b1565b61017967d870af7837647c7b60c01b6101b1565b600090509392505050565b610198677692a2a53530b4af60c01b6101b1565b6101ac67c1d35d2ce47b200460c01b6101b1565b806000fd5b50565b600080fd5b600080fd5b600080fd5b600061016082840312156101da576101d96101be565b5b81905092915050565b6000819050919050565b6101f6816101e3565b811461020157600080fd5b50565b600081359050610213816101ed565b92915050565b6000819050919050565b61022c81610219565b811461023757600080fd5b50565b60008135905061024981610223565b92915050565b600080600060608486031215610268576102676101b4565b5b600084013567ffffffffffffffff811115610286576102856101b9565b5b610292868287016101c3565b93505060206102a386828701610204565b92505060406102b48682870161023a565b9150509250925092565b6102c781610219565b82525050565b60006020820190506102e260008301846102be565b92915050565b6000602082840312156102fe576102fd6101b4565b5b600061030c8482850161023a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061034082610315565b9050919050565b61035081610335565b82525050565b600060208201905061036b6000830184610347565b9291505056fea264697066735822122003ee97c26afc9e3e98db71598e46061eca1142f695e962568b746ce9a74f82a664736f6c63430008110033"; type TestRevertAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts b/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts index 31f522c3..bd3e87a4 100644 --- a/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts @@ -258,7 +258,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50610a2d806100206000396000f3fe60806040526004361061003f5760003560e01c8063275e2d7914610044578063451711591461008157806364c530cd1461009d578063e3563a4f146100da575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610381565b610103565b6040516100789190610467565b60405180910390f35b61009b60048036038101906100969190610535565b610187565b005b3480156100a957600080fd5b506100c460048036038101906100bf919061059a565b6101f7565b6040516100d19190610467565b60405180910390f35b3480156100e657600080fd5b5061010160048036038101906100fc9190610639565b610210565b005b60606000805b8484905081101561015d57848482818110610127576101266106ba565b5b905060200281019061013991906106ee565b60200135826101489190610750565b91508080610155906107a6565b915050610109565b508060405160200161016f91906107fe565b60405160208183030381529060405291505092915050565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016101c19190610828565b6000604051808303818588803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b50505050505050565b6060604051806020016040528060008152509050919050565b6000805b8585905081101561026e576000868683818110610234576102336106ba565b5b905060200281019061024691906106ee565b60200135905080836102589190610750565b9250508080610266906107a6565b915050610214565b50602083839050146102b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ac906108c6565b60405180910390fd5b600083838101906102c69190610912565b905081811461030a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610301906109d7565b60405180910390fd5b505050505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126103415761034061031c565b5b8235905067ffffffffffffffff81111561035e5761035d610321565b5b60208301915083602082028301111561037a57610379610326565b5b9250929050565b6000806020838503121561039857610397610312565b5b600083013567ffffffffffffffff8111156103b6576103b5610317565b5b6103c28582860161032b565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104085780820151818401526020810190506103ed565b83811115610417576000848401525b50505050565b6000601f19601f8301169050919050565b6000610439826103ce565b61044381856103d9565b93506104538185602086016103ea565b61045c8161041d565b840191505092915050565b60006020820190508181036000830152610481818461042e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104b482610489565b9050919050565b60006104c6826104a9565b9050919050565b6104d6816104bb565b81146104e157600080fd5b50565b6000813590506104f3816104cd565b92915050565b600063ffffffff82169050919050565b610512816104f9565b811461051d57600080fd5b50565b60008135905061052f81610509565b92915050565b6000806040838503121561054c5761054b610312565b5b600061055a858286016104e4565b925050602061056b85828601610520565b9150509250929050565b600080fd5b6000610160828403121561059157610590610575565b5b81905092915050565b6000602082840312156105b0576105af610312565b5b600082013567ffffffffffffffff8111156105ce576105cd610317565b5b6105da8482850161057a565b91505092915050565b60008083601f8401126105f9576105f861031c565b5b8235905067ffffffffffffffff81111561061657610615610321565b5b60208301915083600182028301111561063257610631610326565b5b9250929050565b6000806000806040858703121561065357610652610312565b5b600085013567ffffffffffffffff81111561067157610670610317565b5b61067d8782880161032b565b9450945050602085013567ffffffffffffffff8111156106a05761069f610317565b5b6106ac878288016105e3565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000823560016101600383360303811261070b5761070a6106e9565b5b80830191505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061075b82610717565b915061076683610717565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561079b5761079a610721565b5b828201905092915050565b60006107b182610717565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107e4576107e3610721565b5b600182019050919050565b6107f881610717565b82525050565b600060208201905061081360008301846107ef565b92915050565b610822816104f9565b82525050565b600060208201905061083d6000830184610819565b92915050565b600082825260208201905092915050565b7f546573745369676e617475726556616c696461746f723a20736967206d75737460008201527f2062652075696e74000000000000000000000000000000000000000000000000602082015250565b60006108b0602883610843565b91506108bb82610854565b604082019050919050565b600060208201905081810360008301526108df816108a3565b9050919050565b6108ef81610717565b81146108fa57600080fd5b50565b60008135905061090c816108e6565b92915050565b60006020828403121561092857610927610312565b5b6000610936848285016108fd565b91505092915050565b7f546573745369676e617475726556616c696461746f723a20616767726567617460008201527f6564207369676e6174757265206d69736d6174636820286e6f6e63652073756d60208201527f2900000000000000000000000000000000000000000000000000000000000000604082015250565b60006109c1604183610843565b91506109cc8261093f565b606082019050919050565b600060208201905081810360008301526109f0816109b4565b905091905056fea2646970667358221220ec7de9f4fec667886c78d9527944816e8837cec15685f62f8e5682f70e1aa0af64736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b50610c85806100206000396000f3fe60806040526004361061003f5760003560e01c8063275e2d7914610044578063451711591461008157806364c530cd1461009d578063e3563a4f146100da575b600080fd5b34801561005057600080fd5b5061006b60048036038101906100669190610605565b610103565b60405161007891906106e2565b60405180910390f35b61009b600480360381019061009691906107b0565b610228565b005b3480156100a957600080fd5b506100c460048036038101906100bf9190610815565b6102d4565b6040516100d191906106e2565b60405180910390f35b3480156100e657600080fd5b5061010160048036038101906100fc91906108b4565b610329565b005b606061011967ea87c80dffb6aea960c01b610593565b61012d6779cc957a9e79f7dd60c01b610593565b61014167b3621851c95bd34260c01b610593565b600061015767195ce410afc7726860c01b610593565b61016b67c5f6c0f873579eec60c01b610593565b60005b848490508110156101d65761018d679fd950c3cda4fc2560c01b610593565b8484828181106101a05761019f610935565b5b90506020028101906101b29190610969565b60200135826101c191906109cb565b915080806101ce906109ff565b91505061016e565b506101eb674157068717e038eb60c01b610593565b6101ff67b49552f933cc410d60c01b610593565b806040516020016102109190610a56565b60405160208183030381529060405291505092915050565b61023c6735e29c9a4942c87f60c01b610593565b61025067e0f36aa6147502bd60c01b610593565b61026467df5452928e4b5c4f60c01b610593565b8173ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b815260040161029e9190610a80565b6000604051808303818588803b1580156102b757600080fd5b505af11580156102cb573d6000803e3d6000fd5b50505050505050565b60606102ea676b7e2403b38f4a9060c01b610593565b6102fe67086916ae641d127460c01b610593565b610312675fb799e6af2fe82760c01b610593565b604051806020016040528060008152509050919050565b61033d673a2f1aeb688ca5b660c01b610593565b610350665a898f3b8f5c2c60c01b610593565b61036467e8c80b102b0fc16760c01b610593565b600061037a6744a0dc7c3bb11d4660c01b610593565b61038e67df511c6344ef819960c01b610593565b60005b85859050811015610427576103b0673de8c56c048a3b2a60c01b610593565b6103c467794283bf5b1c128260c01b610593565b60008686838181106103d9576103d8610935565b5b90506020028101906103eb9190610969565b602001359050610405670be56f7648b7911960c01b610593565b808361041191906109cb565b925050808061041f906109ff565b915050610391565b5061043c678f46bafe436f2d4d60c01b610593565b61045067e1486a051de9a24460c01b610593565b61046467ee4dc537fcc993cb60c01b610593565b602083839050146104aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a190610b1e565b60405180910390fd5b6104be67a9cbcf265aa6672760c01b610593565b6104d267cb3fa699c5cdadb760c01b610593565b6104e66741cb8946e71253f360c01b610593565b600083838101906104f79190610b6a565b905061050d671213265e4f49709d60c01b610593565b61052167151f07d8a4fbf22660c01b610593565b61053567e1caf2aea976b8c560c01b610593565b818114610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056e90610c2f565b60405180910390fd5b61058b67c472524774129b5860c01b610593565b505050505050565b50565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126105c5576105c46105a0565b5b8235905067ffffffffffffffff8111156105e2576105e16105a5565b5b6020830191508360208202830111156105fe576105fd6105aa565b5b9250929050565b6000806020838503121561061c5761061b610596565b5b600083013567ffffffffffffffff81111561063a5761063961059b565b5b610646858286016105af565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561068c578082015181840152602081019050610671565b60008484015250505050565b6000601f19601f8301169050919050565b60006106b482610652565b6106be818561065d565b93506106ce81856020860161066e565b6106d781610698565b840191505092915050565b600060208201905081810360008301526106fc81846106a9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061072f82610704565b9050919050565b600061074182610724565b9050919050565b61075181610736565b811461075c57600080fd5b50565b60008135905061076e81610748565b92915050565b600063ffffffff82169050919050565b61078d81610774565b811461079857600080fd5b50565b6000813590506107aa81610784565b92915050565b600080604083850312156107c7576107c6610596565b5b60006107d58582860161075f565b92505060206107e68582860161079b565b9150509250929050565b600080fd5b6000610160828403121561080c5761080b6107f0565b5b81905092915050565b60006020828403121561082b5761082a610596565b5b600082013567ffffffffffffffff8111156108495761084861059b565b5b610855848285016107f5565b91505092915050565b60008083601f840112610874576108736105a0565b5b8235905067ffffffffffffffff811115610891576108906105a5565b5b6020830191508360018202830111156108ad576108ac6105aa565b5b9250929050565b600080600080604085870312156108ce576108cd610596565b5b600085013567ffffffffffffffff8111156108ec576108eb61059b565b5b6108f8878288016105af565b9450945050602085013567ffffffffffffffff81111561091b5761091a61059b565b5b6109278782880161085e565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000823560016101600383360303811261098657610985610964565b5b80830191505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006109d682610992565b91506109e183610992565b92508282019050808211156109f9576109f861099c565b5b92915050565b6000610a0a82610992565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a3c57610a3b61099c565b5b600182019050919050565b610a5081610992565b82525050565b6000602082019050610a6b6000830184610a47565b92915050565b610a7a81610774565b82525050565b6000602082019050610a956000830184610a71565b92915050565b600082825260208201905092915050565b7f546573745369676e617475726556616c696461746f723a20736967206d75737460008201527f2062652075696e74000000000000000000000000000000000000000000000000602082015250565b6000610b08602883610a9b565b9150610b1382610aac565b604082019050919050565b60006020820190508181036000830152610b3781610afb565b9050919050565b610b4781610992565b8114610b5257600080fd5b50565b600081359050610b6481610b3e565b92915050565b600060208284031215610b8057610b7f610596565b5b6000610b8e84828501610b55565b91505092915050565b7f546573745369676e617475726556616c696461746f723a20616767726567617460008201527f6564207369676e6174757265206d69736d6174636820286e6f6e63652073756d60208201527f2900000000000000000000000000000000000000000000000000000000000000604082015250565b6000610c19604183610a9b565b9150610c2482610b97565b606082019050919050565b60006020820190508181036000830152610c4881610c0c565b905091905056fea26469706673582212206eaae1e6e2979d57a765a9f5157cf31e3e66a02d4472b28d1c27b4803a1e655a64736f6c63430008110033"; type TestSignatureAggregatorConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts b/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts index 01089b41..92dd418b 100644 --- a/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts @@ -306,7 +306,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b506040518060400160405280600381526020017f54535400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f54657374546f6b656e0000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620000b8565b508060049080519060200190620000af929190620000b8565b505050620001cd565b828054620000c69062000197565b90600052602060002090601f016020900481019282620000ea576000855562000136565b82601f106200010557805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013557825182559160200191906001019062000118565b5b50905062000145919062000149565b5090565b5b80821115620001645760008160009055506001016200014a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001b057607f821691505b60208210811415620001c757620001c662000168565b5b50919050565b61145780620001dd6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ca5565b60405180910390f35b6100f160048036038101906100ec9190610d60565b61032f565b6040516100fe9190610dbb565b60405180910390f35b61010f610352565b60405161011c9190610de5565b60405180910390f35b61013f600480360381019061013a9190610e00565b61035c565b60405161014c9190610dbb565b60405180910390f35b61015d61038b565b60405161016a9190610e6f565b60405180910390f35b61018d60048036038101906101889190610d60565b610394565b60405161019a9190610dbb565b60405180910390f35b6101bd60048036038101906101b89190610d60565b6103cb565b005b6101d960048036038101906101d49190610e8a565b6103d9565b6040516101e69190610de5565b60405180910390f35b6101f7610421565b6040516102049190610ca5565b60405180910390f35b61022760048036038101906102229190610d60565b6104b3565b6040516102349190610dbb565b60405180910390f35b61025760048036038101906102529190610d60565b61052a565b6040516102649190610dbb565b60405180910390f35b61028760048036038101906102829190610eb7565b61054d565b6040516102949190610de5565b60405180910390f35b6060600380546102ac90610f26565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f26565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190610f87565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090610f26565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610f26565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105089061104f565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610643906110e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390611173565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610de5565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610816906111df565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90611271565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90611303565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90611395565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610de5565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290611401565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190610f87565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610de5565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c46578082015181840152602081019050610c2b565b83811115610c55576000848401525b50505050565b6000601f19601f8301169050919050565b6000610c7782610c0c565b610c818185610c17565b9350610c91818560208601610c28565b610c9a81610c5b565b840191505092915050565b60006020820190508181036000830152610cbf8184610c6c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610cf782610ccc565b9050919050565b610d0781610cec565b8114610d1257600080fd5b50565b600081359050610d2481610cfe565b92915050565b6000819050919050565b610d3d81610d2a565b8114610d4857600080fd5b50565b600081359050610d5a81610d34565b92915050565b60008060408385031215610d7757610d76610cc7565b5b6000610d8585828601610d15565b9250506020610d9685828601610d4b565b9150509250929050565b60008115159050919050565b610db581610da0565b82525050565b6000602082019050610dd06000830184610dac565b92915050565b610ddf81610d2a565b82525050565b6000602082019050610dfa6000830184610dd6565b92915050565b600080600060608486031215610e1957610e18610cc7565b5b6000610e2786828701610d15565b9350506020610e3886828701610d15565b9250506040610e4986828701610d4b565b9150509250925092565b600060ff82169050919050565b610e6981610e53565b82525050565b6000602082019050610e846000830184610e60565b92915050565b600060208284031215610ea057610e9f610cc7565b5b6000610eae84828501610d15565b91505092915050565b60008060408385031215610ece57610ecd610cc7565b5b6000610edc85828601610d15565b9250506020610eed85828601610d15565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f3e57607f821691505b60208210811415610f5257610f51610ef7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f9282610d2a565b9150610f9d83610d2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610fd257610fd1610f58565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611039602583610c17565b915061104482610fdd565b604082019050919050565b600060208201905081810360008301526110688161102c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110cb602483610c17565b91506110d68261106f565b604082019050919050565b600060208201905081810360008301526110fa816110be565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061115d602283610c17565b915061116882611101565b604082019050919050565b6000602082019050818103600083015261118c81611150565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111c9601d83610c17565b91506111d482611193565b602082019050919050565b600060208201905081810360008301526111f8816111bc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061125b602583610c17565b9150611266826111ff565b604082019050919050565b6000602082019050818103600083015261128a8161124e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112ed602383610c17565b91506112f882611291565b604082019050919050565b6000602082019050818103600083015261131c816112e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061137f602683610c17565b915061138a82611323565b604082019050919050565b600060208201905081810360008301526113ae81611372565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113eb601f83610c17565b91506113f6826113b5565b602082019050919050565b6000602082019050818103600083015261141a816113de565b905091905056fea26469706673582212205e134dc3badf463984c641af8942d8acaa07ae26c77ad2ffede95b26e07eaa8a64736f6c634300080c0033"; + "0x60806040523480156200001157600080fd5b506040518060400160405280600381526020017f54535400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f54657374546f6b656e000000000000000000000000000000000000000000000081525081600390816200008f919062000343565b508060049081620000a1919062000343565b505050620000c06724807f9d19c7728f60c01b620000c660201b60201c565b6200042a565b50565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200014b57607f821691505b60208210810362000161576200016062000103565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200018c565b620001d786836200018c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002246200021e6200021884620001ef565b620001f9565b620001ef565b9050919050565b6000819050919050565b620002408362000203565b620002586200024f826200022b565b84845462000199565b825550505050565b600090565b6200026f62000260565b6200027c81848462000235565b505050565b5b81811015620002a4576200029860008262000265565b60018101905062000282565b5050565b601f821115620002f357620002bd8162000167565b620002c8846200017c565b81016020851015620002d8578190505b620002f0620002e7856200017c565b83018262000281565b50505b505050565b600082821c905092915050565b60006200031860001984600802620002f8565b1980831691505092915050565b600062000333838362000305565b9150826002028217905092915050565b6200034e82620000c9565b67ffffffffffffffff8111156200036a5762000369620000d4565b5b62000376825462000132565b62000383828285620002a8565b600060209050601f831160018114620003bb5760008415620003a6578287015190505b620003b2858262000325565b86555062000422565b601f198416620003cb8662000167565b60005b82811015620003f557848901518255600182019150602085019450602081019050620003ce565b8683101562000415578489015162000411601f89168262000305565b8355505b6001600288020188555050505b505050505050565b611465806200043a6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610cd6565b60405180910390f35b6100f160048036038101906100ec9190610d91565b61032f565b6040516100fe9190610dec565b60405180910390f35b61010f610352565b60405161011c9190610e16565b60405180910390f35b61013f600480360381019061013a9190610e31565b61035c565b60405161014c9190610dec565b60405180910390f35b61015d61038b565b60405161016a9190610ea0565b60405180910390f35b61018d60048036038101906101889190610d91565b610394565b60405161019a9190610dec565b60405180910390f35b6101bd60048036038101906101b89190610d91565b6103cb565b005b6101d960048036038101906101d49190610ebb565b610415565b6040516101e69190610e16565b60405180910390f35b6101f761045d565b6040516102049190610cd6565b60405180910390f35b61022760048036038101906102229190610d91565b6104ef565b6040516102349190610dec565b60405180910390f35b61025760048036038101906102529190610d91565b610566565b6040516102649190610dec565b60405180910390f35b61028760048036038101906102829190610ee8565b610589565b6040516102949190610e16565b60405180910390f35b6060600380546102ac90610f57565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f57565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a610610565b9050610347818585610618565b600191505092915050565b6000600254905090565b600080610367610610565b90506103748582856107e1565b61037f85858561086d565b60019150509392505050565b60006012905090565b60008061039f610610565b90506103c08185856103b18589610589565b6103bb9190610fb7565b610618565b600191505092915050565b6103df6754a67aa3695366de60c01b610ae3565b6103f36792c84b865d312a3460c01b610ae3565b61040767b4011bc8ed48713e60c01b610ae3565b6104118282610ae6565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461046c90610f57565b80601f016020809104026020016040519081016040528092919081815260200182805461049890610f57565b80156104e55780601f106104ba576101008083540402835291602001916104e5565b820191906000526020600020905b8154815290600101906020018083116104c857829003601f168201915b5050505050905090565b6000806104fa610610565b905060006105088286610589565b90508381101561054d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105449061105d565b60405180910390fd5b61055a8286868403610618565b60019250505092915050565b600080610571610610565b905061057e81858561086d565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067e906110ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed90611181565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107d49190610e16565b60405180910390a3505050565b60006107ed8484610589565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108675781811015610859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610850906111ed565b60405180910390fd5b6108668484848403610618565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d39061127f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290611311565b60405180910390fd5b610956838383610c3c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d3906113a3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610aca9190610e16565b60405180910390a3610add848484610c41565b50505050565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061140f565b60405180910390fd5b610b6160008383610c3c565b8060026000828254610b739190610fb7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c249190610e16565b60405180910390a3610c3860008383610c41565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c80578082015181840152602081019050610c65565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ca882610c46565b610cb28185610c51565b9350610cc2818560208601610c62565b610ccb81610c8c565b840191505092915050565b60006020820190508181036000830152610cf08184610c9d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d2882610cfd565b9050919050565b610d3881610d1d565b8114610d4357600080fd5b50565b600081359050610d5581610d2f565b92915050565b6000819050919050565b610d6e81610d5b565b8114610d7957600080fd5b50565b600081359050610d8b81610d65565b92915050565b60008060408385031215610da857610da7610cf8565b5b6000610db685828601610d46565b9250506020610dc785828601610d7c565b9150509250929050565b60008115159050919050565b610de681610dd1565b82525050565b6000602082019050610e016000830184610ddd565b92915050565b610e1081610d5b565b82525050565b6000602082019050610e2b6000830184610e07565b92915050565b600080600060608486031215610e4a57610e49610cf8565b5b6000610e5886828701610d46565b9350506020610e6986828701610d46565b9250506040610e7a86828701610d7c565b9150509250925092565b600060ff82169050919050565b610e9a81610e84565b82525050565b6000602082019050610eb56000830184610e91565b92915050565b600060208284031215610ed157610ed0610cf8565b5b6000610edf84828501610d46565b91505092915050565b60008060408385031215610eff57610efe610cf8565b5b6000610f0d85828601610d46565b9250506020610f1e85828601610d46565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f6f57607f821691505b602082108103610f8257610f81610f28565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fc282610d5b565b9150610fcd83610d5b565b9250828201905080821115610fe557610fe4610f88565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611047602583610c51565b915061105282610feb565b604082019050919050565b600060208201905081810360008301526110768161103a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006110d9602483610c51565b91506110e48261107d565b604082019050919050565b60006020820190508181036000830152611108816110cc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061116b602283610c51565b91506111768261110f565b604082019050919050565b6000602082019050818103600083015261119a8161115e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006111d7601d83610c51565b91506111e2826111a1565b602082019050919050565b60006020820190508181036000830152611206816111ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611269602583610c51565b91506112748261120d565b604082019050919050565b600060208201905081810360008301526112988161125c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006112fb602383610c51565b91506113068261129f565b604082019050919050565b6000602082019050818103600083015261132a816112ee565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061138d602683610c51565b915061139882611331565b604082019050919050565b600060208201905081810360008301526113bc81611380565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006113f9601f83610c51565b9150611404826113c3565b602082019050919050565b60006020820190508181036000830152611428816113ec565b905091905056fea2646970667358221220726e758fc0452eeee2674070bdf137603dc9b9cb021855157a56d4181d765c1764736f6c63430008110033"; type TestTokenConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts b/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts index 5f6b3824..8c518205 100644 --- a/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts @@ -89,7 +89,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b5061028f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a24dea414610030575b600080fd5b61004a600480360381019061004591906100e3565b610060565b60405161005791906101c5565b60405180910390f35b606061006b82610072565b9050919050565b60603660008380610140019061008891906101f6565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b600080fd5b600080fd5b600080fd5b600061016082840312156100da576100d96100be565b5b81905092915050565b6000602082840312156100f9576100f86100b4565b5b600082013567ffffffffffffffff811115610117576101166100b9565b5b610123848285016100c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561016657808201518184015260208101905061014b565b83811115610175576000848401525b50505050565b6000601f19601f8301169050919050565b60006101978261012c565b6101a18185610137565b93506101b1818560208601610148565b6101ba8161017b565b840191505092915050565b600060208201905081810360008301526101df818461018c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112610213576102126101e7565b5b80840192508235915067ffffffffffffffff821115610235576102346101ec565b5b602083019250600182023603831315610251576102506101f1565b5b50925092905056fea26469706673582212208b24beb83d15a14f11c70d5738f6d3dc9fe457722187988aab255e5df02fc39164736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b50610318806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a24dea414610030575b600080fd5b61004a60048036038101906100459190610175565b610060565b604051610057919061024e565b60405180910390f35b606061007667e5a92ca07783c4ae60c01b6100ae565b61008a6714b78b122a242c4560c01b6100ae565b61009e673b52136f56973b3060c01b6100ae565b6100a7826100b1565b9050919050565b50565b60606100c7670dec2dbb958a50d860c01b610143565b6100db67f7ebcbf78dfbd2e760c01b610143565b6100ef67cf9d9e801922f74560c01b610143565b36600083806101400190610103919061027f565b9150915061011b670c9fe5e21e8be86a60c01b610143565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b50565b600080fd5b600080fd5b600080fd5b6000610160828403121561016c5761016b610150565b5b81905092915050565b60006020828403121561018b5761018a610146565b5b600082013567ffffffffffffffff8111156101a9576101a861014b565b5b6101b584828501610155565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156101f85780820151818401526020810190506101dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000610220826101be565b61022a81856101c9565b935061023a8185602086016101da565b61024381610204565b840191505092915050565b600060208201905081810360008301526102688184610215565b905092915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261029c5761029b610270565b5b80840192508235915067ffffffffffffffff8211156102be576102bd610275565b5b6020830192506001820236038313156102da576102d961027a565b5b50925092905056fea2646970667358221220da5364a0a7b8da3ef9f0ae6f549590797ca6c4663a3969b86e0902e6aace3f1864736f6c63430008110033"; type TestUtilConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts b/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts index bfcdffea..c42d32f1 100644 --- a/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts +++ b/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts @@ -161,7 +161,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052600180556040516107dd3803806107dd833981810160405281019061002991906100e4565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610111565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061009f82610074565b9050919050565b60006100b182610094565b9050919050565b6100c1816100a6565b81146100cc57600080fd5b50565b6000815190506100de816100b8565b92915050565b6000602082840312156100fa576100f961006f565b5b6000610108848285016100cf565b91505092915050565b6106bd806101206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633a871cdd14610051578063c19d93fb14610081578063f115d40d1461009f578063fb0c2425146100cf575b600080fd5b61006b6004803603810190610066919061039d565b6100ed565b604051610078919061041b565b60405180910390f35b6100896102d1565b604051610096919061041b565b60405180910390f35b6100b960048036038101906100b49190610494565b6102d7565b6040516100c6919061041b565b60405180910390f35b6100d76102f8565b6040516100e4919061041b565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b815260040161014a91906104d0565b6000604051808303818588803b15801561016357600080fd5b505af1158015610177573d6000803e3d6000fd5b5050505050600184602001351415610202573073ffffffffffffffffffffffffffffffffffffffff1663fb0c24256103e86040518263ffffffff1660e01b81526004016020604051808303818786fa1580156101d7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101fc9190610500565b506102c6565b6002846020013514156102c557600084806101200190610222919061053c565b600090601492610234939291906105a9565b9061023f9190610628565b60601c90503073ffffffffffffffffffffffffffffffffffffffff1663f115d40d6103e8836040518363ffffffff1660e01b815260040161028091906104d0565b6020604051808303818786fa15801561029d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906102c29190610500565b50505b5b600090509392505050565b60015481565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050919050565b6000600154905090565b600080fd5b600080fd5b600080fd5b600061016082840312156103285761032761030c565b5b81905092915050565b6000819050919050565b61034481610331565b811461034f57600080fd5b50565b6000813590506103618161033b565b92915050565b6000819050919050565b61037a81610367565b811461038557600080fd5b50565b60008135905061039781610371565b92915050565b6000806000606084860312156103b6576103b5610302565b5b600084013567ffffffffffffffff8111156103d4576103d3610307565b5b6103e086828701610311565b93505060206103f186828701610352565b925050604061040286828701610388565b9150509250925092565b61041581610367565b82525050565b6000602082019050610430600083018461040c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046182610436565b9050919050565b61047181610456565b811461047c57600080fd5b50565b60008135905061048e81610468565b92915050565b6000602082840312156104aa576104a9610302565b5b60006104b88482850161047f565b91505092915050565b6104ca81610456565b82525050565b60006020820190506104e560008301846104c1565b92915050565b6000815190506104fa81610371565b92915050565b60006020828403121561051657610515610302565b5b6000610524848285016104eb565b91505092915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126105595761055861052d565b5b80840192508235915067ffffffffffffffff82111561057b5761057a610532565b5b60208301925060018202360383131561059757610596610537565b5b509250929050565b600080fd5b600080fd5b600080858511156105bd576105bc61059f565b5b838611156105ce576105cd6105a4565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061063483836105e4565b8261063f81356105ef565b9250601482101561067f5761067a7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360140360080261061b565b831692505b50509291505056fea2646970667358221220bc7d07bd269580351529e0674f1a7f6311a0e5dfeaab02f50e2b5004d3ee754164736f6c634300080c0033"; + "0x6080604052600180556040516109f93803806109f98339818101604052810190610029919061011b565b61004367ce557241c3208ac160c01b6100a360201b60201c565b61005d6774a7987d0d18e4f460c01b6100a360201b60201c565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610148565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d6826100ab565b9050919050565b60006100e8826100cb565b9050919050565b6100f8816100dd565b811461010357600080fd5b50565b600081519050610115816100ef565b92915050565b600060208284031215610131576101306100a6565b5b600061013f84828501610106565b91505092915050565b6108a2806101576000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633a871cdd14610051578063c19d93fb14610081578063f115d40d1461009f578063fb0c2425146100cf575b600080fd5b61006b60048036038101906100669190610582565b6100ed565b6040516100789190610600565b60405180910390f35b61008961043b565b6040516100969190610600565b60405180910390f35b6100b960048036038101906100b49190610679565b610441565b6040516100c69190610600565b60405180910390f35b6100d761049e565b6040516100e49190610600565b60405180910390f35b600061010367b0420e44730e746960c01b6104e4565b61011767e73a68d90a85013960c01b6104e4565b61012b673423b2d1572f9ff460c01b6104e4565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b760faf983306040518363ffffffff1660e01b815260040161018591906106b5565b6000604051808303818588803b15801561019e57600080fd5b505af11580156101b2573d6000803e3d6000fd5b50505050506101cb676c5f1ec3388eb1cb60c01b6104e4565b6101df675397fc8c85ae939e60c01b6104e4565b60018460200135036102a0576101ff6774b9898c75e981ec60c01b6104e4565b61021367d86d9079dd16a37460c01b6104e4565b61022767355a44fc04ff2fa960c01b6104e4565b3073ffffffffffffffffffffffffffffffffffffffff1663fb0c24256103e86040518263ffffffff1660e01b81526004016020604051808303818786fa158015610275573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061029a91906106e5565b50610408565b6102b467a8beaa35bc23262660c01b6104e4565b6102c867cc5da71535a47c4e60c01b6104e4565b60028460200135036103f2576102e867233dd40ebe1141b760c01b6104e4565b6102fc671fde1a9c877c30c460c01b6104e4565b610310671a002510c5bb922260c01b6104e4565b6000848061012001906103239190610721565b6000906014926103359392919061078e565b90610340919061080d565b60601c9050610359674c9603e4925f0b6e60c01b6104e4565b61036d67596a6faa76e2824560c01b6104e4565b3073ffffffffffffffffffffffffffffffffffffffff1663f115d40d6103e8836040518363ffffffff1660e01b81526004016103a991906106b5565b6020604051808303818786fa1580156103c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906103eb91906106e5565b5050610407565b6104066723d1719263ba0f1a60c01b6104e4565b5b5b61041c6753925c7a960a950160c01b6104e4565b610430672938f9096db271c760c01b6104e4565b600090509392505050565b60015481565b600061045767e77cef1f0f256a7e60c01b6104e4565b61046b672fba17190bb50f1960c01b6104e4565b61047f67bbb186524d5f521260c01b6104e4565b8173ffffffffffffffffffffffffffffffffffffffff163b9050919050565b60006104b467e1a72f8544728a5160c01b6104e4565b6104c86719a9c454343815a560c01b6104e4565b6104dc6796322ea35c87008760c01b6104e4565b600154905090565b50565b600080fd5b600080fd5b600080fd5b6000610160828403121561050d5761050c6104f1565b5b81905092915050565b6000819050919050565b61052981610516565b811461053457600080fd5b50565b60008135905061054681610520565b92915050565b6000819050919050565b61055f8161054c565b811461056a57600080fd5b50565b60008135905061057c81610556565b92915050565b60008060006060848603121561059b5761059a6104e7565b5b600084013567ffffffffffffffff8111156105b9576105b86104ec565b5b6105c5868287016104f6565b93505060206105d686828701610537565b92505060406105e78682870161056d565b9150509250925092565b6105fa8161054c565b82525050565b600060208201905061061560008301846105f1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106468261061b565b9050919050565b6106568161063b565b811461066157600080fd5b50565b6000813590506106738161064d565b92915050565b60006020828403121561068f5761068e6104e7565b5b600061069d84828501610664565b91505092915050565b6106af8161063b565b82525050565b60006020820190506106ca60008301846106a6565b92915050565b6000815190506106df81610556565b92915050565b6000602082840312156106fb576106fa6104e7565b5b6000610709848285016106d0565b91505092915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261073e5761073d610712565b5b80840192508235915067ffffffffffffffff8211156107605761075f610717565b5b60208301925060018202360383131561077c5761077b61071c565b5b509250929050565b600080fd5b600080fd5b600080858511156107a2576107a1610784565b5b838611156107b3576107b2610789565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b600061081983836107c9565b8261082481356107d4565b925060148210156108645761085f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802610800565b831692505b50509291505056fea26469706673582212203cd7646de378cc8383ba88de526f90016327cecfdf3b82f0840e0403a73978fb64736f6c63430008110033"; type TestWarmColdAccountConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/access/Guarded__factory.ts b/src/contracts/factories/src/access/Guarded__factory.ts new file mode 100644 index 00000000..b791250c --- /dev/null +++ b/src/contracts/factories/src/access/Guarded__factory.ts @@ -0,0 +1,105 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { Guarded, GuardedInterface } from "../../../src/access/Guarded"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "newGuardian", + type: "address", + }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "removedGuardian", + type: "address", + }, + ], + name: "GuardianRemoved", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506101f0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80630c68ba2114610030575b600080fd5b61004a60048036038101906100459190610157565b610060565b604051610057919061019f565b60405180910390f35b6000610076679a530c869daa649060c01b6100f1565b61008a677819779a5121f4ad60c01b6100f1565b61009e67dcc814792f5595a060c01b6100f1565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610124826100f9565b9050919050565b61013481610119565b811461013f57600080fd5b50565b6000813590506101518161012b565b92915050565b60006020828403121561016d5761016c6100f4565b5b600061017b84828501610142565b91505092915050565b60008115159050919050565b61019981610184565b82525050565b60006020820190506101b46000830184610190565b9291505056fea264697066735822122045926103c1b4c7672ef56c8b4a8127d3ed171c43a919ff7d58ba2f025ede5ce764736f6c63430008110033"; + +type GuardedConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: GuardedConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Guarded__factory extends ContractFactory { + constructor(...args: GuardedConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): Guarded { + return super.attach(address) as Guarded; + } + override connect(signer: Signer): Guarded__factory { + return super.connect(signer) as Guarded__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): GuardedInterface { + return new utils.Interface(_abi) as GuardedInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Guarded { + return new Contract(address, _abi, signerOrProvider) as Guarded; + } +} diff --git a/src/contracts/factories/src/access/Owned__factory.ts b/src/contracts/factories/src/access/Owned__factory.ts new file mode 100644 index 00000000..4c87de2c --- /dev/null +++ b/src/contracts/factories/src/access/Owned__factory.ts @@ -0,0 +1,102 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { Owned, OwnedInterface } from "../../../src/access/Owned"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "removedOwner", + type: "address", + }, + ], + name: "OwnerRemoved", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506101f0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632f54bf6e14610030575b600080fd5b61004a60048036038101906100459190610157565b610060565b604051610057919061019f565b60405180910390f35b60006100766784c34e023fb786f860c01b6100f1565b61008a670d806432bac21d3b60c01b6100f1565b61009e679da5a6f8cf654dc360c01b6100f1565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610124826100f9565b9050919050565b61013481610119565b811461013f57600080fd5b50565b6000813590506101518161012b565b92915050565b60006020828403121561016d5761016c6100f4565b5b600061017b84828501610142565b91505092915050565b60008115159050919050565b61019981610184565b82525050565b60006020820190506101b46000830184610190565b9291505056fea2646970667358221220a72c37ab034de35d10fef38be9cb668671002397c86859815599a189df0f1f5564736f6c63430008110033"; + +type OwnedConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: OwnedConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Owned__factory extends ContractFactory { + constructor(...args: OwnedConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): Owned { + return super.attach(address) as Owned; + } + override connect(signer: Signer): Owned__factory { + return super.connect(signer) as Owned__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): OwnedInterface { + return new utils.Interface(_abi) as OwnedInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): Owned { + return new Contract(address, _abi, signerOrProvider) as Owned; + } +} diff --git a/src/contracts/factories/src/access/index.ts b/src/contracts/factories/src/access/index.ts new file mode 100644 index 00000000..9c9d833b --- /dev/null +++ b/src/contracts/factories/src/access/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { Guarded__factory } from "./Guarded__factory"; +export { Owned__factory } from "./Owned__factory"; diff --git a/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts deleted file mode 100644 index 5b3cb78b..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/AccountController__factory.ts +++ /dev/null @@ -1,195 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - AccountController, - AccountControllerInterface, -} from "../../../src/backward_compatibility_helpers/AccountController"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountDeployed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountImplementationUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "accountRegistry", - type: "address", - }, - ], - name: "AccountRegistryUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "response", - type: "bytes", - }, - ], - name: "AccountTransactionExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountUpgraded", - type: "event", - }, - { - inputs: [], - name: "accountImplementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "accountRegistry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806311464fbe1461003b578063d089e11a14610059575b600080fd5b610043610077565b6040516100509190610102565b60405180910390f35b61006161009d565b60405161006e9190610102565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ec826100c1565b9050919050565b6100fc816100e1565b82525050565b600060208201905061011760008301846100f3565b9291505056fea2646970667358221220082f23179c11d0572a28a3dde905421b1f50f8677b330066c3210e56c0f74efe64736f6c634300080c0033"; - -type AccountControllerConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AccountControllerConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AccountController__factory extends ContractFactory { - constructor(...args: AccountControllerConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AccountController { - return super.attach(address) as AccountController; - } - override connect(signer: Signer): AccountController__factory { - return super.connect(signer) as AccountController__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AccountControllerInterface { - return new utils.Interface(_abi) as AccountControllerInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AccountController { - return new Contract(address, _abi, signerOrProvider) as AccountController; - } -} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts deleted file mode 100644 index 1cbf2b7c..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/AccountRegistryMock__factory.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - AccountRegistryMock, - AccountRegistryMockInterface, -} from "../../../src/backward_compatibility_helpers/AccountRegistryMock"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "messageHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address[]", - name: "owners", - type: "address[]", - }, - ], - name: "mockAccountOwners", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610e75806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063124e9eb314610046578063cbc438bf14610076578063e1e382ce14610092575b600080fd5b610060600480360381019061005b919061072f565b6100c2565b60405161006d91906107df565b60405180910390f35b610090600480360381019061008b9190610949565b6101ff565b005b6100ac60048036038101906100a791906109db565b6102d7565b6040516100b991906107df565b60405180910390f35b60008061016884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061015a88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506103c7565b61042190919063ffffffff16565b90506000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505095945050505050565b60008151905060005b818110156102d15760016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085848151811061026557610264610a4f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806102c990610ab7565b915050610208565b50505050565b60008061033184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508661042190919063ffffffff16565b90506000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050949350505050565b60006103d382516104e5565b826040516020016103e49190610b7a565b604051602081830303815290604052604051602001610404929190610c24565b604051602081830303815290604052805190602001209050919050565b600080600090506041835114156104db5760008060006020860151925060408601519150606086015160001a9050601b8160ff16101561046b57601b816104689190610c60565b90505b601b8160ff1614806104805750601c8160ff16145b156104d757600187828585604051600081526020016040526040516104a89493929190610cb5565b6020604051602081039080840390855afa1580156104ca573d6000803e3d6000fd5b5050506020604051035193505b5050505b8091505092915050565b6060600082141561052d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610653565b600082905060005b6000821461055f57808061054890610ab7565b915050600a826105589190610d29565b9150610535565b60008167ffffffffffffffff81111561057b5761057a61080b565b5b6040519080825280601f01601f1916602001820160405280156105ad5781602001600182028036833780820191505090505b50905060006001836105bf9190610d5a565b90508593505b6000841461064b57600a846105da9190610d8e565b60306105e69190610dbf565b60f81b8282806105f590610e15565b93508151811061060857610607610a4f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a846106449190610d29565b93506105c5565b819450505050505b919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106978261066c565b9050919050565b6106a78161068c565b81146106b257600080fd5b50565b6000813590506106c48161069e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060006060868803121561074b5761074a610662565b5b6000610759888289016106b5565b955050602086013567ffffffffffffffff81111561077a57610779610667565b5b610786888289016106d9565b9450945050604086013567ffffffffffffffff8111156107a9576107a8610667565b5b6107b5888289016106d9565b92509250509295509295909350565b60008115159050919050565b6107d9816107c4565b82525050565b60006020820190506107f460008301846107d0565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610843826107fa565b810181811067ffffffffffffffff821117156108625761086161080b565b5b80604052505050565b6000610875610658565b9050610881828261083a565b919050565b600067ffffffffffffffff8211156108a1576108a061080b565b5b602082029050602081019050919050565b60006108c56108c084610886565b61086b565b905080838252602082019050602084028301858111156108e8576108e76106d4565b5b835b8181101561091157806108fd88826106b5565b8452602084019350506020810190506108ea565b5050509392505050565b600082601f8301126109305761092f6106ca565b5b81356109408482602086016108b2565b91505092915050565b600080604083850312156109605761095f610662565b5b600061096e858286016106b5565b925050602083013567ffffffffffffffff81111561098f5761098e610667565b5b61099b8582860161091b565b9150509250929050565b6000819050919050565b6109b8816109a5565b81146109c357600080fd5b50565b6000813590506109d5816109af565b92915050565b600080600080606085870312156109f5576109f4610662565b5b6000610a03878288016106b5565b9450506020610a14878288016109c6565b935050604085013567ffffffffffffffff811115610a3557610a34610667565b5b610a41878288016106d9565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610ac282610aad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610af557610af4610a7e565b5b600182019050919050565b600081519050919050565b600081905092915050565b60005b83811015610b34578082015181840152602081019050610b19565b83811115610b43576000848401525b50505050565b6000610b5482610b00565b610b5e8185610b0b565b9350610b6e818560208601610b16565b80840191505092915050565b6000610b868284610b49565b915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b6000610bd2601a83610b91565b9150610bdd82610b9c565b601a82019050919050565b600081519050919050565b6000610bfe82610be8565b610c088185610b91565b9350610c18818560208601610b16565b80840191505092915050565b6000610c2f82610bc5565b9150610c3b8285610bf3565b9150610c478284610b49565b91508190509392505050565b600060ff82169050919050565b6000610c6b82610c53565b9150610c7683610c53565b92508260ff03821115610c8c57610c8b610a7e565b5b828201905092915050565b610ca0816109a5565b82525050565b610caf81610c53565b82525050565b6000608082019050610cca6000830187610c97565b610cd76020830186610ca6565b610ce46040830185610c97565b610cf16060830184610c97565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610d3482610aad565b9150610d3f83610aad565b925082610d4f57610d4e610cfa565b5b828204905092915050565b6000610d6582610aad565b9150610d7083610aad565b925082821015610d8357610d82610a7e565b5b828203905092915050565b6000610d9982610aad565b9150610da483610aad565b925082610db457610db3610cfa565b5b828206905092915050565b6000610dca82610aad565b9150610dd583610aad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610e0a57610e09610a7e565b5b828201905092915050565b6000610e2082610aad565b91506000821415610e3457610e33610a7e565b5b60018203905091905056fea26469706673582212203ec6753d97a3dd90bd2080c115a00df338c8e229c6bb8064afd2b949333f2d3f64736f6c634300080c0033"; - -type AccountRegistryMockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AccountRegistryMockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AccountRegistryMock__factory extends ContractFactory { - constructor(...args: AccountRegistryMockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): AccountRegistryMock { - return super.attach(address) as AccountRegistryMock; - } - override connect(signer: Signer): AccountRegistryMock__factory { - return super.connect(signer) as AccountRegistryMock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AccountRegistryMockInterface { - return new utils.Interface(_abi) as AccountRegistryMockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AccountRegistryMock { - return new Contract(address, _abi, signerOrProvider) as AccountRegistryMock; - } -} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts deleted file mode 100644 index 64676f1c..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/Account__factory.ts +++ /dev/null @@ -1,167 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - Account, - AccountInterface, -} from "../../../src/backward_compatibility_helpers/Account"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "registry_", - type: "address", - }, - { - internalType: "address", - name: "implementation_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - stateMutability: "nonpayable", - type: "fallback", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "implementation_", - type: "address", - }, - ], - name: "setImplementation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516107c03803806107c08339818101604052810190610032919061011d565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ea826100bf565b9050919050565b6100fa816100df565b811461010557600080fd5b50565b600081519050610117816100f1565b92915050565b60008060408385031215610134576101336100ba565b5b600061014285828601610108565b925050602061015385828601610108565b9150509250929050565b6106548061016c6000396000f3fe6080604052600436106100435760003560e01c80633f579f42146100b25780635c60da1b146100ef5780637b1039991461011a578063d784d426146101455761004a565b3661004a57005b34801561005657600080fd5b50600080369050146100b05760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050368060008037600080826000855af43d806000803e81600081146100ab57816000f35b816000fd5b005b3480156100be57600080fd5b506100d960048036038101906100d491906103c3565b61016e565b6040516100e691906104d0565b60405180910390f35b3480156100fb57600080fd5b50610104610233565b6040516101119190610501565b60405180910390f35b34801561012657600080fd5b5061012f610257565b60405161013c9190610501565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061051c565b61027d565b005b60608060008673ffffffffffffffffffffffffffffffffffffffff1686868660405161019b929190610588565b60006040518083038185875af1925050503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b50809350819250505080610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021d906105fe565b60405180910390fd5b8192505050949350505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102f5826102ca565b9050919050565b610305816102ea565b811461031057600080fd5b50565b600081359050610322816102fc565b92915050565b6000819050919050565b61033b81610328565b811461034657600080fd5b50565b60008135905061035881610332565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103835761038261035e565b5b8235905067ffffffffffffffff8111156103a05761039f610363565b5b6020830191508360018202830111156103bc576103bb610368565b5b9250929050565b600080600080606085870312156103dd576103dc6102c0565b5b60006103eb87828801610313565b94505060206103fc87828801610349565b935050604085013567ffffffffffffffff81111561041d5761041c6102c5565b5b6104298782880161036d565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015610471578082015181840152602081019050610456565b83811115610480576000848401525b50505050565b6000601f19601f8301169050919050565b60006104a282610437565b6104ac8185610442565b93506104bc818560208601610453565b6104c581610486565b840191505092915050565b600060208201905081810360008301526104ea8184610497565b905092915050565b6104fb816102ea565b82525050565b600060208201905061051660008301846104f2565b92915050565b600060208284031215610532576105316102c0565b5b600061054084828501610313565b91505092915050565b600081905092915050565b82818337600083830152505050565b600061056f8385610549565b935061057c838584610554565b82840190509392505050565b6000610595828486610563565b91508190509392505050565b600082825260208201905092915050565b7f4163636f756e743a207472616e73616374696f6e207265766572746564000000600082015250565b60006105e8601d836105a1565b91506105f3826105b2565b602082019050919050565b60006020820190508181036000830152610617816105db565b905091905056fea26469706673582212206b9b9ebc1fe271ad52229dcc3cf6ce7ac54f7f1e3122a2d683a44b4e1c5be84764736f6c634300080c0033"; - -type AccountConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AccountConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class Account__factory extends ContractFactory { - constructor(...args: AccountConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - registry_: PromiseOrValue, - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - registry_, - implementation_, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - registry_: PromiseOrValue, - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction( - registry_, - implementation_, - overrides || {} - ); - } - override attach(address: string): Account { - return super.attach(address) as Account; - } - override connect(signer: Signer): Account__factory { - return super.connect(signer) as Account__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AccountInterface { - return new utils.Interface(_abi) as AccountInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Account { - return new Contract(address, _abi, signerOrProvider) as Account; - } -} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts deleted file mode 100644 index 88e082a2..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/GatewayRecipient__factory.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - GatewayRecipient, - GatewayRecipientInterface, -} from "../../../src/backward_compatibility_helpers/GatewayRecipient"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "gateway", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063116191b614602d575b600080fd5b60336047565b604051603e919060a8565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000609482606b565b9050919050565b60a281608b565b82525050565b600060208201905060bb6000830184609b565b9291505056fea264697066735822122059311830636dc2e6c7bed48ec5f4f44d9e1ec0a6a7d3cc54d8aa07f5f7feec7f64736f6c634300080c0033"; - -type GatewayRecipientConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: GatewayRecipientConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class GatewayRecipient__factory extends ContractFactory { - constructor(...args: GatewayRecipientConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): GatewayRecipient { - return super.attach(address) as GatewayRecipient; - } - override connect(signer: Signer): GatewayRecipient__factory { - return super.connect(signer) as GatewayRecipient__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): GatewayRecipientInterface { - return new utils.Interface(_abi) as GatewayRecipientInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GatewayRecipient { - return new Contract(address, _abi, signerOrProvider) as GatewayRecipient; - } -} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts b/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts deleted file mode 100644 index 423c80b4..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory.ts +++ /dev/null @@ -1,587 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - PersonalAccountRegistry, - PersonalAccountRegistryInterface, -} from "../../../src/backward_compatibility_helpers/PersonalAccountRegistry"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "beneficiary", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "AccountCallRefunded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountDeployed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountImplementationUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "AccountOwnerAdded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "AccountOwnerRemoved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "accountRegistry", - type: "address", - }, - ], - name: "AccountRegistryUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "response", - type: "bytes", - }, - ], - name: "AccountTransactionExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "accountImplementation", - type: "address", - }, - ], - name: "AccountUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - inputs: [], - name: "accountImplementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "accountRegistry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "addAccountOwner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "saltOwner", - type: "address", - }, - ], - name: "computeAccountAddress", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "deployAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "executeAccountTransaction", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "gateway", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "accountImplementation_", - type: "address", - }, - { - internalType: "address", - name: "gateway_", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "isAccountDeployed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "messageHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "refundAccountCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "removeAccountOwner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "accountImplementation_", - type: "address", - }, - ], - name: "upgrade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "upgradeAccount", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "verifyAccountOwner", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "verifyAccountOwnerAtBlock", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b506144bf806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001245760003560e01c8063485cc95511620000b1578063da9fc1ae116200007b578063da9fc1ae146200031d578063db63f582146200033d578063e1e382ce146200035d578063e5c7278f1462000393578063f4876c7414620003b35762000124565b8063485cc955146200026f578063bb890d3f146200028f578063cade6a5d14620002c5578063d089e11a14620002fb5762000124565b80631a84140311620000f35780631a84140314620001c35780633164b5e114620001e357806334d323a4146200021957806343013c24146200024f5762000124565b80630900f010146200012957806311464fbe1462000149578063116191b6146200016b578063124e9eb3146200018d575b600080fd5b62000147600480360381019062000141919062002539565b620003d3565b005b62000153620003e3565b6040516200016291906200257c565b60405180910390f35b6200017562000409565b6040516200018491906200257c565b60405180910390f35b620001ab6004803603810190620001a5919062002607565b6200042f565b604051620001ba9190620026c8565b60405180910390f35b620001e16004803603810190620001db919062002720565b620004ee565b005b620002016004803603810190620001fb919062002539565b620006db565b604051620002109190620026c8565b60405180910390f35b62000237600480360381019062000231919062002720565b62000734565b604051620002469190620026c8565b60405180910390f35b6200026d600480360381019062000267919062002539565b62000828565b005b6200028d60048036038101906200028791906200277c565b62000844565b005b620002ad6004803603810190620002a791906200277c565b620009a2565b604051620002bc9190620026c8565b60405180910390f35b620002e36004803603810190620002dd919062002539565b620009b8565b604051620002f291906200257c565b60405180910390f35b62000305620009cc565b6040516200031491906200257c565b60405180910390f35b6200033b600480360381019062000335919062002539565b620009f0565b005b6200035b60048036038101906200035591906200277c565b62000a0a565b005b6200037b6004803603810190620003759190620027fe565b62000c4d565b6040516200038a9190620026c8565b60405180910390f35b620003b16004803603810190620003ab91906200287e565b62000cbd565b005b620003d16004803603810190620003cb91906200277c565b62000d30565b005b620003e08160016200100d565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000620004e386620004dd85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050620004ce89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505062001128565b6200118890919063ffffffff16565b62001255565b905095945050505050565b620004f98362001411565b506200050583620017de565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005a3576200059c833283600067ffffffffffffffff81111562000560576200055f62002914565b5b6040519080825280601f01601f191660200182016040528015620005935781602001600182028036833780820191505090505b506000620018e2565b5062000697565b60006200062f8484600063a9059cbb60e01b3287604051602401620005ca92919062002954565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506000620018e2565b9050600081511115620006955780806020019051810190620006529190620029b2565b62000694576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068b9062002a6b565b60405180910390fd5b5b505b7feb5511fbef89123439f12682f0e9d0fc9696913b26eee55434c77d62c30aa7ca83328484604051620006ce949392919062002a8d565b60405180910390a1505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000806000905062000747858562001255565b156200075757600190506200081d565b6200081a83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001b1f90919063ffffffff16565b90505b809150509392505050565b620008338162001411565b506200084181600162001b73565b50565b6000600160159054906101000a900460ff1615905080801562000878575060018060149054906101000a900460ff1660ff16105b80620008aa57506200088a3062001d72565b158015620008a9575060018060149054906101000a900460ff1660ff16145b5b620008ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e39062002b50565b60405180910390fd5b60018060146101000a81548160ff021916908360ff1602179055508015620009295760018060156101000a81548160ff0219169083151502179055505b62000935308462001d95565b620009408262001db3565b80156200099d576000600160156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405162000994919062002bcc565b60405180910390a15b505050565b6000620009b0838362001255565b905092915050565b6000620009c58262001df7565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620009fb8162001411565b5062000a0781620017de565b50565b600062000a178362001411565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a829062002c5f565b60405180910390fd5b62000b44600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001e38565b62000b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7d9062002cf7565b60405180910390fd5b43600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f1ce3cbbc43ee231e5b950332f2b0b9dd7d349291a3ee411ce5c5c7ed745661bb838360405162000c4092919062002d19565b60405180910390a1505050565b600062000cb38562000cad85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050876200118890919063ffffffff16565b62001255565b9050949350505050565b62000cc88562001411565b5062000cd485620017de565b62000d2885858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001620018e2565b505050505050565b62000d3b8262001411565b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da69062002dbc565b60405180910390fd5b62000e68600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900460ff1615151515815260200160018201548152505062001e38565b1562000eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ea29062002e54565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f27e282f7712c5b4617277759c834b86d163dfc1aad25c8c3c5926a1c9e56446882826040516200100192919062002d19565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010779062002eec565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550801562001124577f70d9f5a076620216a6050e493f3ce69749de0b68fa4b839ba2518660ba8b9cf0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200111b91906200257c565b60405180910390a15b5050565b600062001136825162001e4d565b8260405160200162001149919062002f91565b6040516020818303038152906040526040516020016200116b92919062003047565b604051602081830303815290604052805190602001209050919050565b600080600090506041835114156200124b5760008060006020860151925060408601519150606086015160001a9050601b8160ff161015620011d657601b81620011d39190620030ab565b90505b601b8160ff161480620011ec5750601c8160ff16145b156200124757600187828585604051600081526020016040526040516200121794939291906200310b565b6020604051602081039080840390855afa1580156200123a573d6000803e3d6000fd5b5050506020604051035193505b5050505b8091505092915050565b600080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156200137c576000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414905062001407565b6000801b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414156200140657620013d58362001df7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505b5b8091505092915050565b6000806200141e62001fdb565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161562001584576000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154146200157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200157590620031ce565b60405180910390fd5b620017d5565b6000801b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154146200160e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200160590620031ce565b60405180910390fd5b60008160405160200162001623919062003240565b604051602081830303815290604052805190602001209050620016468162001fee565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614620016b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016ad90620031ce565b60405180910390fd5b80600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055507f27e282f7712c5b4617277759c834b86d163dfc1aad25c8c3c5926a1c9e5644688483604051620017cb92919062002d19565b60405180910390a1505b80915050919050565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16620018df5762001882600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001620020d7565b506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b50565b6060600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562001957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200194e90620032d3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620019c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620019c0906200336b565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562001a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a329062003403565b60405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff16633f579f428787876040518463ffffffff1660e01b815260040162001a7c9392919062003488565b6000604051808303816000875af115801562001a9c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062001ac79190620035da565b9050821562001b12577f99eeae1fb8801e2e878e060ec5e5b3557b3c4f8106e35d88cb573f293dae4e24878787878560405162001b099594939291906200362b565b60405180910390a15b8091505095945050505050565b6000806000905083600001511562001b695760008460200151141562001b49576001905062001b68565b600083141562001b5d576001905062001b67565b8284602001511190505b5b5b8091505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bf8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c1e9190620036ad565b73ffffffffffffffffffffffffffffffffffffffff16141562001c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c6f9062003755565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663d784d426600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001cd591906200257c565b600060405180830381600087803b15801562001cf057600080fd5b505af115801562001d05573d6000803e3d6000fd5b50505050801562001d6e577feec27cdb8bd6f55c2c537deb52ab094a2437e85ef5197e6f064f90bff3ff563f82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162001d6592919062002d19565b60405180910390a15b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b62001da2826000620021cd565b62001daf8160006200100d565b5050565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808260405160200162001e0d919062003240565b60405160208183030381529060405280519060200120905062001e308162001fee565b915050919050565b600062001e46824362001b1f565b9050919050565b6060600082141562001e97576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905062001fd6565b600082905060005b6000821462001ecf57808062001eb59062003777565b915050600a8262001ec79190620037f4565b915062001e9f565b60008167ffffffffffffffff81111562001eee5762001eed62002914565b5b6040519080825280601f01601f19166020018201604052801562001f215781602001600182028036833780820191505090505b509050600060018362001f3591906200382c565b90508593505b6000841462001fce57600a8462001f53919062003867565b603062001f6191906200389f565b60f81b82828062001f7290620038fc565b93508151811062001f885762001f876200392b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8462001fc69190620037f4565b935062001f3b565b819450505050505b919050565b600062001fe96014620022e5565b905090565b600080604051806020016200200390620024b2565b6020820181038252601f19601f82011660405250600060a01b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060a01b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516020016200207b959493929190620039ab565b6040516020818303038152906040529050600060ff60f81b30858480519060200120604051602001620020b2949392919062003a86565b6040516020818303038152906040528051906020012090508060001c92505050919050565b6000808360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200212d90620024b2565b6200213a92919062002d19565b8190604051809103906000f59050801580156200215b573d6000803e3d6000fd5b5090508215620021c3577f2682a218602b9036c9869f006c5405ee4a1a65267653eb7e286123e5e1afde4c81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620021ba92919062002d19565b60405180910390a15b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562002240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022379062003b52565b60405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620022e1577f02e3c47057b8dc27a0929d3c394c314c73aa002d46939c31c9f71d1e77e86c1060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620022d891906200257c565b60405180910390a15b5050565b60008060009050620022f662002398565b156200238b5760008360003690506200231091906200382c565b90506200238260003683906014856200232a91906200389f565b92620023399392919062003b7e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505062002449565b9150506200238f565b3390505b80915050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200244257602c600036905010156200243d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024349062003c35565b60405180910390fd5b600190505b8091505090565b600080601483511462002493576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200248a9062003ca7565b60405180910390fd5b6c01000000000000000000000000602084015104905080915050919050565b6107c08062003cca83390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200250182620024d4565b9050919050565b6200251381620024f4565b81146200251f57600080fd5b50565b600081359050620025338162002508565b92915050565b600060208284031215620025525762002551620024ca565b5b6000620025628482850162002522565b91505092915050565b6200257681620024f4565b82525050565b60006020820190506200259360008301846200256b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112620025c157620025c062002599565b5b8235905067ffffffffffffffff811115620025e157620025e06200259e565b5b6020830191508360018202830111156200260057620025ff620025a3565b5b9250929050565b600080600080600060608688031215620026265762002625620024ca565b5b6000620026368882890162002522565b955050602086013567ffffffffffffffff8111156200265a5762002659620024cf565b5b6200266888828901620025a8565b9450945050604086013567ffffffffffffffff8111156200268e576200268d620024cf565b5b6200269c88828901620025a8565b92509250509295509295909350565b60008115159050919050565b620026c281620026ab565b82525050565b6000602082019050620026df6000830184620026b7565b92915050565b6000819050919050565b620026fa81620026e5565b81146200270657600080fd5b50565b6000813590506200271a81620026ef565b92915050565b6000806000606084860312156200273c576200273b620024ca565b5b60006200274c8682870162002522565b93505060206200275f8682870162002522565b9250506040620027728682870162002709565b9150509250925092565b60008060408385031215620027965762002795620024ca565b5b6000620027a68582860162002522565b9250506020620027b98582860162002522565b9150509250929050565b6000819050919050565b620027d881620027c3565b8114620027e457600080fd5b50565b600081359050620027f881620027cd565b92915050565b600080600080606085870312156200281b576200281a620024ca565b5b60006200282b8782880162002522565b94505060206200283e87828801620027e7565b935050604085013567ffffffffffffffff811115620028625762002861620024cf565b5b6200287087828801620025a8565b925092505092959194509250565b6000806000806000608086880312156200289d576200289c620024ca565b5b6000620028ad8882890162002522565b9550506020620028c08882890162002522565b9450506040620028d38882890162002709565b935050606086013567ffffffffffffffff811115620028f757620028f6620024cf565b5b6200290588828901620025a8565b92509250509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200294e81620026e5565b82525050565b60006040820190506200296b60008301856200256b565b6200297a602083018462002943565b9392505050565b6200298c81620026ab565b81146200299857600080fd5b50565b600081519050620029ac8162002981565b92915050565b600060208284031215620029cb57620029ca620024ca565b5b6000620029db848285016200299b565b91505092915050565b600082825260208201905092915050565b7f506572736f6e616c4163636f756e7452656769737472793a204552433230546f60008201527f6b656e207472616e736665722072657665727465640000000000000000000000602082015250565b600062002a53603583620029e4565b915062002a6082620029f5565b604082019050919050565b6000602082019050818103600083015262002a868162002a44565b9050919050565b600060808201905062002aa460008301876200256b565b62002ab360208301866200256b565b62002ac260408301856200256b565b62002ad1606083018462002943565b95945050505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600062002b38602e83620029e4565b915062002b458262002ada565b604082019050919050565b6000602082019050818103600083015262002b6b8162002b29565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b600062002bb462002bae62002ba88462002b72565b62002b89565b62002b7c565b9050919050565b62002bc68162002b93565b82525050565b600060208201905062002be3600083018462002bbb565b92915050565b7f506572736f6e616c4163636f756e7452656769737472793a2063616e6e6f742060008201527f72656d6f76652073656c66000000000000000000000000000000000000000000602082015250565b600062002c47602b83620029e4565b915062002c548262002be9565b604082019050919050565b6000602082019050818103600083015262002c7a8162002c38565b9050919050565b7f506572736f6e616c4163636f756e7452656769737472793a206f776e6572206460008201527f6f65736e27742065786973740000000000000000000000000000000000000000602082015250565b600062002cdf602c83620029e4565b915062002cec8262002c81565b604082019050919050565b6000602082019050818103600083015262002d128162002cd0565b9050919050565b600060408201905062002d3060008301856200256b565b62002d3f60208301846200256b565b9392505050565b7f506572736f6e616c4163636f756e7452656769737472793a2063616e6e6f742060008201527f61646420307830206f776e657200000000000000000000000000000000000000602082015250565b600062002da4602d83620029e4565b915062002db18262002d46565b604082019050919050565b6000602082019050818103600083015262002dd78162002d95565b9050919050565b7f506572736f6e616c4163636f756e7452656769737472793a206f776e6572206160008201527f6c72656164792065786973747300000000000000000000000000000000000000602082015250565b600062002e3c602d83620029e4565b915062002e498262002dde565b604082019050919050565b6000602082019050818103600083015262002e6f8162002e2d565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073657420616360008201527f636f756e7420496d706c656d656e746174696f6e20746f203078300000000000602082015250565b600062002ed4603b83620029e4565b915062002ee18262002e76565b604082019050919050565b6000602082019050818103600083015262002f078162002ec5565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101562002f4457808201518184015260208101905062002f27565b8381111562002f54576000848401525b50505050565b600062002f678262002f0e565b62002f73818562002f19565b935062002f8581856020860162002f24565b80840191505092915050565b600062002f9f828462002f5a565b915081905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b600062002fed601a8362002faa565b915062002ffa8262002fb5565b601a82019050919050565b600081519050919050565b60006200301d8262003005565b62003029818562002faa565b93506200303b81856020860162002f24565b80840191505092915050565b6000620030548262002fde565b915062003062828562003010565b915062003070828462002f5a565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620030b88262002b7c565b9150620030c58362002b7c565b92508260ff03821115620030de57620030dd6200307c565b5b828201905092915050565b620030f481620027c3565b82525050565b620031058162002b7c565b82525050565b6000608082019050620031226000830187620030e9565b620031316020830186620030fa565b620031406040830185620030e9565b6200314f6060830184620030e9565b95945050505050565b7f506572736f6e616c4163636f756e7452656769737472793a2073656e6465722060008201527f6973206e6f7420746865206163636f756e74206f776e65720000000000000000602082015250565b6000620031b6603883620029e4565b9150620031c38262003158565b604082019050919050565b60006020820190508181036000830152620031e981620031a7565b9050919050565b60008160601b9050919050565b60006200320a82620031f0565b9050919050565b60006200321e82620031fd565b9050919050565b6200323a6200323482620024f4565b62003211565b82525050565b60006200324e828462003225565b60148201915081905092915050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f20307830000000000000000000000000000000000000000000000000000000602082015250565b6000620032bb602583620029e4565b9150620032c8826200325d565b604082019050919050565b60006020820190508181036000830152620032ee81620032ac565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f20636f6e74726f6c6c65720000000000000000000000000000000000000000602082015250565b600062003353602c83620029e4565b91506200336082620032f5565b604082019050919050565b60006020820190508181036000830152620033868162003344565b9050919050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073656e64207460008201527f6f2073656c660000000000000000000000000000000000000000000000000000602082015250565b6000620033eb602683620029e4565b9150620033f8826200338d565b604082019050919050565b600060208201905081810360008301526200341e81620033dc565b9050919050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b6000620034548262002f0e565b62003460818562003425565b93506200347281856020860162002f24565b6200347d8162003436565b840191505092915050565b60006060820190506200349f60008301866200256b565b620034ae602083018562002943565b8181036040830152620034c2818462003447565b9050949350505050565b600080fd5b620034dc8262003436565b810181811067ffffffffffffffff82111715620034fe57620034fd62002914565b5b80604052505050565b600062003513620024c0565b9050620035218282620034d1565b919050565b600067ffffffffffffffff82111562003544576200354362002914565b5b6200354f8262003436565b9050602081019050919050565b6000620035736200356d8462003526565b62003507565b905082815260208101848484011115620035925762003591620034cc565b5b6200359f84828562002f24565b509392505050565b600082601f830112620035bf57620035be62002599565b5b8151620035d18482602086016200355c565b91505092915050565b600060208284031215620035f357620035f2620024ca565b5b600082015167ffffffffffffffff811115620036145762003613620024cf565b5b6200362284828501620035a7565b91505092915050565b600060a0820190506200364260008301886200256b565b6200365160208301876200256b565b62003660604083018662002943565b818103606083015262003674818562003447565b905081810360808301526200368a818462003447565b90509695505050505050565b600081519050620036a78162002508565b92915050565b600060208284031215620036c657620036c5620024ca565b5b6000620036d68482850162003696565b91505092915050565b7f4163636f756e74436f6e74726f6c6c65723a206163636f756e7420616c72656160008201527f6479207570677261646564000000000000000000000000000000000000000000602082015250565b60006200373d602b83620029e4565b91506200374a82620036df565b604082019050919050565b6000602082019050818103600083015262003770816200372e565b9050919050565b60006200378482620026e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620037ba57620037b96200307c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200380182620026e5565b91506200380e83620026e5565b925082620038215762003820620037c5565b5b828204905092915050565b60006200383982620026e5565b91506200384683620026e5565b9250828210156200385c576200385b6200307c565b5b828203905092915050565b60006200387482620026e5565b91506200388183620026e5565b925082620038945762003893620037c5565b5b828206905092915050565b6000620038ac82620026e5565b9150620038b983620026e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620038f157620038f06200307c565b5b828201905092915050565b60006200390982620026e5565b9150600082141562003920576200391f6200307c565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffff000000000000000000000000000000000000000082169050919050565b6000819050919050565b620039a56200399f826200395a565b62003986565b82525050565b6000620039b9828862002f5a565b9150620039c7828762003990565b600c82019150620039d9828662003225565b601482019150620039eb828562003990565b600c82019150620039fd828462003225565b6014820191508190509695505050505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b62003a5b62003a558262003a10565b62003a3c565b82525050565b6000819050919050565b62003a8062003a7a82620027c3565b62003a61565b82525050565b600062003a94828762003a46565b60018201915062003aa6828662003225565b60148201915062003ab8828562003a6b565b60208201915062003aca828462003a6b565b60208201915081905095945050505050565b7f4163636f756e74436f6e74726f6c6c65723a2063616e6e6f742073657420616360008201527f636f756e7420726567697374727920746f203078300000000000000000000000602082015250565b600062003b3a603583620029e4565b915062003b478262003adc565b604082019050919050565b6000602082019050818103600083015262003b6d8162003b2b565b9050919050565b600080fd5b600080fd5b6000808585111562003b955762003b9462003b74565b5b8386111562003ba95762003ba862003b79565b5b6001850283019150848603905094509492505050565b7f47617465776179526563697069656e743a20696e76616c6964206d73672e646160008201527f7461000000000000000000000000000000000000000000000000000000000000602082015250565b600062003c1d602283620029e4565b915062003c2a8262003bbf565b604082019050919050565b6000602082019050818103600083015262003c508162003c0e565b9050919050565b7f42797465734c69623a20696e76616c69642064617461206c656e677468000000600082015250565b600062003c8f601d83620029e4565b915062003c9c8262003c57565b602082019050919050565b6000602082019050818103600083015262003cc28162003c80565b905091905056fe608060405234801561001057600080fd5b506040516107c03803806107c08339818101604052810190610032919061011d565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ea826100bf565b9050919050565b6100fa816100df565b811461010557600080fd5b50565b600081519050610117816100f1565b92915050565b60008060408385031215610134576101336100ba565b5b600061014285828601610108565b925050602061015385828601610108565b9150509250929050565b6106548061016c6000396000f3fe6080604052600436106100435760003560e01c80633f579f42146100b25780635c60da1b146100ef5780637b1039991461011a578063d784d426146101455761004a565b3661004a57005b34801561005657600080fd5b50600080369050146100b05760008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050368060008037600080826000855af43d806000803e81600081146100ab57816000f35b816000fd5b005b3480156100be57600080fd5b506100d960048036038101906100d491906103c3565b61016e565b6040516100e691906104d0565b60405180910390f35b3480156100fb57600080fd5b50610104610233565b6040516101119190610501565b60405180910390f35b34801561012657600080fd5b5061012f610257565b60405161013c9190610501565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061051c565b61027d565b005b60608060008673ffffffffffffffffffffffffffffffffffffffff1686868660405161019b929190610588565b60006040518083038185875af1925050503d80600081146101d8576040519150601f19603f3d011682016040523d82523d6000602084013e6101dd565b606091505b50809350819250505080610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021d906105fe565b60405180910390fd5b8192505050949350505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006102f5826102ca565b9050919050565b610305816102ea565b811461031057600080fd5b50565b600081359050610322816102fc565b92915050565b6000819050919050565b61033b81610328565b811461034657600080fd5b50565b60008135905061035881610332565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126103835761038261035e565b5b8235905067ffffffffffffffff8111156103a05761039f610363565b5b6020830191508360018202830111156103bc576103bb610368565b5b9250929050565b600080600080606085870312156103dd576103dc6102c0565b5b60006103eb87828801610313565b94505060206103fc87828801610349565b935050604085013567ffffffffffffffff81111561041d5761041c6102c5565b5b6104298782880161036d565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015610471578082015181840152602081019050610456565b83811115610480576000848401525b50505050565b6000601f19601f8301169050919050565b60006104a282610437565b6104ac8185610442565b93506104bc818560208601610453565b6104c581610486565b840191505092915050565b600060208201905081810360008301526104ea8184610497565b905092915050565b6104fb816102ea565b82525050565b600060208201905061051660008301846104f2565b92915050565b600060208284031215610532576105316102c0565b5b600061054084828501610313565b91505092915050565b600081905092915050565b82818337600083830152505050565b600061056f8385610549565b935061057c838584610554565b82840190509392505050565b6000610595828486610563565b91508190509392505050565b600082825260208201905092915050565b7f4163636f756e743a207472616e73616374696f6e207265766572746564000000600082015250565b60006105e8601d836105a1565b91506105f3826105b2565b602082019050919050565b60006020820190508181036000830152610617816105db565b905091905056fea26469706673582212206b9b9ebc1fe271ad52229dcc3cf6ce7ac54f7f1e3122a2d683a44b4e1c5be84764736f6c634300080c0033a264697066735822122092cece821589feec4fd8d2e42c2502fb8a1299c6a062fa555d0fcc8e45634fb764736f6c634300080c0033"; - -type PersonalAccountRegistryConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: PersonalAccountRegistryConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class PersonalAccountRegistry__factory extends ContractFactory { - constructor(...args: PersonalAccountRegistryConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): PersonalAccountRegistry { - return super.attach(address) as PersonalAccountRegistry; - } - override connect(signer: Signer): PersonalAccountRegistry__factory { - return super.connect(signer) as PersonalAccountRegistry__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): PersonalAccountRegistryInterface { - return new utils.Interface(_abi) as PersonalAccountRegistryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PersonalAccountRegistry { - return new Contract( - address, - _abi, - signerOrProvider - ) as PersonalAccountRegistry; - } -} diff --git a/src/contracts/factories/src/backward_compatibility_helpers/index.ts b/src/contracts/factories/src/backward_compatibility_helpers/index.ts deleted file mode 100644 index bfb1c22d..00000000 --- a/src/contracts/factories/src/backward_compatibility_helpers/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { Account__factory } from "./Account__factory"; -export { AccountController__factory } from "./AccountController__factory"; -export { AccountRegistryMock__factory } from "./AccountRegistryMock__factory"; -export { GatewayRecipient__factory } from "./GatewayRecipient__factory"; -export { PersonalAccountRegistry__factory } from "./PersonalAccountRegistry__factory"; diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts new file mode 100644 index 00000000..defa25ad --- /dev/null +++ b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts @@ -0,0 +1,50 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC1271Wallet, + IERC1271WalletInterface, +} from "../../../../src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes32", + name: "hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "magicValue", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC1271Wallet__factory { + static readonly abi = _abi; + static createInterface(): IERC1271WalletInterface { + return new utils.Interface(_abi) as IERC1271WalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC1271Wallet { + return new Contract(address, _abi, signerOrProvider) as IERC1271Wallet; + } +} diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts new file mode 100644 index 00000000..b9d66846 --- /dev/null +++ b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts @@ -0,0 +1,181 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + UniversalSigValidator, + UniversalSigValidatorInterface, +} from "../../../../src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "isValidSig", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, + ], + name: "isValidSigImpl", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "isValidSigWithSideEffects", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506117d0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806316d43401146100465780638f0684301461007657806398ef1ed8146100a6575b600080fd5b610060600480360381019061005b9190610ef8565b6100d6565b60405161006d9190610f8f565b60405180910390f35b610090600480360381019061008b9190610faa565b610aaf565b60405161009d9190610f8f565b60405180910390f35b6100c060048036038101906100bb9190610faa565b610b7c565b6040516100cd9190610f8f565b60405180910390f35b60006100ec6777258f39a67c0acd60c01b610da5565b61010067c9d3460cf31b367060c01b610da5565b61011467301450deda14998860c01b610da5565b60008673ffffffffffffffffffffffffffffffffffffffff163b905061014467ec35fa0e327aba3360c01b610da5565b6101586757c603851350fa0960c01b610da5565b606061016e67ed7102d9c731614b60c01b610da5565b61018267260c95324dc5522a60c01b610da5565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a90506101ba9190611057565b908a8a9050926101cc93929190611095565b906101d791906110e8565b1490506101ee67adb0f8e971c6f00460c01b610da5565b6102026775ac95bff94d832360c01b610da5565b801561044f5761021c67b7ce1fa3f7f6604d60c01b610da5565b610230679fc1490a6707ce8260c01b610da5565b610244679cbd4322f03dcb3060c01b610da5565b600061025a677c50636fd0d78e6e60c01b610da5565b61026e67b6c96f6498872fdd60c01b610da5565b606061028467d225012c278bc14960c01b610da5565b888860009060208c8c90506102999190611057565b926102a693929190611095565b8101906102b391906112c6565b8096508193508294505050506102d367414eafbc10d5dfd460c01b610da5565b6102e7679735072f1875e8c560c01b610da5565b600085036104335761030367ece2f114e83cba5460c01b610da5565b61031767bb4b7709950fab6560c01b610da5565b61032b67e556fd7ed728116b60c01b610da5565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405161035391906113c2565b6000604051808303816000865af19150503d8060008114610390576040519150601f19603f3d011682016040523d82523d6000602084013e610395565b606091505b50915091506103ae675bb7adbcacc27af760c01b610da5565b6103c267925a11ac41b1a62f60c01b610da5565b81610418576103db674b9b350a0c4e240d60c01b610da5565b806040517f9d0d6e2d00000000000000000000000000000000000000000000000000000000815260040161040f9190611423565b60405180910390fd5b61042c67270a9300cfb5deb160c01b610da5565b5050610448565b6104476719ddea40eb9c9d5e60c01b610da5565b5b50506104bf565b610463671617c5f7b544c15460c01b610da5565b61047767152cf4f885c3c7bd60c01b610da5565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b6104d3678968ba2400116cd160c01b610da5565b6104e767d26f37fb13c4702060c01b610da5565b808015610504575061050367e672c6829c01435e60c01b610da8565b5b8061052b575060008311801561052a5750610529672f1034641526e8e560c01b610da8565b5b5b1561079b576105446787b8bb2f9d833b2360c01b610da5565b6105586748ed04b5790955de60c01b610da5565b61056c67c07d3098ed811b0e60c01b610da5565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b81526004016105a7929190611454565b602060405180830381865afa9250505080156105e157506040513d601f19601f820116820180604052508101906105de91906114dc565b60015b610668573d8060008114610611576040519150601f19603f3d011682016040523d82523d6000602084013e610616565b606091505b5061062b672c516c89798db2e060c01b610da5565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161065f9190611423565b60405180910390fd5b61067c677a7dc9015ade993760c01b610da5565b610690676bd30bd513db1c1260c01b610da5565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506106f067f77b76e97cdda63e60c01b610da5565b61070467f2ac3b0c93d4d96060c01b610da5565b6000851480156107115750825b801561071b575086155b15610752576107346732203bac67e9a5c660c01b610da5565b61074867bacd05270bf834fa60c01b610da5565b806000526001601ffd5b61076667db508d98998fd4cb60c01b610da5565b61077a67bd809f1f7297a39860c01b610da5565b61078e671166c1324f0a4d4360c01b610da5565b8095505050505050610aa6565b6107af67fb73a16ec6f828a360c01b610da5565b6107c367124b4f67fba3948f60c01b610da5565b6107d767a72081e2c67a966a60c01b610da5565b6107eb670ab810c1358d671760c01b610da5565b60418787905014610831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108289061158c565b60405180910390fd5b61084567c0b4b2b739bdbc3e60c01b610da5565b610859670f81a533fa5be34e60c01b610da5565b61086d67657c1339b273a74660c01b610da5565b6000878760009060209261088393929190611095565b9061088e91906110e8565b90506108a467dc3d3b49fc92cadb60c01b610da5565b6108b86752ae34fa8263b21b60c01b610da5565b600088886020906040926108ce93929190611095565b906108d991906110e8565b90506108ef67301232fd22fb824c60c01b610da5565b61090367f519c889a1cef68c60c01b610da5565b600089896040818110610919576109186115ac565b5b9050013560f81c60f81b60f81c905061093c679a20c64fb3f7324360c01b610da5565b610950678a031af26ced764160c01b610da5565b601b8160ff16141580156109685750601c8160ff1614155b156109e45761098167cd922db48d204f9b60c01b610da5565b61099567833a8605e20290ce60c01b610da5565b6109a967b3da6c39eac2834e60c01b610da5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db9061164d565b60405180910390fd5b6109f8675514297355562d4860c01b610da5565b610a0c6757b333f889b6e2b360c01b610da5565b610a20676603fc4d7122128560c01b610da5565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c83868660405160008152602001604052604051610a5a9493929190611689565b6020604051602081039080840390855afa158015610a7c573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6000610ac567a69e23ef0cf0d80560c01b610da5565b610ad96789508a17c1e5baf860c01b610da5565b610aed67f0e90fa9dac9b5a260c01b610da5565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401610b2f95949392919061170a565b6020604051808303816000875af1158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b72919061176d565b9050949350505050565b6000610b92678cc395c88e3ae24060c01b610da5565b610ba6670e6cd08ae62d699160c01b610da5565b610bba671a6d203d14bbeb3560c01b610da5565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401610bfc95949392919061170a565b6020604051808303816000875af1925050508015610c3857506040513d601f19601f82011682018060405250810190610c35919061176d565b60015b610d70573d8060008114610c68576040519150601f19603f3d011682016040523d82523d6000602084013e610c6d565b606091505b50610c826763fa3d4afb8cd55b60c01b610da5565b610c9667c78e77a5e38dc67760c01b610da5565b600081519050610cb067a2319ac582c5f8b960c01b610da5565b610cc4679d791f94f379b3d460c01b610da5565b60018103610d4457610ce0674b6df8afb2c0610f60c01b610da5565b610cf4671241dc8732fa093a60c01b610da5565b600160f81b82600081518110610d0d57610d0c6115ac565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050610d9d565b610d5867fb87cb9c02294f9f60c01b610da5565b610d6c6773311759eab4f85760c01b610da5565b8082fd5b610d84672f68b0ad8fd39c0a60c01b610da5565b610d9867ba867e4ef348d1a360c01b610da5565b809150505b949350505050565b50565b600060019050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610df282610dc7565b9050919050565b610e0281610de7565b8114610e0d57600080fd5b50565b600081359050610e1f81610df9565b92915050565b6000819050919050565b610e3881610e25565b8114610e4357600080fd5b50565b600081359050610e5581610e2f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e8057610e7f610e5b565b5b8235905067ffffffffffffffff811115610e9d57610e9c610e60565b5b602083019150836001820283011115610eb957610eb8610e65565b5b9250929050565b60008115159050919050565b610ed581610ec0565b8114610ee057600080fd5b50565b600081359050610ef281610ecc565b92915050565b600080600080600060808688031215610f1457610f13610dbd565b5b6000610f2288828901610e10565b9550506020610f3388828901610e46565b945050604086013567ffffffffffffffff811115610f5457610f53610dc2565b5b610f6088828901610e6a565b93509350506060610f7388828901610ee3565b9150509295509295909350565b610f8981610ec0565b82525050565b6000602082019050610fa46000830184610f80565b92915050565b60008060008060608587031215610fc457610fc3610dbd565b5b6000610fd287828801610e10565b9450506020610fe387828801610e46565b935050604085013567ffffffffffffffff81111561100457611003610dc2565b5b61101087828801610e6a565b925092505092959194509250565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110628261101e565b915061106d8361101e565b925082820390508181111561108557611084611028565b5b92915050565b600080fd5b600080fd5b600080858511156110a9576110a861108b565b5b838611156110ba576110b9611090565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006110f483836110d0565b826110ff8135610e25565b9250602082101561113f5761113a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026110db565b831692505b505092915050565b600061115282610dc7565b9050919050565b61116281611147565b811461116d57600080fd5b50565b60008135905061117f81611159565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111d38261118a565b810181811067ffffffffffffffff821117156111f2576111f161119b565b5b80604052505050565b6000611205610db3565b905061121182826111ca565b919050565b600067ffffffffffffffff8211156112315761123061119b565b5b61123a8261118a565b9050602081019050919050565b82818337600083830152505050565b600061126961126484611216565b6111fb565b90508281526020810184848401111561128557611284611185565b5b611290848285611247565b509392505050565b600082601f8301126112ad576112ac610e5b565b5b81356112bd848260208601611256565b91505092915050565b6000806000606084860312156112df576112de610dbd565b5b60006112ed86828701611170565b935050602084013567ffffffffffffffff81111561130e5761130d610dc2565b5b61131a86828701611298565b925050604084013567ffffffffffffffff81111561133b5761133a610dc2565b5b61134786828701611298565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561138557808201518184015260208101905061136a565b60008484015250505050565b600061139c82611351565b6113a6818561135c565b93506113b6818560208601611367565b80840191505092915050565b60006113ce8284611391565b915081905092915050565b600082825260208201905092915050565b60006113f582611351565b6113ff81856113d9565b935061140f818560208601611367565b6114188161118a565b840191505092915050565b6000602082019050818103600083015261143d81846113ea565b905092915050565b61144e81610e25565b82525050565b60006040820190506114696000830185611445565b818103602083015261147b81846113ea565b90509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114b981611484565b81146114c457600080fd5b50565b6000815190506114d6816114b0565b92915050565b6000602082840312156114f2576114f1610dbd565b5b6000611500848285016114c7565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000611576603a83611509565b91506115818261151a565b604082019050919050565b600060208201905081810360008301526115a581611569565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000611637602d83611509565b9150611642826115db565b604082019050919050565b600060208201905081810360008301526116668161162a565b9050919050565b600060ff82169050919050565b6116838161166d565b82525050565b600060808201905061169e6000830187611445565b6116ab602083018661167a565b6116b86040830185611445565b6116c56060830184611445565b95945050505050565b6116d781610de7565b82525050565b60006116e983856113d9565b93506116f6838584611247565b6116ff8361118a565b840190509392505050565b600060808201905061171f60008301886116ce565b61172c6020830187611445565b818103604083015261173f8185876116dd565b905061174e6060830184610f80565b9695505050505050565b60008151905061176781610ecc565b92915050565b60006020828403121561178357611782610dbd565b5b600061179184828501611758565b9150509291505056fea2646970667358221220fea7e3a6d1ef133a8516dd849640b14a03ede64a5d55507f9e43dfb5c506244f64736f6c63430008110033"; + +type UniversalSigValidatorConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: UniversalSigValidatorConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class UniversalSigValidator__factory extends ContractFactory { + constructor(...args: UniversalSigValidatorConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): UniversalSigValidator { + return super.attach(address) as UniversalSigValidator; + } + override connect(signer: Signer): UniversalSigValidator__factory { + return super.connect(signer) as UniversalSigValidator__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): UniversalSigValidatorInterface { + return new utils.Interface(_abi) as UniversalSigValidatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): UniversalSigValidator { + return new Contract( + address, + _abi, + signerOrProvider + ) as UniversalSigValidator; + } +} diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts new file mode 100644 index 00000000..28181452 --- /dev/null +++ b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts @@ -0,0 +1,107 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BytesLike, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../common"; +import type { + ValidateSigOffchain, + ValidateSigOffchainInterface, +} from "../../../../src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50604051611d18380380611d18833981810160405281019061003291906103a2565b61004c6746cc9b2b46e6c67360c01b61018960201b60201c565b61006667c281133419a07fa560c01b61018960201b60201c565b610080677991f9117880d02e60c01b61018960201b60201c565b600060405161008e9061018c565b604051809103906000f0801580156100aa573d6000803e3d6000fd5b5090506100c767225883c9b1aeae4a60c01b61018960201b60201c565b6100e16704e744ba7c4a7db160c01b61018960201b60201c565b60008173ffffffffffffffffffffffffffffffffffffffff16638f0684308686866040518463ffffffff1660e01b815260040161012093929190610484565b6020604051808303816000875af115801561013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016391906104fa565b905061017f6703bab5966ef2ab8460c01b61018960201b60201c565b806000526001601ff35b50565b6117f08061052883390190565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101d8826101ad565b9050919050565b6101e8816101cd565b81146101f357600080fd5b50565b600081519050610205816101df565b92915050565b6000819050919050565b61021e8161020b565b811461022957600080fd5b50565b60008151905061023b81610215565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6102948261024b565b810181811067ffffffffffffffff821117156102b3576102b261025c565b5b80604052505050565b60006102c6610199565b90506102d2828261028b565b919050565b600067ffffffffffffffff8211156102f2576102f161025c565b5b6102fb8261024b565b9050602081019050919050565b60005b8381101561032657808201518184015260208101905061030b565b60008484015250505050565b6000610345610340846102d7565b6102bc565b90508281526020810184848401111561036157610360610246565b5b61036c848285610308565b509392505050565b600082601f83011261038957610388610241565b5b8151610399848260208601610332565b91505092915050565b6000806000606084860312156103bb576103ba6101a3565b5b60006103c9868287016101f6565b93505060206103da8682870161022c565b925050604084015167ffffffffffffffff8111156103fb576103fa6101a8565b5b61040786828701610374565b9150509250925092565b61041a816101cd565b82525050565b6104298161020b565b82525050565b600081519050919050565b600082825260208201905092915050565b60006104568261042f565b610460818561043a565b9350610470818560208601610308565b6104798161024b565b840191505092915050565b60006060820190506104996000830186610411565b6104a66020830185610420565b81810360408301526104b8818461044b565b9050949350505050565b60008115159050919050565b6104d7816104c2565b81146104e257600080fd5b50565b6000815190506104f4816104ce565b92915050565b6000602082840312156105105761050f6101a3565b5b600061051e848285016104e5565b9150509291505056fe608060405234801561001057600080fd5b506117d0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806316d43401146100465780638f0684301461007657806398ef1ed8146100a6575b600080fd5b610060600480360381019061005b9190610ef8565b6100d6565b60405161006d9190610f8f565b60405180910390f35b610090600480360381019061008b9190610faa565b610aaf565b60405161009d9190610f8f565b60405180910390f35b6100c060048036038101906100bb9190610faa565b610b7c565b6040516100cd9190610f8f565b60405180910390f35b60006100ec6777258f39a67c0acd60c01b610da5565b61010067c9d3460cf31b367060c01b610da5565b61011467301450deda14998860c01b610da5565b60008673ffffffffffffffffffffffffffffffffffffffff163b905061014467ec35fa0e327aba3360c01b610da5565b6101586757c603851350fa0960c01b610da5565b606061016e67ed7102d9c731614b60c01b610da5565b61018267260c95324dc5522a60c01b610da5565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a90506101ba9190611057565b908a8a9050926101cc93929190611095565b906101d791906110e8565b1490506101ee67adb0f8e971c6f00460c01b610da5565b6102026775ac95bff94d832360c01b610da5565b801561044f5761021c67b7ce1fa3f7f6604d60c01b610da5565b610230679fc1490a6707ce8260c01b610da5565b610244679cbd4322f03dcb3060c01b610da5565b600061025a677c50636fd0d78e6e60c01b610da5565b61026e67b6c96f6498872fdd60c01b610da5565b606061028467d225012c278bc14960c01b610da5565b888860009060208c8c90506102999190611057565b926102a693929190611095565b8101906102b391906112c6565b8096508193508294505050506102d367414eafbc10d5dfd460c01b610da5565b6102e7679735072f1875e8c560c01b610da5565b600085036104335761030367ece2f114e83cba5460c01b610da5565b61031767bb4b7709950fab6560c01b610da5565b61032b67e556fd7ed728116b60c01b610da5565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405161035391906113c2565b6000604051808303816000865af19150503d8060008114610390576040519150601f19603f3d011682016040523d82523d6000602084013e610395565b606091505b50915091506103ae675bb7adbcacc27af760c01b610da5565b6103c267925a11ac41b1a62f60c01b610da5565b81610418576103db674b9b350a0c4e240d60c01b610da5565b806040517f9d0d6e2d00000000000000000000000000000000000000000000000000000000815260040161040f9190611423565b60405180910390fd5b61042c67270a9300cfb5deb160c01b610da5565b5050610448565b6104476719ddea40eb9c9d5e60c01b610da5565b5b50506104bf565b610463671617c5f7b544c15460c01b610da5565b61047767152cf4f885c3c7bd60c01b610da5565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b6104d3678968ba2400116cd160c01b610da5565b6104e767d26f37fb13c4702060c01b610da5565b808015610504575061050367e672c6829c01435e60c01b610da8565b5b8061052b575060008311801561052a5750610529672f1034641526e8e560c01b610da8565b5b5b1561079b576105446787b8bb2f9d833b2360c01b610da5565b6105586748ed04b5790955de60c01b610da5565b61056c67c07d3098ed811b0e60c01b610da5565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b81526004016105a7929190611454565b602060405180830381865afa9250505080156105e157506040513d601f19601f820116820180604052508101906105de91906114dc565b60015b610668573d8060008114610611576040519150601f19603f3d011682016040523d82523d6000602084013e610616565b606091505b5061062b672c516c89798db2e060c01b610da5565b806040517f6f2a959900000000000000000000000000000000000000000000000000000000815260040161065f9190611423565b60405180910390fd5b61067c677a7dc9015ade993760c01b610da5565b610690676bd30bd513db1c1260c01b610da5565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161490506106f067f77b76e97cdda63e60c01b610da5565b61070467f2ac3b0c93d4d96060c01b610da5565b6000851480156107115750825b801561071b575086155b15610752576107346732203bac67e9a5c660c01b610da5565b61074867bacd05270bf834fa60c01b610da5565b806000526001601ffd5b61076667db508d98998fd4cb60c01b610da5565b61077a67bd809f1f7297a39860c01b610da5565b61078e671166c1324f0a4d4360c01b610da5565b8095505050505050610aa6565b6107af67fb73a16ec6f828a360c01b610da5565b6107c367124b4f67fba3948f60c01b610da5565b6107d767a72081e2c67a966a60c01b610da5565b6107eb670ab810c1358d671760c01b610da5565b60418787905014610831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108289061158c565b60405180910390fd5b61084567c0b4b2b739bdbc3e60c01b610da5565b610859670f81a533fa5be34e60c01b610da5565b61086d67657c1339b273a74660c01b610da5565b6000878760009060209261088393929190611095565b9061088e91906110e8565b90506108a467dc3d3b49fc92cadb60c01b610da5565b6108b86752ae34fa8263b21b60c01b610da5565b600088886020906040926108ce93929190611095565b906108d991906110e8565b90506108ef67301232fd22fb824c60c01b610da5565b61090367f519c889a1cef68c60c01b610da5565b600089896040818110610919576109186115ac565b5b9050013560f81c60f81b60f81c905061093c679a20c64fb3f7324360c01b610da5565b610950678a031af26ced764160c01b610da5565b601b8160ff16141580156109685750601c8160ff1614155b156109e45761098167cd922db48d204f9b60c01b610da5565b61099567833a8605e20290ce60c01b610da5565b6109a967b3da6c39eac2834e60c01b610da5565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db9061164d565b60405180910390fd5b6109f8675514297355562d4860c01b610da5565b610a0c6757b333f889b6e2b360c01b610da5565b610a20676603fc4d7122128560c01b610da5565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c83868660405160008152602001604052604051610a5a9493929190611689565b6020604051602081039080840390855afa158015610a7c573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6000610ac567a69e23ef0cf0d80560c01b610da5565b610ad96789508a17c1e5baf860c01b610da5565b610aed67f0e90fa9dac9b5a260c01b610da5565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401610b2f95949392919061170a565b6020604051808303816000875af1158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b72919061176d565b9050949350505050565b6000610b92678cc395c88e3ae24060c01b610da5565b610ba6670e6cd08ae62d699160c01b610da5565b610bba671a6d203d14bbeb3560c01b610da5565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401610bfc95949392919061170a565b6020604051808303816000875af1925050508015610c3857506040513d601f19601f82011682018060405250810190610c35919061176d565b60015b610d70573d8060008114610c68576040519150601f19603f3d011682016040523d82523d6000602084013e610c6d565b606091505b50610c826763fa3d4afb8cd55b60c01b610da5565b610c9667c78e77a5e38dc67760c01b610da5565b600081519050610cb067a2319ac582c5f8b960c01b610da5565b610cc4679d791f94f379b3d460c01b610da5565b60018103610d4457610ce0674b6df8afb2c0610f60c01b610da5565b610cf4671241dc8732fa093a60c01b610da5565b600160f81b82600081518110610d0d57610d0c6115ac565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050610d9d565b610d5867fb87cb9c02294f9f60c01b610da5565b610d6c6773311759eab4f85760c01b610da5565b8082fd5b610d84672f68b0ad8fd39c0a60c01b610da5565b610d9867ba867e4ef348d1a360c01b610da5565b809150505b949350505050565b50565b600060019050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610df282610dc7565b9050919050565b610e0281610de7565b8114610e0d57600080fd5b50565b600081359050610e1f81610df9565b92915050565b6000819050919050565b610e3881610e25565b8114610e4357600080fd5b50565b600081359050610e5581610e2f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e8057610e7f610e5b565b5b8235905067ffffffffffffffff811115610e9d57610e9c610e60565b5b602083019150836001820283011115610eb957610eb8610e65565b5b9250929050565b60008115159050919050565b610ed581610ec0565b8114610ee057600080fd5b50565b600081359050610ef281610ecc565b92915050565b600080600080600060808688031215610f1457610f13610dbd565b5b6000610f2288828901610e10565b9550506020610f3388828901610e46565b945050604086013567ffffffffffffffff811115610f5457610f53610dc2565b5b610f6088828901610e6a565b93509350506060610f7388828901610ee3565b9150509295509295909350565b610f8981610ec0565b82525050565b6000602082019050610fa46000830184610f80565b92915050565b60008060008060608587031215610fc457610fc3610dbd565b5b6000610fd287828801610e10565b9450506020610fe387828801610e46565b935050604085013567ffffffffffffffff81111561100457611003610dc2565b5b61101087828801610e6a565b925092505092959194509250565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110628261101e565b915061106d8361101e565b925082820390508181111561108557611084611028565b5b92915050565b600080fd5b600080fd5b600080858511156110a9576110a861108b565b5b838611156110ba576110b9611090565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006110f483836110d0565b826110ff8135610e25565b9250602082101561113f5761113a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026110db565b831692505b505092915050565b600061115282610dc7565b9050919050565b61116281611147565b811461116d57600080fd5b50565b60008135905061117f81611159565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111d38261118a565b810181811067ffffffffffffffff821117156111f2576111f161119b565b5b80604052505050565b6000611205610db3565b905061121182826111ca565b919050565b600067ffffffffffffffff8211156112315761123061119b565b5b61123a8261118a565b9050602081019050919050565b82818337600083830152505050565b600061126961126484611216565b6111fb565b90508281526020810184848401111561128557611284611185565b5b611290848285611247565b509392505050565b600082601f8301126112ad576112ac610e5b565b5b81356112bd848260208601611256565b91505092915050565b6000806000606084860312156112df576112de610dbd565b5b60006112ed86828701611170565b935050602084013567ffffffffffffffff81111561130e5761130d610dc2565b5b61131a86828701611298565b925050604084013567ffffffffffffffff81111561133b5761133a610dc2565b5b61134786828701611298565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561138557808201518184015260208101905061136a565b60008484015250505050565b600061139c82611351565b6113a6818561135c565b93506113b6818560208601611367565b80840191505092915050565b60006113ce8284611391565b915081905092915050565b600082825260208201905092915050565b60006113f582611351565b6113ff81856113d9565b935061140f818560208601611367565b6114188161118a565b840191505092915050565b6000602082019050818103600083015261143d81846113ea565b905092915050565b61144e81610e25565b82525050565b60006040820190506114696000830185611445565b818103602083015261147b81846113ea565b90509392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114b981611484565b81146114c457600080fd5b50565b6000815190506114d6816114b0565b92915050565b6000602082840312156114f2576114f1610dbd565b5b6000611500848285016114c7565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000611576603a83611509565b91506115818261151a565b604082019050919050565b600060208201905081810360008301526115a581611569565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000611637602d83611509565b9150611642826115db565b604082019050919050565b600060208201905081810360008301526116668161162a565b9050919050565b600060ff82169050919050565b6116838161166d565b82525050565b600060808201905061169e6000830187611445565b6116ab602083018661167a565b6116b86040830185611445565b6116c56060830184611445565b95945050505050565b6116d781610de7565b82525050565b60006116e983856113d9565b93506116f6838584611247565b6116ff8361118a565b840190509392505050565b600060808201905061171f60008301886116ce565b61172c6020830187611445565b818103604083015261173f8185876116dd565b905061174e6060830184610f80565b9695505050505050565b60008151905061176781610ecc565b92915050565b60006020828403121561178357611782610dbd565b5b600061179184828501611758565b9150509291505056fea2646970667358221220fea7e3a6d1ef133a8516dd849640b14a03ede64a5d55507f9e43dfb5c506244f64736f6c63430008110033"; + +type ValidateSigOffchainConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ValidateSigOffchainConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ValidateSigOffchain__factory extends ContractFactory { + constructor(...args: ValidateSigOffchainConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _signer, + _hash, + _signature, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + _signer, + _hash, + _signature, + overrides || {} + ); + } + override attach(address: string): ValidateSigOffchain { + return super.attach(address) as ValidateSigOffchain; + } + override connect(signer: Signer): ValidateSigOffchain__factory { + return super.connect(signer) as ValidateSigOffchain__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ValidateSigOffchainInterface { + return new utils.Interface(_abi) as ValidateSigOffchainInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ValidateSigOffchain { + return new Contract(address, _abi, signerOrProvider) as ValidateSigOffchain; + } +} diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts new file mode 100644 index 00000000..f20c4e90 --- /dev/null +++ b/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC1271Wallet__factory } from "./IERC1271Wallet__factory"; +export { UniversalSigValidator__factory } from "./UniversalSigValidator__factory"; +export { ValidateSigOffchain__factory } from "./ValidateSigOffchain__factory"; diff --git a/src/contracts/factories/src/test/index.ts b/src/contracts/factories/src/helpers/index.ts similarity index 51% rename from src/contracts/factories/src/test/index.ts rename to src/contracts/factories/src/helpers/index.ts index 3e95616c..2893d8f7 100644 --- a/src/contracts/factories/src/test/index.ts +++ b/src/contracts/factories/src/helpers/index.ts @@ -1,4 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { TestEtherspotWallet__factory } from "./TestEtherspotWallet__factory"; +export * as universalSignatureValidatorSol from "./UniversalSignatureValidator.sol"; diff --git a/src/contracts/factories/src/index.ts b/src/contracts/factories/src/index.ts index eb602088..445a11a2 100644 --- a/src/contracts/factories/src/index.ts +++ b/src/contracts/factories/src/index.ts @@ -2,9 +2,8 @@ /* tslint:disable */ /* eslint-disable */ export * as aa4337 from "./aa-4337"; -export * as backwardCompatibilityHelpers from "./backward_compatibility_helpers"; +export * as access from "./access"; +export * as helpers from "./helpers"; export * as interfaces from "./interfaces"; -export * as libs from "./libs"; export * as paymaster from "./paymaster"; -export * as test from "./test"; export * as wallet from "./wallet"; diff --git a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts b/src/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts similarity index 82% rename from src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts rename to src/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts index 30c9a1b4..66f5cd48 100644 --- a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/IPaymaster__factory.ts +++ b/src/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts @@ -5,11 +5,42 @@ import { Contract, Signer, utils } from "ethers"; import type { Provider } from "@ethersproject/providers"; import type { - IPaymaster, - IPaymasterInterface, -} from "../../../../src/interfaces/IEtherspotPaymaster.sol/IPaymaster"; + IEtherspotPaymaster, + IEtherspotPaymasterInterface, +} from "../../../src/interfaces/IEtherspotPaymaster"; const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool", + }, + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "userOpHash", + type: "bytes", + }, + ], + name: "SponsorTransaction", + type: "event", + }, { inputs: [ { @@ -115,7 +146,7 @@ const _abi = [ { inputs: [ { - internalType: "enum IPaymaster.PostOpMode", + internalType: "enum IEtherspotPaymaster.PostOpMode", name: "mode", type: "uint8", }, @@ -228,15 +259,15 @@ const _abi = [ }, ] as const; -export class IPaymaster__factory { +export class IEtherspotPaymaster__factory { static readonly abi = _abi; - static createInterface(): IPaymasterInterface { - return new utils.Interface(_abi) as IPaymasterInterface; + static createInterface(): IEtherspotPaymasterInterface { + return new utils.Interface(_abi) as IEtherspotPaymasterInterface; } static connect( address: string, signerOrProvider: Signer | Provider - ): IPaymaster { - return new Contract(address, _abi, signerOrProvider) as IPaymaster; + ): IEtherspotPaymaster { + return new Contract(address, _abi, signerOrProvider) as IEtherspotPaymaster; } } diff --git a/src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts b/src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts new file mode 100644 index 00000000..05876930 --- /dev/null +++ b/src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts @@ -0,0 +1,244 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IEtherspotWallet, + IEtherspotWalletInterface, +} from "../../../src/interfaces/IEtherspotWallet"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "EtherspotWalletInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "newOwner", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "blockFrom", + type: "uint256", + }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "removedOwner", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "blockFrom", + type: "uint256", + }, + ], + name: "OwnerRemoved", + type: "event", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +export class IEtherspotWallet__factory { + static readonly abi = _abi; + static createInterface(): IEtherspotWalletInterface { + return new utils.Interface(_abi) as IEtherspotWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IEtherspotWallet { + return new Contract(address, _abi, signerOrProvider) as IEtherspotWallet; + } +} diff --git a/src/contracts/factories/src/interfaces/index.ts b/src/contracts/factories/src/interfaces/index.ts index 2be29a4a..eca2632f 100644 --- a/src/contracts/factories/src/interfaces/index.ts +++ b/src/contracts/factories/src/interfaces/index.ts @@ -1,5 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as iEtherspotPaymasterSol from "./IEtherspotPaymaster.sol"; +export { IEtherspotPaymaster__factory } from "./IEtherspotPaymaster__factory"; +export { IEtherspotWallet__factory } from "./IEtherspotWallet__factory"; export { IWhitelist__factory } from "./IWhitelist__factory"; diff --git a/src/contracts/factories/src/libs/ValidationConstants__factory.ts b/src/contracts/factories/src/libs/ValidationConstants__factory.ts deleted file mode 100644 index 7a29ed6e..00000000 --- a/src/contracts/factories/src/libs/ValidationConstants__factory.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - ValidationConstants, - ValidationConstantsInterface, -} from "../../../src/libs/ValidationConstants"; - -const _abi = [ - { - inputs: [], - name: "ERC1271_INVALID_SIGNATURE", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ERC1271_VALID_MESSAGE_SIGNATURE", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ERC1820_ACCEPT_MAGIC", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x6103f6610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100615760003560e01c80634bdfa29d1461006657806369821c8c146100845780637bdd887c146100a2578063901f87c6146100c0578063ec38fa42146100de575b600080fd5b61006e6100fc565b60405161007b91906101e2565b60405180910390f35b61008c610107565b6040516100999190610216565b60405180910390f35b6100aa61012f565b6040516100b791906101e2565b60405180910390f35b6100c8610157565b6040516100d591906101e2565b60405180910390f35b6100e661017f565b6040516100f39190610216565b60405180910390f35b63ffffffff60e01b81565b60405160200161011690610288565b6040516020818303038152906040528051906020012081565b60405160200161013e906102e9565b6040516020818303038152906040528051906020012081565b6040516020016101669061034a565b6040516020818303038152906040528051906020012081565b60405160200161018e906103ab565b6040516020818303038152906040528051906020012081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6101dc816101a7565b82525050565b60006020820190506101f760008301846101d3565b92915050565b6000819050919050565b610210816101fd565b82525050565b600060208201905061022b6000830184610207565b92915050565b600081905092915050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000610272601583610231565b915061027d8261023c565b601582019050919050565b600061029382610265565b9150819050919050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b60006102d3601f83610231565b91506102de8261029d565b601f82019050919050565b60006102f4826102c6565b9150819050919050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000610334601d83610231565b915061033f826102fe565b601d82019050919050565b600061035582610327565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000610395601483610231565b91506103a08261035f565b601482019050919050565b60006103b682610388565b915081905091905056fea2646970667358221220d15890426055a306a3fcadff8bfa54c02417ef34b9d13496e6878aa77d588b9f64736f6c634300080c0033"; - -type ValidationConstantsConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ValidationConstantsConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ValidationConstants__factory extends ContractFactory { - constructor(...args: ValidationConstantsConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ValidationConstants { - return super.attach(address) as ValidationConstants; - } - override connect(signer: Signer): ValidationConstants__factory { - return super.connect(signer) as ValidationConstants__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ValidationConstantsInterface { - return new utils.Interface(_abi) as ValidationConstantsInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ValidationConstants { - return new Contract(address, _abi, signerOrProvider) as ValidationConstants; - } -} diff --git a/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts b/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts index 051d8f5d..b19273e5 100644 --- a/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts +++ b/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts @@ -698,7 +698,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523480156200001157600080fd5b50604051620035d0380380620035d08339818101604052810190620000379190620001de565b80620000586200004c6200009460201b60201c565b6200009c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000210565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001928262000165565b9050919050565b6000620001a68262000185565b9050919050565b620001b88162000199565b8114620001c457600080fd5b50565b600081519050620001d881620001ad565b92915050565b600060208284031215620001f757620001f662000160565b5b60006200020784828501620001c7565b91505092915050565b60805161336c620002646000396000818161056d015281816106100152818161090f0152818161094f015281816109d901528181610a6901528181610b0801528181610c390152611356015261336c6000f3fe60806040526004361061014b5760003560e01c8063a9a23409116100b6578063c399ec881161006f578063c399ec8814610480578063d0e30db0146104ab578063d672bd84146104b5578063e2c41dbc146104f2578063f2fde38b146104fc578063f465c77e146105255761014b565b8063a9a2340914610372578063b092145e1461039b578063b0d691fe146103d8578063b3154db014610403578063bb9fe6bf14610440578063c23a5cea146104575761014b565b80636b845bfe116101085780636b845bfe1461024d578063715018a6146102765780638da5cb5b1461028d57806394d4ad60146102b857806394e1fc19146102f85780639c90b443146103355761014b565b80630396cb60146101505780630a3b0a4f1461016c578063205c28781461019557806324efa264146101be57806329092d0e146101e75780633f514c2514610210575b600080fd5b61016a60048036038101906101659190611b7d565b610563565b005b34801561017857600080fd5b50610193600480360381019061018e9190611c08565b6105fa565b005b3480156101a157600080fd5b506101bc60048036038101906101b79190611ca9565b610606565b005b3480156101ca57600080fd5b506101e560048036038101906101e09190611d4e565b61069f565b005b3480156101f357600080fd5b5061020e60048036038101906102099190611c08565b610708565b005b34801561021c57600080fd5b5061023760048036038101906102329190611c08565b610714565b6040516102449190611daa565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d4e565b61072c565b005b34801561028257600080fd5b5061028b610795565b005b34801561029957600080fd5b506102a26107a9565b6040516102af9190611dd4565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190611e45565b6107d2565b6040516102ef9493929190611f11565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190611fa2565b610821565b60405161032c919061202a565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190611c08565b6108ac565b6040516103699190611daa565b60405180910390f35b34801561037e57600080fd5b506103996004803603810190610394919061206a565b6108c4565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906120de565b6108de565b6040516103cf9190612139565b60405180910390f35b3480156103e457600080fd5b506103ed61090d565b6040516103fa91906121b3565b60405180910390f35b34801561040f57600080fd5b5061042a600480360381019061042591906120de565b610931565b6040516104379190612139565b60405180910390f35b34801561044c57600080fd5b50610455610945565b005b34801561046357600080fd5b5061047e600480360381019061047991906121ce565b6109cf565b005b34801561048c57600080fd5b50610495610a65565b6040516104a29190611daa565b60405180910390f35b6104b3610b06565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190611c08565b610b94565b6040516104e99190611daa565b60405180910390f35b6104fa610bdd565b005b34801561050857600080fd5b50610523600480360381019061051e9190611c08565b610d1b565b005b34801561053157600080fd5b5061054c60048036038101906105479190612227565b610d9f565b60405161055a92919061230d565b60405180910390f35b61056b610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016105c5919061234c565b6000604051808303818588803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505050505050565b61060381610e40565b50565b61060e610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610669929190612376565b600060405180830381600087803b15801561068357600080fd5b505af1158015610697573d6000803e3d6000fd5b505050505050565b6106a98282610feb565b81816040516106b992919061245c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b6107118161103f565b50565b60026020528060005260406000206000915090505481565b61073682826111ea565b818160405161074692919061245c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b61079d610dc2565b6107a7600061123e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008036600085856014906054926107ec9392919061247f565b8101906107f991906124ba565b8094508195505050858560549080926108149392919061247f565b9150915092959194509250565b600061082c84611302565b46306003600061083b89611344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054868660405160200161088d969594939291906124fa565b6040516020818303038152906040528051906020012090509392505050565b60036020528060005260406000206000915090505481565b6108cc611354565b6108d8848484846113e4565b50505050565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061093d83836114e9565b905092915050565b61094d610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b50505050565b6109d7610dc2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610a309190612562565b600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac09190611dd4565b602060405180830381865afa158015610add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b019190612592565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610b609190611dd4565b6000604051808303818588803b158015610b7957600080fd5b505af1158015610b8d573d6000803e3d6000fd5b5050505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b343373ffffffffffffffffffffffffffffffffffffffff16311015610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90612642565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610c919190611dd4565b6000604051808303818588803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050505034600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d129190612691565b92505081905550565b610d23610dc2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90612759565b60405180910390fd5b610d9c8161123e565b50565b60606000610dab611354565b610db685858561157d565b91509150935093915050565b610dca611798565b73ffffffffffffffffffffffffffffffffffffffff16610de86107a9565b73ffffffffffffffffffffffffffffffffffffffff1614610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906127c5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790612831565b60405180910390fd5b610eba33826114e9565b15610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906128c3565b60405180910390fd5b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b60005b8282905081101561103a5761102983838381811061100f5761100e6128e3565b5b90506020020160208101906110249190611c08565b610e40565b8061103390612912565b9050610fee565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690612831565b60405180910390fd5b6110b933826114e9565b6110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906129cd565b60405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b60005b828290508110156112395761122883838381811061120e5761120d6128e3565b5b90506020020160208101906112239190611c08565b61103f565b8061123290612912565b90506111ed565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60603660008380610120019061131891906129fc565b915091508360208184030360405194506020810185016040528085528082602087013750505050919050565b6000808235905080915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990612aab565b60405180910390fd5b565b600080600085858101906113f89190612bec565b9250925092506000600281111561141257611411612c5b565b5b87600281111561142557611424612c5b565b5b14806114555750600160028111156114405761143f612c5b565b5b87600281111561145357611452612c5b565b5b145b156114a45761146483856117a0565b7f6037aec16210adc5ac3bd79d71a8b5e065e39248b6c2b7bf56205c017520a13583838360405161149793929190612c8a565b60405180910390a16114e0565b7fc62b7ae5a6b2e4bcc39074f040d2a98076ba08224858f7b5e476ead9bf3130d58383836040516114d793929190612c8a565b60405180910390a15b50505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000808036600061159f8980610120019061159a91906129fc565b6107d2565b935093509350935060408282905014806115bc5750604182829050145b6115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290612d60565b60405180910390fd5b600061161061160b8b8787610821565b6117fa565b90506003600061161f8c611344565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061166a90612912565b9190505550600061167a8b611344565b905060006116cc8386868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061182a565b90506116d881836114e9565b611709576116e860018888611851565b60405180602001604052806000815250909850985050505050505050611790565b8961171382610b94565b1015611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90612df2565b60405180910390fd5b80828d6040516020016117699392919061305b565b60405160208183030381529060405261178460008989611851565b98509850505050505050505b935093915050565b600033905090565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ef9190613099565b925050819055505050565b60008160405160200161180d9190613145565b604051602081830303815290604052805190602001209050919050565b6000806000611839858561188a565b91509150611846816118dc565b819250505092915050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561187957600061187c565b60015b60ff16171790509392505050565b6000806041835114156118cc5760008060006020860151925060408601519150606086015160001a90506118c087828585611a4a565b945094505050506118d5565b60006002915091505b9250929050565b600060048111156118f0576118ef612c5b565b5b81600481111561190357611902612c5b565b5b141561190e57611a47565b6001600481111561192257611921612c5b565b5b81600481111561193557611934612c5b565b5b1415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906131b7565b60405180910390fd5b6002600481111561198a57611989612c5b565b5b81600481111561199d5761199c612c5b565b5b14156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613223565b60405180910390fd5b600360048111156119f2576119f1612c5b565b5b816004811115611a0557611a04612c5b565b5b1415611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d906132b5565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611a85576000600391509150611b24565b600060018787878760405160008152602001604052604051611aaa94939291906132f1565b6020604051602081039080840390855afa158015611acc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b1b57600060019250925050611b24565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b611b5a81611b41565b8114611b6557600080fd5b50565b600081359050611b7781611b51565b92915050565b600060208284031215611b9357611b92611b37565b5b6000611ba184828501611b68565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd582611baa565b9050919050565b611be581611bca565b8114611bf057600080fd5b50565b600081359050611c0281611bdc565b92915050565b600060208284031215611c1e57611c1d611b37565b5b6000611c2c84828501611bf3565b91505092915050565b6000611c4082611baa565b9050919050565b611c5081611c35565b8114611c5b57600080fd5b50565b600081359050611c6d81611c47565b92915050565b6000819050919050565b611c8681611c73565b8114611c9157600080fd5b50565b600081359050611ca381611c7d565b92915050565b60008060408385031215611cc057611cbf611b37565b5b6000611cce85828601611c5e565b9250506020611cdf85828601611c94565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d0e57611d0d611ce9565b5b8235905067ffffffffffffffff811115611d2b57611d2a611cee565b5b602083019150836020820283011115611d4757611d46611cf3565b5b9250929050565b60008060208385031215611d6557611d64611b37565b5b600083013567ffffffffffffffff811115611d8357611d82611b3c565b5b611d8f85828601611cf8565b92509250509250929050565b611da481611c73565b82525050565b6000602082019050611dbf6000830184611d9b565b92915050565b611dce81611bca565b82525050565b6000602082019050611de96000830184611dc5565b92915050565b60008083601f840112611e0557611e04611ce9565b5b8235905067ffffffffffffffff811115611e2257611e21611cee565b5b602083019150836001820283011115611e3e57611e3d611cf3565b5b9250929050565b60008060208385031215611e5c57611e5b611b37565b5b600083013567ffffffffffffffff811115611e7a57611e79611b3c565b5b611e8685828601611def565b92509250509250929050565b600065ffffffffffff82169050919050565b611ead81611e92565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611ef08385611eb3565b9350611efd838584611ec4565b611f0683611ed3565b840190509392505050565b6000606082019050611f266000830187611ea4565b611f336020830186611ea4565b8181036040830152611f46818486611ee4565b905095945050505050565b600080fd5b60006101608284031215611f6d57611f6c611f51565b5b81905092915050565b611f7f81611e92565b8114611f8a57600080fd5b50565b600081359050611f9c81611f76565b92915050565b600080600060608486031215611fbb57611fba611b37565b5b600084013567ffffffffffffffff811115611fd957611fd8611b3c565b5b611fe586828701611f56565b9350506020611ff686828701611f8d565b925050604061200786828701611f8d565b9150509250925092565b6000819050919050565b61202481612011565b82525050565b600060208201905061203f600083018461201b565b92915050565b6003811061205257600080fd5b50565b60008135905061206481612045565b92915050565b6000806000806060858703121561208457612083611b37565b5b600061209287828801612055565b945050602085013567ffffffffffffffff8111156120b3576120b2611b3c565b5b6120bf87828801611def565b935093505060406120d287828801611c94565b91505092959194509250565b600080604083850312156120f5576120f4611b37565b5b600061210385828601611bf3565b925050602061211485828601611bf3565b9150509250929050565b60008115159050919050565b6121338161211e565b82525050565b600060208201905061214e600083018461212a565b92915050565b6000819050919050565b600061217961217461216f84611baa565b612154565b611baa565b9050919050565b600061218b8261215e565b9050919050565b600061219d82612180565b9050919050565b6121ad81612192565b82525050565b60006020820190506121c860008301846121a4565b92915050565b6000602082840312156121e4576121e3611b37565b5b60006121f284828501611c5e565b91505092915050565b61220481612011565b811461220f57600080fd5b50565b600081359050612221816121fb565b92915050565b6000806000606084860312156122405761223f611b37565b5b600084013567ffffffffffffffff81111561225e5761225d611b3c565b5b61226a86828701611f56565b935050602061227b86828701612212565b925050604061228c86828701611c94565b9150509250925092565b600081519050919050565b60005b838110156122bf5780820151818401526020810190506122a4565b838111156122ce576000848401525b50505050565b60006122df82612296565b6122e98185611eb3565b93506122f98185602086016122a1565b61230281611ed3565b840191505092915050565b6000604082019050818103600083015261232781856122d4565b90506123366020830184611d9b565b9392505050565b61234681611b41565b82525050565b6000602082019050612361600083018461233d565b92915050565b61237081611c35565b82525050565b600060408201905061238b6000830185612367565b6123986020830184611d9b565b9392505050565b600081905092915050565b6000819050919050565b6123bd81611bca565b82525050565b60006123cf83836123b4565b60208301905092915050565b60006123ea6020840184611bf3565b905092915050565b6000602082019050919050565b600061240b838561239f565b9350612416826123aa565b8060005b8581101561244f5761242c82846123db565b61243688826123c3565b9750612441836123f2565b92505060018101905061241a565b5085925050509392505050565b60006124698284866123ff565b91508190509392505050565b600080fd5b600080fd5b6000808585111561249357612492612475565b5b838611156124a4576124a361247a565b5b6001850283019150848603905094509492505050565b600080604083850312156124d1576124d0611b37565b5b60006124df85828601611f8d565b92505060206124f085828601611f8d565b9150509250929050565b600060c082019050818103600083015261251481896122d4565b90506125236020830188611d9b565b6125306040830187611dc5565b61253d6060830186611d9b565b61254a6080830185611ea4565b61255760a0830184611ea4565b979650505050505050565b60006020820190506125776000830184612367565b92915050565b60008151905061258c81611c7d565b92915050565b6000602082840312156125a8576125a7611b37565b5b60006125b68482850161257d565b91505092915050565b600082825260208201905092915050565b7f457468657273706f745061796d61737465723a3a204e6f7420656e6f7567682060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b600061262c6027836125bf565b9150612637826125d0565b604082019050919050565b6000602082019050818103600083015261265b8161261f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061269c82611c73565b91506126a783611c73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126dc576126db612662565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127436026836125bf565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127af6020836125bf565b91506127ba82612779565b602082019050919050565b600060208201905081810360008301526127de816127a2565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b600061281b6018836125bf565b9150612826826127e5565b602082019050919050565b6000602082019050818103600083015261284a8161280e565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b60006128ad602a836125bf565b91506128b882612851565b604082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061291d82611c73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129505761294f612662565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b60006129b76026836125bf565b91506129c28261295b565b604082019050919050565b600060208201905081810360008301526129e6816129aa565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612a1957612a186129ed565b5b80840192508235915067ffffffffffffffff821115612a3b57612a3a6129f2565b5b602083019250600182023603831315612a5757612a566129f7565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b6000612a956015836125bf565b9150612aa082612a5f565b602082019050919050565b60006020820190508181036000830152612ac481612a88565b9050919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b0882611ed3565b810181811067ffffffffffffffff82111715612b2757612b26612ad0565b5b80604052505050565b6000612b3a611b2d565b9050612b468282612aff565b919050565b600067ffffffffffffffff821115612b6657612b65612ad0565b5b612b6f82611ed3565b9050602081019050919050565b6000612b8f612b8a84612b4b565b612b30565b905082815260208101848484011115612bab57612baa612acb565b5b612bb6848285611ec4565b509392505050565b600082601f830112612bd357612bd2611ce9565b5b8135612be3848260208601612b7c565b91505092915050565b600080600060608486031215612c0557612c04611b37565b5b6000612c1386828701611c5e565b9350506020612c2486828701611c5e565b925050604084013567ffffffffffffffff811115612c4557612c44611b3c565b5b612c5186828701612bbe565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000606082019050612c9f6000830186611dc5565b612cac6020830185611dc5565b8181036040830152612cbe81846122d4565b9050949350505050565b7f457468657273706f745061796d61737465723a3a20696e76616c69642073696760008201527f6e6174757265206c656e67746820696e207061796d6173746572416e6444617460208201527f6100000000000000000000000000000000000000000000000000000000000000604082015250565b6000612d4a6041836125bf565b9150612d5582612cc8565b606082019050919050565b60006020820190508181036000830152612d7981612d3d565b9050919050565b7f457468657273706f745061796d61737465723a3a2053706f6e736f722070617960008201527f6d61737465722066756e647320746f6f206c6f77000000000000000000000000602082015250565b6000612ddc6034836125bf565b9150612de782612d80565b604082019050919050565b60006020820190508181036000830152612e0b81612dcf565b9050919050565b612e1b81611bca565b82525050565b6000612e306020840184611c94565b905092915050565b612e4181611c73565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e7357612e72612e51565b5b83810192508235915060208301925067ffffffffffffffff821115612e9b57612e9a612e47565b5b600182023603841315612eb157612eb0612e4c565b5b509250929050565b600082825260208201905092915050565b6000612ed68385612eb9565b9350612ee3838584611ec4565b612eec83611ed3565b840190509392505050565b60006101608301612f0b60008401846123db565b612f186000860182612e12565b50612f266020840184612e21565b612f336020860182612e38565b50612f416040840184612e56565b8583036040870152612f54838284612eca565b92505050612f656060840184612e56565b8583036060870152612f78838284612eca565b92505050612f896080840184612e21565b612f966080860182612e38565b50612fa460a0840184612e21565b612fb160a0860182612e38565b50612fbf60c0840184612e21565b612fcc60c0860182612e38565b50612fda60e0840184612e21565b612fe760e0860182612e38565b50612ff6610100840184612e21565b613004610100860182612e38565b50613013610120840184612e56565b858303610120870152613027838284612eca565b92505050613039610140840184612e56565b85830361014087015261304d838284612eca565b925050508091505092915050565b60006060820190506130706000830186611dc5565b61307d6020830185611dc5565b818103604083015261308f8184612ef7565b9050949350505050565b60006130a482611c73565b91506130af83611c73565b9250828210156130c2576130c1612662565b5b828203905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061310e601c836130cd565b9150613119826130d8565b601c82019050919050565b6000819050919050565b61313f61313a82612011565b613124565b82525050565b600061315082613101565b915061315c828461312e565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006131a16018836125bf565b91506131ac8261316b565b602082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061320d601f836125bf565b9150613218826131d7565b602082019050919050565b6000602082019050818103600083015261323c81613200565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061329f6022836125bf565b91506132aa82613243565b604082019050919050565b600060208201905081810360008301526132ce81613292565b9050919050565b600060ff82169050919050565b6132eb816132d5565b82525050565b6000608082019050613306600083018761201b565b61331360208301866132e2565b613320604083018561201b565b61332d606083018461201b565b9594505050505056fea264697066735822122082d8a299cdc816681d27f4d36004bdd8abb14cdceaf6392217b89db60ed145ac64736f6c634300080c0033"; + "0x60a06040523480156200001157600080fd5b50604051620043f2380380620043f2833981810160405281019062000037919062000238565b80620000586200004c620000e860201b60201c565b620000f060201b60201c565b6200007467aabb336c9ce83de860c01b620001b460201b60201c565b62000090672d07becd259a4ef060c01b620001b460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620000e1673e4021a7bb2f08f860c01b620001b760201b60201c565b506200026a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ec82620001bf565b9050919050565b60006200020082620001df565b9050919050565b6200021281620001f3565b81146200021e57600080fd5b50565b600081519050620002328162000207565b92915050565b600060208284031215620002515762000250620001ba565b5b6000620002618482850162000221565b91505092915050565b608051614134620002be600039600081816105d10152818161071401528181610bf301528181610cd301528181610dc101528181610e8d01528181610f68015281816111610152611cbd01526141346000f3fe60806040526004361061014b5760003560e01c8063a9a23409116100b6578063c399ec881161006f578063c399ec8814610480578063d0e30db0146104ab578063d672bd84146104b5578063e2c41dbc146104f2578063f2fde38b146104fc578063f465c77e146105255761014b565b8063a9a2340914610372578063b092145e1461039b578063b0d691fe146103d8578063b3154db014610403578063bb9fe6bf14610440578063c23a5cea146104575761014b565b80636b845bfe116101085780636b845bfe1461024d578063715018a6146102765780638da5cb5b1461028d57806394d4ad60146102b857806394e1fc19146102f85780639c90b443146103355761014b565b80630396cb60146101505780630a3b0a4f1461016c578063205c28781461019557806324efa264146101be57806329092d0e146101e75780633f514c2514610210575b600080fd5b61016a60048036038101906101659190612971565b610563565b005b34801561017857600080fd5b50610193600480360381019061018e91906129fc565b61065e565b005b3480156101a157600080fd5b506101bc60048036038101906101b79190612a9d565b6106a6565b005b3480156101ca57600080fd5b506101e560048036038101906101e09190612b42565b6107a3565b005b3480156101f357600080fd5b5061020e600480360381019061020991906129fc565b610870565b005b34801561021c57600080fd5b50610237600480360381019061023291906129fc565b6108b8565b6040516102449190612b9e565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612b42565b6108d0565b005b34801561028257600080fd5b5061028b61099d565b005b34801561029957600080fd5b506102a26109b1565b6040516102af9190612bc8565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190612c39565b6109da565b6040516102ef9493929190612d05565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190612d96565b610a65565b60405161032c9190612e1e565b60405180910390f35b34801561034157600080fd5b5061035c600480360381019061035791906129fc565b610b2c565b6040516103699190612b9e565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612e5e565b610b44565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612ed2565b610bc2565b6040516103cf9190612f2d565b60405180910390f35b3480156103e457600080fd5b506103ed610bf1565b6040516103fa9190612fa7565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612ed2565b610c15565b6040516104379190612f2d565b60405180910390f35b34801561044c57600080fd5b50610455610c65565b005b34801561046357600080fd5b5061047e60048036038101906104799190612fc2565b610d53565b005b34801561048c57600080fd5b50610495610e4d565b6040516104a29190612b9e565b60405180910390f35b6104b3610f2a565b005b3480156104c157600080fd5b506104dc60048036038101906104d791906129fc565b610ff4565b6040516104e99190612b9e565b60405180910390f35b6104fa611079565b005b34801561050857600080fd5b50610523600480360381019061051e91906129fc565b611257565b005b34801561053157600080fd5b5061054c6004803603810190610547919061301b565b6112da565b60405161055a9291906130f8565b60405180910390f35b61057767b8237d27482ab06b60c01b611361565b61057f611364565b61059367e2f107173549500460c01b611361565b6105a76701033209d47e5b2460c01b611361565b6105bb67dcd4652c61f0b32d60c01b611361565b6105cf67eae392c3eb511cc760c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630396cb6034836040518363ffffffff1660e01b81526004016106299190613137565b6000604051808303818588803b15801561064257600080fd5b505af1158015610656573d6000803e3d6000fd5b505050505050565b6106726768fbcdd46627a34e60c01b6113e2565b61068667e950b8730cb1b58f60c01b6113e2565b61069a676822b8740084191f60c01b6113e2565b6106a3816113e5565b50565b6106ba672907e6d97c3d1da360c01b611361565b6106c2611364565b6106d6678ac019c63563710260c01b611361565b6106ea67da1f1c840719888260c01b611361565b6106fe67bc135ce98e9f326f60c01b611361565b61071267532d977f60999f3e60c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b815260040161076d929190613161565b600060405180830381600087803b15801561078757600080fd5b505af115801561079b573d6000803e3d6000fd5b505050505050565b6107b76707adef802e0a2e9860c01b6113e2565b6107cb672181911124137b9960c01b6113e2565b6107df678b8d0d91af2d06b460c01b6113e2565b6107e9828261167f565b6107fd67ec3612479c894bff60c01b6113e2565b610811672a61664b3cb93b3760c01b6113e2565b8181604051610821929190613247565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b61088467a0e9ed3ffb65e58a60c01b6113e2565b6108986715dc3610bd6db11e60c01b6113e2565b6108ac676d6398be911915a360c01b6113e2565b6108b581611737565b50565b60026020528060005260406000206000915090505481565b6108e467b68f3f647d0a7baa60c01b6113e2565b6108f867387ee1435970e25960c01b6113e2565b61090c67db6581ef0a29e8be60c01b6113e2565b61091682826119d1565b61092a67dbeae8b6c5a5c02a60c01b6113e2565b61093e67f6f83aa73990787860c01b6113e2565b818160405161094e929190613247565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b6109a5611364565b6109af6000611a89565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000803660006109f4675066d7016b397fd560c01b611b4d565b610a0867492fd7960809671d60c01b611b4d565b8585601490605492610a1c9392919061326a565b810190610a2991906132a5565b8094508195505050610a456775d6af213f83fea060c01b611b4d565b85856054908092610a589392919061326a565b9150915092959194509250565b6000610a7b67ff63f184687ca01360c01b611b4d565b610a8f673fcd560a581633d160c01b611b4d565b610aa367994c224002748e4260c01b611b4d565b610aac84611b50565b463060036000610abb89611be2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548686604051602001610b0d969594939291906132e5565b6040516020818303038152906040528051906020012090509392505050565b60036020528060005260406000206000915090505481565b610b58672cf57c41b8b89fcb60c01b611361565b610b6c6799497fbe705cd9f760c01b611361565b610b80679b4512fe9e58bae960c01b611361565b610b88611c6b565b610b9c6793ce2f3709fe770560c01b611361565b610bb06790067c65a6f5d3a860c01b611361565b610bbc84848484611d5f565b50505050565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c2b6737270a3c93cb375f60c01b6113e2565b610c3f67ba652b04f341019160c01b6113e2565b610c5367a94b6553035184dc60c01b6113e2565b610c5d8383611fa0565b905092915050565b610c7967ec8a9719e7b677d060c01b611361565b610c81611364565b610c9567672cc496b6067cea60c01b611361565b610ca9674fdbd001b77629ae60c01b611361565b610cbd677362eae3491c0ae160c01b611361565b610cd16797f9e99fb1d4b33860c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d3957600080fd5b505af1158015610d4d573d6000803e3d6000fd5b50505050565b610d6767c9ef1b986fb51fe860c01b611361565b610d6f611364565b610d8367de53cad8928d67f560c01b611361565b610d97677af1d989d252676f60c01b611361565b610dab676fd423196847dbb160c01b611361565b610dbf67097023434434ee0460c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c23a5cea826040518263ffffffff1660e01b8152600401610e18919061334d565b600060405180830381600087803b158015610e3257600080fd5b505af1158015610e46573d6000803e3d6000fd5b5050505050565b6000610e6367f6be01970597753160c01b611361565b610e77673f87ae81816372b460c01b611361565b610e8b67bd328ab4ce68c2fb60c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ee49190612bc8565b602060405180830381865afa158015610f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f25919061337d565b905090565b610f3e673943ebd1bec8d2d660c01b611361565b610f526702fc4196924a47ac60c01b611361565b610f66675d10604969f00bcf60c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610fc09190612bc8565b6000604051808303818588803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b5050505050565b600061100a671d5a92dc3d62472760c01b611b4d565b61101e67e2e987d6d47a3e5f60c01b611b4d565b611032677e5b33b9ae6449b260c01b611b4d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108d67b517d11b87774b5760c01b611b4d565b6110a167ff5530e7d96ea83560c01b611b4d565b6110b567420a39ce0db2275660c01b611b4d565b6110c967893e65cf2303526660c01b611b4d565b343373ffffffffffffffffffffffffffffffffffffffff16311015611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a9061342d565b60405180910390fd5b6111376701536c827eca2fa460c01b611b4d565b61114b6776c10d6abb07d10060c01b611b4d565b61115f67a8f111ee7b6a0d8460c01b611b4d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016111b99190612bc8565b6000604051808303818588803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b50505050506111ff67827a828c968235ad60c01b611b4d565b34600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461124e919061347c565b92505081905550565b61125f611364565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613522565b60405180910390fd5b6112d781611a89565b50565b606060006112f26791cf27427781cd8860c01b611361565b611306676434b0ee41880ab260c01b611361565b61131a67f2c91afe86e9062d60c01b611361565b611322611c6b565b6113366723ccedb6dfbcc30860c01b611361565b61134a67287492035946b96c60c01b611361565b611355858585612070565b91509150935093915050565b50565b61136c6124d8565b73ffffffffffffffffffffffffffffffffffffffff1661138a6109b1565b73ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d79061358e565b60405180910390fd5b565b50565b6113f967f6a2620fc42edd1760c01b6113e2565b61140d67ca63df303fe2df8860c01b6113e2565b61142167352da4c31005e24560c01b6113e2565b611435673f86da22427dbe4060c01b6113e2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b906135fa565b60405180910390fd5b6114b86778e0839bb2cbb2be60c01b6113e2565b6114cc67e3ed4ba1d2acc9a660c01b6113e2565b6114e06710a918d4825dcb3160c01b6113e2565b6114f4671611f3e3c7f468b260c01b6113e2565b6114fe3382611fa0565b1561153e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115359061368c565b60405180910390fd5b611552672cf2db8e498b9a4060c01b6113e2565b61156667e2beeed4b16b742360c01b6113e2565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061160e6724fa5d1e03c3b43660c01b6113e2565b611622671fdbb6994253167760c01b6113e2565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b611693678376c0d944a0b59a60c01b6113e2565b6116a76788b76bc0b253991860c01b6113e2565b6116bb67b46c304ed5c3a77860c01b6113e2565b60005b82829050811015611732576116dd679b7aa25078b5327660c01b6113e2565b6116f167cddae10e49d1ed7960c01b6113e2565b611721838383818110611707576117066136ac565b5b905060200201602081019061171c91906129fc565b6113e5565b8061172b906136db565b90506116be565b505050565b61174b6794c4d5b68d93d5dd60c01b6113e2565b61175f67625d2f9b353ccbe160c01b6113e2565b611773675f283196510ff2eb60c01b6113e2565b611787670d578a868b76e17860c01b6113e2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed906135fa565b60405180910390fd5b61180a67600c63ec3774ea3060c01b6113e2565b61181e677c4a0956700e03d660c01b6113e2565b61183267c755349d16f220ad60c01b6113e2565b6118466729a4d9e32ce2015e60c01b6113e2565b6118503382611fa0565b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613795565b60405180910390fd5b6118a36753142b83d2ebe5af60c01b6113e2565b6118b76775480db2b4564bbf60c01b6113e2565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611960675a1f8dd94b9370bc60c01b6113e2565b6119746735cba46e43b8488e60c01b6113e2565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b6119e56719cc2cfe1cc5e5f160c01b6113e2565b6119f967342f0338077b971c60c01b6113e2565b611a0d6741448bb72f9be57960c01b6113e2565b60005b82829050811015611a8457611a2f67d6cc022c17f3262d60c01b6113e2565b611a43674199b6b9dd7e5c7b60c01b6113e2565b611a73838383818110611a5957611a586136ac565b5b9050602002016020810190611a6e91906129fc565b611737565b80611a7d906136db565b9050611a10565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50565b6060611b666793e6a0eb90ab16d160c01b611b4d565b611b7a67c11ea9dfd67b55cb60c01b611b4d565b611b8e673a7557547af90a9860c01b611b4d565b36600083806101200190611ba291906137c4565b91509150611bba67fecd7d3a778a531760c01b611b4d565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b6000611bf867e1c1c6be6d21e0b660c01b6124e0565b611c0c67169e881823fa915860c01b6124e0565b611c20675cfc74aca58d577760c01b6124e0565b6000611c3667ee6cead2c727cb3b60c01b6124e0565b82359050611c4e67d47ac8b49cb9c10f60c01b6124e0565b611c6267f19fd641611eb47860c01b6124e0565b80915050919050565b611c7f6793fe0ed3ca04f82b60c01b611361565b611c93678abd782107e62dce60c01b611361565b611ca767b9c2ce2852bf0cf360c01b611361565b611cbb67f8314810c2ffd6e460c01b611361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090613873565b60405180910390fd5b611d5d677eb1fed1a5060b5e60c01b611361565b565b611d73675c46cfe932e3730760c01b611b4d565b611d8767beb804bfecac7f5660c01b611b4d565b611d9b67fcb74c9dad5990bd60c01b611b4d565b60008060008585810190611daf91906139b4565b925092509250611dc9672e95d65385e6a6be60c01b611b4d565b611ddd67ecd4958bb9c8324a60c01b611b4d565b60006002811115611df157611df0613a23565b5b876002811115611e0457611e03613a23565b5b148015611e215750611e206795e4a38b361dcce860c01b6124e3565b5b80611e6c575060016002811115611e3b57611e3a613a23565b5b876002811115611e4e57611e4d613a23565b5b148015611e6b5750611e6a676c9c723b5c7d575060c01b6124e3565b5b5b15611f1f57611e85677b28dd4e3aa12c6f60c01b611b4d565b611e9967877a6c9286da882e60c01b611b4d565b611ead672df1bce029bf9b2160c01b611b4d565b611eb783856124ee565b611ecb67b157f4a7fa193b0760c01b611b4d565b611edf672ca69331f33f9c6d60c01b611b4d565b7f6037aec16210adc5ac3bd79d71a8b5e065e39248b6c2b7bf56205c017520a135838383604051611f1293929190613a52565b60405180910390a1611f97565b611f33675073db827ba793d260c01b611b4d565b611f47676f6e8faeaec1457360c01b611b4d565b611f5b67e901ccc83b523d7060c01b611b4d565b7fc62b7ae5a6b2e4bcc39074f040d2a98076ba08224858f7b5e476ead9bf3130d5838383604051611f8e93929190613a52565b60405180910390a15b50505050505050565b6000611fb667ff68de7f5bdc8c8d60c01b6113e2565b611fca67587050cc7807119260c01b6113e2565b611fde67805332d6332991fc60c01b6113e2565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600061208867e7aa9260facc3e5260c01b611b4d565b61209c6727c4ffd8da57368760c01b611b4d565b6120b067c4c713a98f5824ea60c01b611b4d565b6120c467e6abc8098f21d38060c01b611b4d565b6000803660006120e3898061012001906120de91906137c4565b6109da565b93509350935093506120ff67c039378e243f79fa60c01b611b4d565b612113674ae8c37e74bbeba660c01b611b4d565b612127670c57fb675b497cec60c01b611b4d565b60408282905014801561214a575061214967bb7e7869378b775960c01b6124e3565b5b8061217457506041828290501480156121735750612172676d2d64352a7ed32360c01b6124e3565b5b5b6121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613b28565b60405180910390fd5b6121c767f3742c4f71130fde60c01b611b4d565b6121db675128b6d8c5268a1660c01b611b4d565b6121ef67d8bb93e9a6e07ab560c01b611b4d565b60006122046121ff8b8787610a65565b612570565b905061221a6707b93999f935673360c01b611b4d565b61222e6783d16502464b989b60c01b611b4d565b60006122398b611be2565b905061224f67b2756fa42e996e5460c01b611b4d565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061229f906136db565b91905055506122b86768d775dc4e1b731460c01b611b4d565b6122cc678d278ed541d0454360c01b611b4d565b600061231c8386868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506125a0565b9050612332671de510ee68b0690c60c01b611b4d565b6123466791f95c866919c9a660c01b611b4d565b6123508183611fa0565b6123bd5761236867eaa1da0ae41ea98e60c01b611b4d565b61237c67a1071e77d4f84b7f60c01b611b4d565b612390678a6f8988f33ee69160c01b611b4d565b61239c600188886125c7565b604051806020016040528060008152509098509850505050505050506124d0565b6123d1673a67622cebeb3a2a60c01b611b4d565b6123e56747902a32e710db3a60c01b611b4d565b6123f9670ff243f896f6d35360c01b611b4d565b61240d677d32948165c0fab560c01b611b4d565b8961241782610ff4565b1015612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90613bba565b60405180910390fd5b61246c67c3472f061d91b18b60c01b611b4d565b61248067b5721d539e35a91960c01b611b4d565b61249467f1a30a50509ce09860c01b611b4d565b80828d6040516020016124a993929190613e23565b6040516020818303038152906040526124c4600089896125c7565b98509850505050505050505b935093915050565b600033905090565b50565b600060019050919050565b612502674576406fb6d11c4560c01b611b4d565b612516672fa75d1eda0e385860c01b611b4d565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125659190613e61565b925050819055505050565b6000816040516020016125839190613f0d565b604051602081830303815290604052805190602001209050919050565b60008060006125af8585612673565b915091506125bc816126c4565b819250505092915050565b60006125dd67f46661bb4e8bad1e60c01b61282a565b6125f167ad115cf58922913f60c01b61282a565b61260567e939de70e4ee463c60c01b61282a565b60d08265ffffffffffff16901b60a08465ffffffffffff16901b85801561263c575061263b675d24490627414a1d60c01b61282d565b5b8061265757506126566748f460bd74afa2fc60c01b612838565b5b612662576000612665565b60015b60ff16171790509392505050565b60008060418351036126b45760008060006020860151925060408601519150606086015160001a90506126a88782858561283f565b945094505050506126bd565b60006002915091505b9250929050565b600060048111156126d8576126d7613a23565b5b8160048111156126eb576126ea613a23565b5b0315612827576001600481111561270557612704613a23565b5b81600481111561271857612717613a23565b5b03612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90613f7f565b60405180910390fd5b6002600481111561276c5761276b613a23565b5b81600481111561277f5761277e613a23565b5b036127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690613feb565b60405180910390fd5b600360048111156127d3576127d2613a23565b5b8160048111156127e6576127e5613a23565b5b03612826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281d9061407d565b60405180910390fd5b5b50565b50565b600060019050919050565b6000919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561287a576000600391509150612918565b60006001878787876040516000815260200160405260405161289f94939291906140b9565b6020604051602081039080840390855afa1580156128c1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290f57600060019250925050612918565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b61294e81612935565b811461295957600080fd5b50565b60008135905061296b81612945565b92915050565b6000602082840312156129875761298661292b565b5b60006129958482850161295c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129c98261299e565b9050919050565b6129d9816129be565b81146129e457600080fd5b50565b6000813590506129f6816129d0565b92915050565b600060208284031215612a1257612a1161292b565b5b6000612a20848285016129e7565b91505092915050565b6000612a348261299e565b9050919050565b612a4481612a29565b8114612a4f57600080fd5b50565b600081359050612a6181612a3b565b92915050565b6000819050919050565b612a7a81612a67565b8114612a8557600080fd5b50565b600081359050612a9781612a71565b92915050565b60008060408385031215612ab457612ab361292b565b5b6000612ac285828601612a52565b9250506020612ad385828601612a88565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b0257612b01612add565b5b8235905067ffffffffffffffff811115612b1f57612b1e612ae2565b5b602083019150836020820283011115612b3b57612b3a612ae7565b5b9250929050565b60008060208385031215612b5957612b5861292b565b5b600083013567ffffffffffffffff811115612b7757612b76612930565b5b612b8385828601612aec565b92509250509250929050565b612b9881612a67565b82525050565b6000602082019050612bb36000830184612b8f565b92915050565b612bc2816129be565b82525050565b6000602082019050612bdd6000830184612bb9565b92915050565b60008083601f840112612bf957612bf8612add565b5b8235905067ffffffffffffffff811115612c1657612c15612ae2565b5b602083019150836001820283011115612c3257612c31612ae7565b5b9250929050565b60008060208385031215612c5057612c4f61292b565b5b600083013567ffffffffffffffff811115612c6e57612c6d612930565b5b612c7a85828601612be3565b92509250509250929050565b600065ffffffffffff82169050919050565b612ca181612c86565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000612ce48385612ca7565b9350612cf1838584612cb8565b612cfa83612cc7565b840190509392505050565b6000606082019050612d1a6000830187612c98565b612d276020830186612c98565b8181036040830152612d3a818486612cd8565b905095945050505050565b600080fd5b60006101608284031215612d6157612d60612d45565b5b81905092915050565b612d7381612c86565b8114612d7e57600080fd5b50565b600081359050612d9081612d6a565b92915050565b600080600060608486031215612daf57612dae61292b565b5b600084013567ffffffffffffffff811115612dcd57612dcc612930565b5b612dd986828701612d4a565b9350506020612dea86828701612d81565b9250506040612dfb86828701612d81565b9150509250925092565b6000819050919050565b612e1881612e05565b82525050565b6000602082019050612e336000830184612e0f565b92915050565b60038110612e4657600080fd5b50565b600081359050612e5881612e39565b92915050565b60008060008060608587031215612e7857612e7761292b565b5b6000612e8687828801612e49565b945050602085013567ffffffffffffffff811115612ea757612ea6612930565b5b612eb387828801612be3565b93509350506040612ec687828801612a88565b91505092959194509250565b60008060408385031215612ee957612ee861292b565b5b6000612ef7858286016129e7565b9250506020612f08858286016129e7565b9150509250929050565b60008115159050919050565b612f2781612f12565b82525050565b6000602082019050612f426000830184612f1e565b92915050565b6000819050919050565b6000612f6d612f68612f638461299e565b612f48565b61299e565b9050919050565b6000612f7f82612f52565b9050919050565b6000612f9182612f74565b9050919050565b612fa181612f86565b82525050565b6000602082019050612fbc6000830184612f98565b92915050565b600060208284031215612fd857612fd761292b565b5b6000612fe684828501612a52565b91505092915050565b612ff881612e05565b811461300357600080fd5b50565b60008135905061301581612fef565b92915050565b6000806000606084860312156130345761303361292b565b5b600084013567ffffffffffffffff81111561305257613051612930565b5b61305e86828701612d4a565b935050602061306f86828701613006565b925050604061308086828701612a88565b9150509250925092565b600081519050919050565b60005b838110156130b3578082015181840152602081019050613098565b60008484015250505050565b60006130ca8261308a565b6130d48185612ca7565b93506130e4818560208601613095565b6130ed81612cc7565b840191505092915050565b6000604082019050818103600083015261311281856130bf565b90506131216020830184612b8f565b9392505050565b61313181612935565b82525050565b600060208201905061314c6000830184613128565b92915050565b61315b81612a29565b82525050565b60006040820190506131766000830185613152565b6131836020830184612b8f565b9392505050565b600081905092915050565b6000819050919050565b6131a8816129be565b82525050565b60006131ba838361319f565b60208301905092915050565b60006131d560208401846129e7565b905092915050565b6000602082019050919050565b60006131f6838561318a565b935061320182613195565b8060005b8581101561323a5761321782846131c6565b61322188826131ae565b975061322c836131dd565b925050600181019050613205565b5085925050509392505050565b60006132548284866131ea565b91508190509392505050565b600080fd5b600080fd5b6000808585111561327e5761327d613260565b5b8386111561328f5761328e613265565b5b6001850283019150848603905094509492505050565b600080604083850312156132bc576132bb61292b565b5b60006132ca85828601612d81565b92505060206132db85828601612d81565b9150509250929050565b600060c08201905081810360008301526132ff81896130bf565b905061330e6020830188612b8f565b61331b6040830187612bb9565b6133286060830186612b8f565b6133356080830185612c98565b61334260a0830184612c98565b979650505050505050565b60006020820190506133626000830184613152565b92915050565b60008151905061337781612a71565b92915050565b6000602082840312156133935761339261292b565b5b60006133a184828501613368565b91505092915050565b600082825260208201905092915050565b7f457468657273706f745061796d61737465723a3a204e6f7420656e6f7567682060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b60006134176027836133aa565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061348782612a67565b915061349283612a67565b92508282019050808211156134aa576134a961344d565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061350c6026836133aa565b9150613517826134b0565b604082019050919050565b6000602082019050818103600083015261353b816134ff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135786020836133aa565b915061358382613542565b602082019050919050565b600060208201905081810360008301526135a78161356b565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b60006135e46018836133aa565b91506135ef826135ae565b602082019050919050565b60006020820190508181036000830152613613816135d7565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b6000613676602a836133aa565b91506136818261361a565b604082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006136e682612a67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137185761371761344d565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b600061377f6026836133aa565b915061378a82613723565b604082019050919050565b600060208201905081810360008301526137ae81613772565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126137e1576137e06137b5565b5b80840192508235915067ffffffffffffffff821115613803576138026137ba565b5b60208301925060018202360383131561381f5761381e6137bf565b5b509250929050565b7f53656e646572206e6f7420456e747279506f696e740000000000000000000000600082015250565b600061385d6015836133aa565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138d082612cc7565b810181811067ffffffffffffffff821117156138ef576138ee613898565b5b80604052505050565b6000613902612921565b905061390e82826138c7565b919050565b600067ffffffffffffffff82111561392e5761392d613898565b5b61393782612cc7565b9050602081019050919050565b600061395761395284613913565b6138f8565b90508281526020810184848401111561397357613972613893565b5b61397e848285612cb8565b509392505050565b600082601f83011261399b5761399a612add565b5b81356139ab848260208601613944565b91505092915050565b6000806000606084860312156139cd576139cc61292b565b5b60006139db86828701612a52565b93505060206139ec86828701612a52565b925050604084013567ffffffffffffffff811115613a0d57613a0c612930565b5b613a1986828701613986565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000606082019050613a676000830186612bb9565b613a746020830185612bb9565b8181036040830152613a8681846130bf565b9050949350505050565b7f457468657273706f745061796d61737465723a3a20696e76616c69642073696760008201527f6e6174757265206c656e67746820696e207061796d6173746572416e6444617460208201527f6100000000000000000000000000000000000000000000000000000000000000604082015250565b6000613b126041836133aa565b9150613b1d82613a90565b606082019050919050565b60006020820190508181036000830152613b4181613b05565b9050919050565b7f457468657273706f745061796d61737465723a3a2053706f6e736f722070617960008201527f6d61737465722066756e647320746f6f206c6f77000000000000000000000000602082015250565b6000613ba46034836133aa565b9150613baf82613b48565b604082019050919050565b60006020820190508181036000830152613bd381613b97565b9050919050565b613be3816129be565b82525050565b6000613bf86020840184612a88565b905092915050565b613c0981612a67565b82525050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112613c3b57613c3a613c19565b5b83810192508235915060208301925067ffffffffffffffff821115613c6357613c62613c0f565b5b600182023603831315613c7957613c78613c14565b5b509250929050565b600082825260208201905092915050565b6000613c9e8385613c81565b9350613cab838584612cb8565b613cb483612cc7565b840190509392505050565b60006101608301613cd360008401846131c6565b613ce06000860182613bda565b50613cee6020840184613be9565b613cfb6020860182613c00565b50613d096040840184613c1e565b8583036040870152613d1c838284613c92565b92505050613d2d6060840184613c1e565b8583036060870152613d40838284613c92565b92505050613d516080840184613be9565b613d5e6080860182613c00565b50613d6c60a0840184613be9565b613d7960a0860182613c00565b50613d8760c0840184613be9565b613d9460c0860182613c00565b50613da260e0840184613be9565b613daf60e0860182613c00565b50613dbe610100840184613be9565b613dcc610100860182613c00565b50613ddb610120840184613c1e565b858303610120870152613def838284613c92565b92505050613e01610140840184613c1e565b858303610140870152613e15838284613c92565b925050508091505092915050565b6000606082019050613e386000830186612bb9565b613e456020830185612bb9565b8181036040830152613e578184613cbf565b9050949350505050565b6000613e6c82612a67565b9150613e7783612a67565b9250828203905081811115613e8f57613e8e61344d565b5b92915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613ed6601c83613e95565b9150613ee182613ea0565b601c82019050919050565b6000819050919050565b613f07613f0282612e05565b613eec565b82525050565b6000613f1882613ec9565b9150613f248284613ef6565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613f696018836133aa565b9150613f7482613f33565b602082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613fd5601f836133aa565b9150613fe082613f9f565b602082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006140676022836133aa565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b600060ff82169050919050565b6140b38161409d565b82525050565b60006080820190506140ce6000830187612e0f565b6140db60208301866140aa565b6140e86040830185612e0f565b6140f56060830184612e0f565b9594505050505056fea26469706673582212200a392a9f0528b1d1c7ad45546f570727ae137de6cf9efb9ea32803f77d3cbc7764736f6c63430008110033"; type EtherspotPaymasterConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/paymaster/Whitelist__factory.ts b/src/contracts/factories/src/paymaster/Whitelist__factory.ts index cda3c6f1..6f53a23b 100644 --- a/src/contracts/factories/src/paymaster/Whitelist__factory.ts +++ b/src/contracts/factories/src/paymaster/Whitelist__factory.ts @@ -260,7 +260,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610fb98061010d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a6146101085780638da5cb5b14610112578063b092145e14610130578063b3154db014610160578063f2fde38b1461019057610093565b80630a3b0a4f1461009857806324efa264146100b457806329092d0e146100d05780636b845bfe146100ec575b600080fd5b6100b260048036038101906100ad91906109de565b6101ac565b005b6100ce60048036038101906100c99190610a70565b6101b8565b005b6100ea60048036038101906100e591906109de565b610221565b005b61010660048036038101906101019190610a70565b61022d565b005b610110610296565b005b61011a6102aa565b6040516101279190610acc565b60405180910390f35b61014a60048036038101906101459190610ae7565b6102d3565b6040516101579190610b42565b60405180910390f35b61017a60048036038101906101759190610ae7565b610302565b6040516101879190610b42565b60405180910390f35b6101aa60048036038101906101a591906109de565b610316565b005b6101b58161039a565b50565b6101c28282610545565b81816040516101d2929190610c1a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b61022a81610599565b50565b6102378282610744565b8181604051610247929190610c1a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b61029e610798565b6102a86000610816565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600061030e83836108da565b905092915050565b61031e610798565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561038e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038590610cb6565b60405180910390fd5b61039781610816565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561040a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040190610d22565b60405180910390fd5b61041433826108da565b15610454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044b90610db4565b60405180910390fd5b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b60005b828290508110156105945761058383838381811061056957610568610dd4565b5b905060200201602081019061057e91906109de565b61039a565b8061058d90610e3c565b9050610548565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090610d22565b60405180910390fd5b61061333826108da565b610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064990610ef7565b60405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b60005b828290508110156107935761078283838381811061076857610767610dd4565b5b905060200201602081019061077d91906109de565b610599565b8061078c90610e3c565b9050610747565b505050565b6107a061096e565b73ffffffffffffffffffffffffffffffffffffffff166107be6102aa565b73ffffffffffffffffffffffffffffffffffffffff1614610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b90610f63565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109ab82610980565b9050919050565b6109bb816109a0565b81146109c657600080fd5b50565b6000813590506109d8816109b2565b92915050565b6000602082840312156109f4576109f3610976565b5b6000610a02848285016109c9565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610a3057610a2f610a0b565b5b8235905067ffffffffffffffff811115610a4d57610a4c610a10565b5b602083019150836020820283011115610a6957610a68610a15565b5b9250929050565b60008060208385031215610a8757610a86610976565b5b600083013567ffffffffffffffff811115610aa557610aa461097b565b5b610ab185828601610a1a565b92509250509250929050565b610ac6816109a0565b82525050565b6000602082019050610ae16000830184610abd565b92915050565b60008060408385031215610afe57610afd610976565b5b6000610b0c858286016109c9565b9250506020610b1d858286016109c9565b9150509250929050565b60008115159050919050565b610b3c81610b27565b82525050565b6000602082019050610b576000830184610b33565b92915050565b600081905092915050565b6000819050919050565b610b7b816109a0565b82525050565b6000610b8d8383610b72565b60208301905092915050565b6000610ba860208401846109c9565b905092915050565b6000602082019050919050565b6000610bc98385610b5d565b9350610bd482610b68565b8060005b85811015610c0d57610bea8284610b99565b610bf48882610b81565b9750610bff83610bb0565b925050600181019050610bd8565b5085925050509392505050565b6000610c27828486610bbd565b91508190509392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610ca0602683610c33565b9150610cab82610c44565b604082019050919050565b60006020820190508181036000830152610ccf81610c93565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b6000610d0c601883610c33565b9150610d1782610cd6565b602082019050919050565b60006020820190508181036000830152610d3b81610cff565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b6000610d9e602a83610c33565b9150610da982610d42565b604082019050919050565b60006020820190508181036000830152610dcd81610d91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610e4782610e32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610e7a57610e79610e03565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b6000610ee1602683610c33565b9150610eec82610e85565b604082019050919050565b60006020820190508181036000830152610f1081610ed4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610f4d602083610c33565b9150610f5882610f17565b602082019050919050565b60006020820190508181036000830152610f7c81610f40565b905091905056fea264697066735822122052a5630e8f7125b7b50671b5cd9fbfe51cd3fb706eeb6ca6673ed3cbd618a91864736f6c634300080c0033"; + "0x608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114188061010d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a6146101085780638da5cb5b14610112578063b092145e14610130578063b3154db014610160578063f2fde38b1461019057610093565b80630a3b0a4f1461009857806324efa264146100b457806329092d0e146100d05780636b845bfe146100ec575b600080fd5b6100b260048036038101906100ad9190610e3e565b6101ac565b005b6100ce60048036038101906100c99190610ed0565b6101f4565b005b6100ea60048036038101906100e59190610e3e565b6102c1565b005b61010660048036038101906101019190610ed0565b610309565b005b6101106103d6565b005b61011a6103ea565b6040516101279190610f2c565b60405180910390f35b61014a60048036038101906101459190610f47565b610413565b6040516101579190610fa2565b60405180910390f35b61017a60048036038101906101759190610f47565b610442565b6040516101879190610fa2565b60405180910390f35b6101aa60048036038101906101a59190610e3e565b610492565b005b6101c06768fbcdd46627a34e60c01b610515565b6101d467e950b8730cb1b58f60c01b610515565b6101e8676822b8740084191f60c01b610515565b6101f181610518565b50565b6102086707adef802e0a2e9860c01b610515565b61021c672181911124137b9960c01b610515565b610230678b8d0d91af2d06b460c01b610515565b61023a82826107b2565b61024e67ec3612479c894bff60c01b610515565b610262672a61664b3cb93b3760c01b610515565b818160405161027292919061107a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f6eabb183ad4385932735ae89018089a008c58e814451b618bc0dd0e7922f6d1360405160405180910390a35050565b6102d567a0e9ed3ffb65e58a60c01b610515565b6102e96715dc3610bd6db11e60c01b610515565b6102fd676d6398be911915a360c01b610515565b6103068161086a565b50565b61031d67b68f3f647d0a7baa60c01b610515565b61033167387ee1435970e25960c01b610515565b61034567db6581ef0a29e8be60c01b610515565b61034f8282610b04565b61036367dbeae8b6c5a5c02a60c01b610515565b61037767f6f83aa73990787860c01b610515565b818160405161038792919061107a565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f75dcdde27b71b9c529ae8b02072e1eeda244662d2d9c2effea5a1afb8fc913f360405160405180910390a35050565b6103de610bbc565b6103e86000610c3a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60006104586737270a3c93cb375f60c01b610515565b61046c67ba652b04f341019160c01b610515565b61048067a94b6553035184dc60c01b610515565b61048a8383610cfe565b905092915050565b61049a610bbc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050090611116565b60405180910390fd5b61051281610c3a565b50565b50565b61052c67f6a2620fc42edd1760c01b610515565b61054067ca63df303fe2df8860c01b610515565b61055467352da4c31005e24560c01b610515565b610568673f86da22427dbe4060c01b610515565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ce90611182565b60405180910390fd5b6105eb6778e0839bb2cbb2be60c01b610515565b6105ff67e3ed4ba1d2acc9a660c01b610515565b6106136710a918d4825dcb3160c01b610515565b610627671611f3e3c7f468b260c01b610515565b6106313382610cfe565b15610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066890611214565b60405180910390fd5b610685672cf2db8e498b9a4060c01b610515565b61069967e2beeed4b16b742360c01b610515565b60018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506107416724fa5d1e03c3b43660c01b610515565b610755671fdbb6994253167760c01b610515565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0c4b48e75a1f7ab0a9a2f786b5d6c1f7789020403bff177fb54d46edb89ccc0060405160405180910390a350565b6107c6678376c0d944a0b59a60c01b610515565b6107da6788b76bc0b253991860c01b610515565b6107ee67b46c304ed5c3a77860c01b610515565b60005b8282905081101561086557610810679b7aa25078b5327660c01b610515565b61082467cddae10e49d1ed7960c01b610515565b61085483838381811061083a57610839611234565b5b905060200201602081019061084f9190610e3e565b610518565b8061085e9061129c565b90506107f1565b505050565b61087e6794c4d5b68d93d5dd60c01b610515565b61089267625d2f9b353ccbe160c01b610515565b6108a6675f283196510ff2eb60c01b610515565b6108ba670d578a868b76e17860c01b610515565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090611182565b60405180910390fd5b61093d67600c63ec3774ea3060c01b610515565b610951677c4a0956700e03d660c01b610515565b61096567c755349d16f220ad60c01b610515565b6109796729a4d9e32ce2015e60c01b610515565b6109833382610cfe565b6109c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b990611356565b60405180910390fd5b6109d66753142b83d2ebe5af60c01b610515565b6109ea6775480db2b4564bbf60c01b610515565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610a93675a1f8dd94b9370bc60c01b610515565b610aa76735cba46e43b8488e60c01b610515565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd288ab5da2e1f37cf384a1565a3f905ad289b092fbdd31950dbbfef148c04f8860405160405180910390a350565b610b186719cc2cfe1cc5e5f160c01b610515565b610b2c67342f0338077b971c60c01b610515565b610b406741448bb72f9be57960c01b610515565b60005b82829050811015610bb757610b6267d6cc022c17f3262d60c01b610515565b610b76674199b6b9dd7e5c7b60c01b610515565b610ba6838383818110610b8c57610b8b611234565b5b9050602002016020810190610ba19190610e3e565b61086a565b80610bb09061129c565b9050610b43565b505050565b610bc4610dce565b73ffffffffffffffffffffffffffffffffffffffff16610be26103ea565b73ffffffffffffffffffffffffffffffffffffffff1614610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f906113c2565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610d1467ff68de7f5bdc8c8d60c01b610515565b610d2867587050cc7807119260c01b610515565b610d3c67805332d6332991fc60c01b610515565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e0b82610de0565b9050919050565b610e1b81610e00565b8114610e2657600080fd5b50565b600081359050610e3881610e12565b92915050565b600060208284031215610e5457610e53610dd6565b5b6000610e6284828501610e29565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e9057610e8f610e6b565b5b8235905067ffffffffffffffff811115610ead57610eac610e70565b5b602083019150836020820283011115610ec957610ec8610e75565b5b9250929050565b60008060208385031215610ee757610ee6610dd6565b5b600083013567ffffffffffffffff811115610f0557610f04610ddb565b5b610f1185828601610e7a565b92509250509250929050565b610f2681610e00565b82525050565b6000602082019050610f416000830184610f1d565b92915050565b60008060408385031215610f5e57610f5d610dd6565b5b6000610f6c85828601610e29565b9250506020610f7d85828601610e29565b9150509250929050565b60008115159050919050565b610f9c81610f87565b82525050565b6000602082019050610fb76000830184610f93565b92915050565b600081905092915050565b6000819050919050565b610fdb81610e00565b82525050565b6000610fed8383610fd2565b60208301905092915050565b60006110086020840184610e29565b905092915050565b6000602082019050919050565b60006110298385610fbd565b935061103482610fc8565b8060005b8581101561106d5761104a8284610ff9565b6110548882610fe1565b975061105f83611010565b925050600181019050611038565b5085925050509392505050565b600061108782848661101d565b91508190509392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611100602683611093565b915061110b826110a4565b604082019050919050565b6000602082019050818103600083015261112f816110f3565b9050919050565b7f57686974656c6973743a3a205a65726f20616464726573730000000000000000600082015250565b600061116c601883611093565b915061117782611136565b602082019050919050565b6000602082019050818103600083015261119b8161115f565b9050919050565b7f57686974656c6973743a3a204163636f756e7420697320616c7265616479207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b60006111fe602a83611093565b9150611209826111a2565b604082019050919050565b6000602082019050818103600083015261122d816111f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112a782611292565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112d9576112d8611263565b5b600182019050919050565b7f57686974656c6973743a3a204163636f756e74206973206e6f7420776869746560008201527f6c69737465640000000000000000000000000000000000000000000000000000602082015250565b6000611340602683611093565b915061134b826112e4565b604082019050919050565b6000602082019050818103600083015261136f81611333565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006113ac602083611093565b91506113b782611376565b602082019050919050565b600060208201905081810360008301526113db8161139f565b905091905056fea2646970667358221220f68753bc6819586c1627580897b2fb95acb641396b883ae06cb1e07a64d7b00564736f6c63430008110033"; type WhitelistConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts b/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts deleted file mode 100644 index c9329a46..00000000 --- a/src/contracts/factories/src/test/TestEtherspotWallet__factory.ts +++ /dev/null @@ -1,719 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../../common"; -import type { - TestEtherspotWallet, - TestEtherspotWalletInterface, -} from "../../../src/test/TestEtherspotWallet"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "beacon", - type: "address", - }, - ], - name: "BeaconUpgraded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "ERC777Received", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldEntryPoint", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newEntryPoint", - type: "address", - }, - ], - name: "EntryPointChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "registry", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "EtherspotWalletInitialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "version", - type: "uint8", - }, - ], - name: "Initialized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldRegistry", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newRegistry", - type: "address", - }, - ], - name: "RegistryChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, - { - internalType: "address", - name: "addr", - type: "address", - }, - ], - name: "canImplementInterfaceForAddress", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, - { - internalType: "address", - name: "anOwner", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "messageHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "onERC1155Received", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "onERC721Received", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proxiableUUID", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "_from", - type: "address", - }, - { - internalType: "address", - name: "_to", - type: "address", - }, - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - name: "tokensReceived", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_newEntryPoint", - type: "address", - }, - ], - name: "updateEntryPoint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "validationData", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613c7061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613c706000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612146565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a9190612215565b61059d565b6040516101ac91906122d8565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612329565b6105b2565b6040516101e991906122d8565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612435565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906124b6565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906124b6565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906124e3565b6109d2565b6040516102a191906122d8565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612564565b610ab8565b6040516102de91906125b3565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906124b6565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906125f3565b610cd9565b6040516103449190612671565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906126ca565b610d98565b005b61039a6004803603810190610395919061284b565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be91906125b3565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906128b6565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906128b6565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906128b6565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a9190612671565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612930565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c0919061294b565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906129fd565b611138565b005b3480156104fc57600080fd5b50610505611197565b6040516105129190612671565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612a50565b61121f565b60405161054f91906122d8565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612aea565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612b5f565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612bd7565b6106665763ffffffff60e01b61068c565b60405160200161067590612c5b565b604051602081830303815290604052805190602001205b90509392505050565b61069d611235565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612cf3565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612d13565b5b905060200201602081019061071e91906124b6565b600085858581811061073357610732612d13565b5b90506020028101906107459190612d51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611304565b808061079890612de3565b9150506106e8565b5050505050565b6107af611388565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612e9e565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612ebe565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611388565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612f59565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612ebe565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190612f79565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612bd7565b610a885763ffffffff60e01b610aae565b604051602001610a979061300e565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca9061306f565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906130d0565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613157565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e611450565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906131e9565b60405180910390fd5b610c7d816114a7565b610cd681600067ffffffffffffffff811115610c9c57610c9b612720565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b5060006114b2565b50565b6000610ce3611620565b610ced8484611697565b90506000848060400190610d019190612d51565b90501415610d1357610d1284611775565b5b610d1c82611823565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906128b6565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611388565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613218565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613157565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee6611450565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906131e9565b60405180910390fd5b610f45826114a7565b610f51828260016114b2565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906132b3565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e3611235565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611304565b50505050565b600060159054906101000a900460ff16611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90613345565b60405180910390fd5b6111928383836118bf565b505050565b60006111a16110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111d991906128b6565b602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a919061337a565b905090565b600063f23a6e6160e01b90509695505050505050565b61123d6110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c357506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990613419565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161132d91906134b3565b60006040518083038185875af1925050503d806000811461136a576040519150601f19603f3d011682016040523d82523d6000602084013e61136f565b606091505b50915091508161138157805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061140f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613516565b60405180910390fd5b565b600061147e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611a5b565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114af611388565b50565b6114de7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611a65565b60000160009054906101000a900460ff1615611502576114fd83611a6f565b61161b565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561156a57506040513d601f19601f82011682018060405250810190611567919061354b565b60015b6115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906135ea565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461160e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116059061367c565b60405180910390fd5b5061161a838383611b28565b5b505050565b6116286110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c9061370e565b60405180910390fd5b565b6000806116a383611b54565b905061170b848061014001906116b99190612d51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611b8490919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176957600191505061176f565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff16809291906117a490613746565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff1614611820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611817906137c7565b60405180910390fd5b50565b600081146118bc5760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516118739061380d565b600060405180830381858888f193505050503d80600081146118b1576040519150601f19603f3d011682016040523d82523d6000602084013e6118b6565b606091505b50509050505b50565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611a7881611bab565b611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613894565b60405180910390fd5b80611ae47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611a5b565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b3183611bce565b600082511180611b3e5750805b15611b4f57611b4d8383611c1d565b505b505050565b600081604051602001611b679190613921565b604051602081830303815290604052805190602001209050919050565b6000806000611b938585611c4a565b91509150611ba081611c9c565b819250505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611bd781611a6f565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611c428383604051806060016040528060278152602001613c1460279139611e0a565b905092915050565b600080604183511415611c8c5760008060006020860151925060408601519150606086015160001a9050611c8087828585611e90565b94509450505050611c95565b60006002915091505b9250929050565b60006004811115611cb057611caf613947565b5b816004811115611cc357611cc2613947565b5b1415611cce57611e07565b60016004811115611ce257611ce1613947565b5b816004811115611cf557611cf4613947565b5b1415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906139c2565b60405180910390fd5b60026004811115611d4a57611d49613947565b5b816004811115611d5d57611d5c613947565b5b1415611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613a2e565b60405180910390fd5b60036004811115611db257611db1613947565b5b816004811115611dc557611dc4613947565b5b1415611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90613ac0565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611e3491906134b3565b600060405180830381855af49150503d8060008114611e6f576040519150601f19603f3d011682016040523d82523d6000602084013e611e74565b606091505b5091509150611e8586838387611f73565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611ecb576000600391509150611f6a565b600060018787878760405160008152602001604052604051611ef09493929190613afc565b6020604051602081039080840390855afa158015611f12573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f6157600060019250925050611f6a565b80600092509250505b94509492505050565b60608315611fd657600083511415611fce57611f8e85611bab565b611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc490613b8d565b60405180910390fd5b5b829050611fe1565b611fe08383611fe9565b5b949350505050565b600082511115611ffc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120309190613bf1565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120788261204d565b9050919050565b6120888161206d565b811461209357600080fd5b50565b6000813590506120a58161207f565b92915050565b6000819050919050565b6120be816120ab565b81146120c957600080fd5b50565b6000813590506120db816120b5565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612106576121056120e1565b5b8235905067ffffffffffffffff811115612123576121226120e6565b5b60208301915083600182028301111561213f5761213e6120eb565b5b9250929050565b60008060008060008060008060c0898b03121561216657612165612043565b5b60006121748b828c01612096565b98505060206121858b828c01612096565b97505060406121968b828c01612096565b96505060606121a78b828c016120cc565b955050608089013567ffffffffffffffff8111156121c8576121c7612048565b5b6121d48b828c016120f0565b945094505060a089013567ffffffffffffffff8111156121f7576121f6612048565b5b6122038b828c016120f0565b92509250509295985092959890939650565b60008060008060006080868803121561223157612230612043565b5b600061223f88828901612096565b955050602061225088828901612096565b9450506040612261888289016120cc565b935050606086013567ffffffffffffffff81111561228257612281612048565b5b61228e888289016120f0565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122d28161229d565b82525050565b60006020820190506122ed60008301846122c9565b92915050565b6000819050919050565b612306816122f3565b811461231157600080fd5b50565b600081359050612323816122fd565b92915050565b60008060006040848603121561234257612341612043565b5b600061235086828701612314565b935050602084013567ffffffffffffffff81111561237157612370612048565b5b61237d868287016120f0565b92509250509250925092565b60008083601f84011261239f5761239e6120e1565b5b8235905067ffffffffffffffff8111156123bc576123bb6120e6565b5b6020830191508360208202830111156123d8576123d76120eb565b5b9250929050565b60008083601f8401126123f5576123f46120e1565b5b8235905067ffffffffffffffff811115612412576124116120e6565b5b60208301915083602082028301111561242e5761242d6120eb565b5b9250929050565b6000806000806040858703121561244f5761244e612043565b5b600085013567ffffffffffffffff81111561246d5761246c612048565b5b61247987828801612389565b9450945050602085013567ffffffffffffffff81111561249c5761249b612048565b5b6124a8878288016123df565b925092505092959194509250565b6000602082840312156124cc576124cb612043565b5b60006124da84828501612096565b91505092915050565b600080600080604085870312156124fd576124fc612043565b5b600085013567ffffffffffffffff81111561251b5761251a612048565b5b612527878288016120f0565b9450945050602085013567ffffffffffffffff81111561254a57612549612048565b5b612556878288016120f0565b925092505092959194509250565b6000806040838503121561257b5761257a612043565b5b600061258985828601612314565b925050602061259a85828601612096565b9150509250929050565b6125ad816122f3565b82525050565b60006020820190506125c860008301846125a4565b92915050565b600080fd5b600061016082840312156125ea576125e96125ce565b5b81905092915050565b60008060006060848603121561260c5761260b612043565b5b600084013567ffffffffffffffff81111561262a57612629612048565b5b612636868287016125d3565b935050602061264786828701612314565b9250506040612658868287016120cc565b9150509250925092565b61266b816120ab565b82525050565b60006020820190506126866000830184612662565b92915050565b60006126978261204d565b9050919050565b6126a78161268c565b81146126b257600080fd5b50565b6000813590506126c48161269e565b92915050565b600080604083850312156126e1576126e0612043565b5b60006126ef858286016126b5565b9250506020612700858286016120cc565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127588261270f565b810181811067ffffffffffffffff8211171561277757612776612720565b5b80604052505050565b600061278a612039565b9050612796828261274f565b919050565b600067ffffffffffffffff8211156127b6576127b5612720565b5b6127bf8261270f565b9050602081019050919050565b82818337600083830152505050565b60006127ee6127e98461279b565b612780565b90508281526020810184848401111561280a5761280961270a565b5b6128158482856127cc565b509392505050565b600082601f830112612832576128316120e1565b5b81356128428482602086016127db565b91505092915050565b6000806040838503121561286257612861612043565b5b600061287085828601612096565b925050602083013567ffffffffffffffff81111561289157612890612048565b5b61289d8582860161281d565b9150509250929050565b6128b08161206d565b82525050565b60006020820190506128cb60008301846128a7565b92915050565b6000819050919050565b60006128f66128f16128ec8461204d565b6128d1565b61204d565b9050919050565b6000612908826128db565b9050919050565b600061291a826128fd565b9050919050565b61292a8161290f565b82525050565b60006020820190506129456000830184612921565b92915050565b6000806000806060858703121561296557612964612043565b5b600061297387828801612096565b9450506020612984878288016120cc565b935050604085013567ffffffffffffffff8111156129a5576129a4612048565b5b6129b1878288016120f0565b925092505092959194509250565b60006129ca8261206d565b9050919050565b6129da816129bf565b81146129e557600080fd5b50565b6000813590506129f7816129d1565b92915050565b600080600060608486031215612a1657612a15612043565b5b6000612a24868287016129e8565b9350506020612a3586828701612096565b9250506040612a4686828701612096565b9150509250925092565b60008060008060008060a08789031215612a6d57612a6c612043565b5b6000612a7b89828a01612096565b9650506020612a8c89828a01612096565b9550506040612a9d89828a016120cc565b9450506060612aae89828a016120cc565b935050608087013567ffffffffffffffff811115612acf57612ace612048565b5b612adb89828a016120f0565b92509250509295509295509295565b6000606082019050612aff60008301866128a7565b612b0c60208301856128a7565b612b196040830184612662565b949350505050565b600082825260208201905092915050565b6000612b3e8385612b21565b9350612b4b8385846127cc565b612b548361270f565b840190509392505050565b6000606082019050612b7460008301876128a7565b612b8160208301866125a4565b8181036040830152612b94818486612b32565b905095945050505050565b60008115159050919050565b612bb481612b9f565b8114612bbf57600080fd5b50565b600081519050612bd181612bab565b92915050565b600060208284031215612bed57612bec612043565b5b6000612bfb84828501612bc2565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612c45601f83612c04565b9150612c5082612c0f565b601f82019050919050565b6000612c6682612c38565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612cdd603383612c70565b9150612ce882612c81565b604082019050919050565b60006020820190508181036000830152612d0c81612cd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612d6e57612d6d612d42565b5b80840192508235915067ffffffffffffffff821115612d9057612d8f612d47565b5b602083019250600182023603831315612dac57612dab612d4c565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dee826120ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e2157612e20612db4565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612e88603183612c70565b9150612e9382612e2c565b604082019050919050565b60006020820190508181036000830152612eb781612e7b565b9050919050565b6000604082019050612ed360008301856128a7565b612ee060208301846128a7565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b6000612f43603383612c70565b9150612f4e82612ee7565b604082019050919050565b60006020820190508181036000830152612f7281612f36565b9050919050565b6000606082019050612f8e60008301886128a7565b8181036020830152612fa1818688612b32565b90508181036040830152612fb6818486612b32565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000612ff8601d83612c04565b915061300382612fc2565b601d82019050919050565b600061301982612feb565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613059601583612c04565b915061306482613023565b601582019050919050565b600061307a8261304c565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006130ba601483612c04565b91506130c582613084565b601482019050919050565b60006130db826130ad565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000613141602c83612c70565b915061314c826130e5565b604082019050919050565b6000602082019050818103600083015261317081613134565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006131d3602c83612c70565b91506131de82613177565b604082019050919050565b60006020820190508181036000830152613202816131c6565b9050919050565b6132128161268c565b82525050565b600060408201905061322d6000830185613209565b61323a6020830184612662565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b600061329d603883612c70565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b600061332f602b83612c70565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b600081519050613374816120b5565b92915050565b6000602082840312156133905761338f612043565b5b600061339e84828501613365565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613403602983612c70565b915061340e826133a7565b604082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561346d578082015181840152602081019050613452565b8381111561347c576000848401525b50505050565b600061348d82613439565b6134978185613444565b93506134a781856020860161344f565b80840191505092915050565b60006134bf8284613482565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000613500601c83612c70565b915061350b826134ca565b602082019050919050565b6000602082019050818103600083015261352f816134f3565b9050919050565b600081519050613545816122fd565b92915050565b60006020828403121561356157613560612043565b5b600061356f84828501613536565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b60006135d4602e83612c70565b91506135df82613578565b604082019050919050565b60006020820190508181036000830152613603816135c7565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613666602983612c70565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006136f8602483612c70565b91506137038261369c565b604082019050919050565b60006020820190508181036000830152613727816136eb565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006137518261372e565b91506bffffffffffffffffffffffff8214156137705761376f612db4565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006137b1601f83612c70565b91506137bc8261377b565b602082019050919050565b600060208201905081810360008301526137e0816137a4565b9050919050565b50565b60006137f7600083613444565b9150613802826137e7565b600082019050919050565b6000613818826137ea565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061387e602d83612c70565b915061388982613822565b604082019050919050565b600060208201905081810360008301526138ad81613871565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006138ea601c83612c04565b91506138f5826138b4565b601c82019050919050565b6000819050919050565b61391b613916826122f3565b613900565b82525050565b600061392c826138dd565b9150613938828461390a565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006139ac601883612c70565b91506139b782613976565b602082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613a18601f83612c70565b9150613a23826139e2565b602082019050919050565b60006020820190508181036000830152613a4781613a0b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aaa602283612c70565b9150613ab582613a4e565b604082019050919050565b60006020820190508181036000830152613ad981613a9d565b9050919050565b600060ff82169050919050565b613af681613ae0565b82525050565b6000608082019050613b1160008301876125a4565b613b1e6020830186613aed565b613b2b60408301856125a4565b613b3860608301846125a4565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613b77601d83612c70565b9150613b8282613b41565b602082019050919050565b60006020820190508181036000830152613ba681613b6a565b9050919050565b600081519050919050565b6000613bc382613bad565b613bcd8185612c70565b9350613bdd81856020860161344f565b613be68161270f565b840191505092915050565b60006020820190508181036000830152613c0b8184613bb8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220469336cf59c24e8ab82b3fb1667829bc13e63792b9461080646dcd6160d792b464736f6c634300080c0033"; - -type TestEtherspotWalletConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: TestEtherspotWalletConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class TestEtherspotWallet__factory extends ContractFactory { - constructor(...args: TestEtherspotWalletConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): TestEtherspotWallet { - return super.attach(address) as TestEtherspotWallet; - } - override connect(signer: Signer): TestEtherspotWallet__factory { - return super.connect(signer) as TestEtherspotWallet__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): TestEtherspotWalletInterface { - return new utils.Interface(_abi) as TestEtherspotWalletInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TestEtherspotWallet { - return new Contract(address, _abi, signerOrProvider) as TestEtherspotWallet; - } -} diff --git a/src/contracts/factories/src/wallet/AccountFactory__factory.ts b/src/contracts/factories/src/wallet/AccountFactory__factory.ts new file mode 100644 index 00000000..4a498c1e --- /dev/null +++ b/src/contracts/factories/src/wallet/AccountFactory__factory.ts @@ -0,0 +1,139 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../common"; +import type { + AccountFactory, + AccountFactoryInterface, +} from "../../../src/wallet/AccountFactory"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract EtherspotWallet", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract EtherspotWallet", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b5061002b676d2ed0c66848d46660c01b6100a660201b60201c565b61004567cafdcf878808ae1260c01b6100a660201b60201c565b604051610051906100a9565b604051809103906000f08015801561006d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506100b6565b50565b616a22806115ab83390190565b6080516114cc6100df6000396000818161014d01528181610222015261039601526114cc6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806308a6354e146200004b57806311464fbe14620000815780631230aea214620000a3575b600080fd5b62000069600480360381019062000063919062000595565b620000d9565b60405162000078919062000602565b60405180910390f35b6200008b62000220565b6040516200009a91906200068a565b60405180910390f35b620000c16004803603810190620000bb919062000595565b62000244565b604051620000d091906200068a565b60405180910390f35b6000620000f167a458eebb65eee57160c01b62000458565b6200010767e9ab74625cd5872960c01b62000458565b6200011d6722a130a48965bbe560c01b62000458565b620002178260001b6040518060200162000137906200049d565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000878760405160240162000181929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001d9929190620007a7565b604051602081830303815290604052604051602001620001fb9291906200081d565b604051602081830303815290604052805190602001206200045b565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006200025c67dce2bed066d9b82960c01b62000458565b6200027267046a37c28b7f1a8160c01b62000458565b62000288671cc569f3f7694c1660c01b62000458565b600062000297858585620000d9565b9050620002af67dc97d198cade868760c01b62000458565b620002c56714f252bc6af9e86660c01b62000458565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620002f767441eaa0117b333d260c01b62000458565b6200030d6795d4633a9eb5dcca60c01b62000458565b600081111562000364576200032d671d825135aade479760c01b62000458565b620003436728568c5e9a2e226260c01b62000458565b62000359675bced7327c99829260c01b62000458565b819250505062000451565b6200037a674d8475d19a57872f60c01b62000458565b6200039067cfa47079982fcdb160c01b62000458565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008787604051602401620003ca929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200041d906200049d565b6200042a929190620007a7565b8190604051809103906000f59050801580156200044b573d6000803e3d6000fd5b50925050505b9392505050565b50565b60006200046a83833062000472565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c51806200084683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004dd82620004b0565b9050919050565b6000620004f182620004d0565b9050919050565b6200050381620004e4565b81146200050f57600080fd5b50565b6000813590506200052381620004f8565b92915050565b6200053481620004d0565b81146200054057600080fd5b50565b600081359050620005548162000529565b92915050565b6000819050919050565b6200056f816200055a565b81146200057b57600080fd5b50565b6000813590506200058f8162000564565b92915050565b600080600060608486031215620005b157620005b0620004ab565b5b6000620005c18682870162000512565b9350506020620005d48682870162000543565b9250506040620005e7868287016200057e565b9150509250925092565b620005fc81620004d0565b82525050565b6000602082019050620006196000830184620005f1565b92915050565b6000819050919050565b60006200064a620006446200063e84620004b0565b6200061f565b620004b0565b9050919050565b60006200065e8262000629565b9050919050565b6000620006728262000651565b9050919050565b620006848162000665565b82525050565b6000602082019050620006a1600083018462000679565b92915050565b6000620006b48262000629565b9050919050565b6000620006c882620006a7565b9050919050565b620006da81620006bb565b82525050565b6000604082019050620006f76000830185620006cf565b620007066020830184620005f1565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007495780820151818401526020810190506200072c565b60008484015250505050565b6000601f19601f8301169050919050565b600062000773826200070d565b6200077f818562000718565b93506200079181856020860162000729565b6200079c8162000755565b840191505092915050565b6000604082019050620007be6000830185620005f1565b8181036020830152620007d2818462000766565b90509392505050565b600081905092915050565b6000620007f3826200070d565b620007ff8185620007db565b93506200081181856020860162000729565b80840191505092915050565b60006200082b8285620007e6565b9150620008398284620007e6565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dc6b5497196bd04a7c423c5c7f12bef272c6fc14f96dde786fbbe2616156f57f64736f6c6343000811003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000616777bd353ae5f6f4b860c01b620000af60201b60201c565b6200007d67f4849dbf6086b19760c01b620000af60201b60201c565b62000099671331b88614a8024260c01b620000af60201b60201c565b620000a9620000b260201b60201c565b6200025d565b50565b600060019054906101000a900460ff161562000105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fc9062000200565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001775760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200016e919062000240565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b6000620001e860278362000179565b9150620001f5826200018a565b604082019050919050565b600060208201905081810360008301526200021b81620001d9565b9050919050565b600060ff82169050919050565b6200023a8162000222565b82525050565b60006020820190506200025760008301846200022f565b92915050565b60805161678d6200029560003960008181611933015281816119c101528181611f840152818161201201526120c2015261678d6000f3fe60806040526004361061019f5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f61461062c578063bc197c8114610655578063c399ec8814610692578063f23a6e61146106bd576101fe565b8063a526d83b146105ad578063affed0e0146105d6578063b0d691fe14610601576101fe565b80637065cb48116100c65780637065cb48146104e1578063714041561461050a5780638f0684301461053357806398ef1ed814610570576101fe565b80634d44560d146104715780634f1ef2861461049a57806352d1902d146104b6576101fe565b806318dfb3c7116101595780633659cfe6116101335780633659cfe6146103d85780633a871cdd14610401578063485cc9551461043e5780634a58db1914610467576101fe565b806318dfb3c7146103495780631b71bb6e146103725780632f54bf6e1461039b576101fe565b806223de291461020357806301ffc9a71461022c5780630c68ba2114610269578063150b7a02146102a657806316d43401146102e3578063173825d914610320576101fe565b366101fe576101b867290bbd319612162360c01b6106fa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190614662565b6106fd565b005b34801561023857600080fd5b50610253600480360381019061024e9190614789565b61071b565b60405161026091906147d1565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906147ec565b610900565b60405161029d91906147d1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190614819565b610992565b6040516102da91906148b0565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061492d565b6109e2565b60405161031791906147d1565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906147ec565b6113bb565b005b34801561035557600080fd5b50610370600480360381019061036b9190614a61565b611483565b005b34801561037e57600080fd5b50610399600480360381019061039491906147ec565b6116c1565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906147ec565b61189f565b6040516103cf91906147d1565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906147ec565b611931565b005b34801561040d57600080fd5b5061042860048036038101906104239190614b07565b611ab9565b6040516104359190614b85565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614bde565b611bf7565b005b61046f611d9d565b005b34801561047d57600080fd5b5061049860048036038101906104939190614c5c565b611e4e565b005b6104b460048036038101906104af9190614ddd565b611f82565b005b3480156104c257600080fd5b506104cb6120be565b6040516104d89190614e48565b60405180910390f35b3480156104ed57600080fd5b50610508600480360381019061050391906147ec565b612177565b005b34801561051657600080fd5b50610531600480360381019061052c91906147ec565b61223f565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614e63565b612307565b60405161056791906147d1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614e63565b6123d4565b6040516105a491906147d1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906147ec565b6125fd565b005b3480156105e257600080fd5b506105eb6126c5565b6040516105f89190614b85565b60405180910390f35b34801561060d57600080fd5b50610616612731565b6040516106239190614f36565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190614f51565b612797565b005b34801561066157600080fd5b5061067c6004803603810190610677919061501b565b6128a8565b60405161068991906148b0565b60405180910390f35b34801561069e57600080fd5b506106a76128fc565b6040516106b49190614b85565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906150f7565b6129c0565b6040516106f191906148b0565b60405180910390f35b50565b610711671278753381487ed660c01b612a12565b5050505050505050565b600061073167f20d647ea02d480060c01b612a12565b61074567ffb589296d687db060c01b612a12565b6107596727ecf9b318901df560c01b612a12565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156107d657506107d5675d4be9b73183ad3f60c01b612a15565b5b8061087657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108595750610858674cb5733a4ebd736b60c01b612a15565b5b8015610875575061087467927753031b1e765d60c01b612a15565b5b5b806108f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108f857506108f766bc16169e90631c60c01b612a15565b5b5b9050919050565b6000610916679a530c869daa649060c01b612a20565b61092a677819779a5121f4ad60c01b612a20565b61093e67dcc814792f5595a060c01b612a20565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109a76642558288c0c26a60c01b612a12565b6109bb670cd59c881166cff460c01b612a12565b6109cf67d8d160ce8c3ef4cc60c01b612a12565b63150b7a0260e01b905095945050505050565b60006109f86777258f39a67c0acd60c01b612a23565b610a0c67c9d3460cf31b367060c01b612a23565b610a2067301450deda14998860c01b612a23565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a5067ec35fa0e327aba3360c01b612a23565b610a646757c603851350fa0960c01b612a23565b6060610a7a67ed7102d9c731614b60c01b612a23565b610a8e67260c95324dc5522a60c01b612a23565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610ac691906151c0565b908a8a905092610ad8939291906151fe565b90610ae39190615251565b149050610afa67adb0f8e971c6f00460c01b612a23565b610b0e6775ac95bff94d832360c01b612a23565b8015610d5b57610b2867b7ce1fa3f7f6604d60c01b612a23565b610b3c679fc1490a6707ce8260c01b612a23565b610b50679cbd4322f03dcb3060c01b612a23565b6000610b66677c50636fd0d78e6e60c01b612a23565b610b7a67b6c96f6498872fdd60c01b612a23565b6060610b9067d225012c278bc14960c01b612a23565b888860009060208c8c9050610ba591906151c0565b92610bb2939291906151fe565b810190610bbf91906152b0565b809650819350829450505050610bdf67414eafbc10d5dfd460c01b612a23565b610bf3679735072f1875e8c560c01b612a23565b60008503610d3f57610c0f67ece2f114e83cba5460c01b612a23565b610c2367bb4b7709950fab6560c01b612a23565b610c3767e556fd7ed728116b60c01b612a23565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c5f91906153ac565b6000604051808303816000865af19150503d8060008114610c9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ca1565b606091505b5091509150610cba675bb7adbcacc27af760c01b612a23565b610cce67925a11ac41b1a62f60c01b612a23565b81610d2457610ce7674b9b350a0c4e240d60c01b612a23565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d1b919061540d565b60405180910390fd5b610d3867270a9300cfb5deb160c01b612a23565b5050610d54565b610d536719ddea40eb9c9d5e60c01b612a23565b5b5050610dcb565b610d6f671617c5f7b544c15460c01b612a23565b610d8367152cf4f885c3c7bd60c01b612a23565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ddf678968ba2400116cd160c01b612a23565b610df367d26f37fb13c4702060c01b612a23565b808015610e105750610e0f67e672c6829c01435e60c01b612a26565b5b80610e375750600083118015610e365750610e35672f1034641526e8e560c01b612a26565b5b5b156110a757610e506787b8bb2f9d833b2360c01b612a23565b610e646748ed04b5790955de60c01b612a23565b610e7867c07d3098ed811b0e60c01b612a23565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610eb392919061542f565b602060405180830381865afa925050508015610eed57506040513d601f19601f82011682018060405250810190610eea9190615474565b60015b610f74573d8060008114610f1d576040519150601f19603f3d011682016040523d82523d6000602084013e610f22565b606091505b50610f37672c516c89798db2e060c01b612a23565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610f6b919061540d565b60405180910390fd5b610f88677a7dc9015ade993760c01b612a23565b610f9c676bd30bd513db1c1260c01b612a23565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050610ffc67f77b76e97cdda63e60c01b612a23565b61101067f2ac3b0c93d4d96060c01b612a23565b60008514801561101d5750825b8015611027575086155b1561105e576110406732203bac67e9a5c660c01b612a23565b61105467bacd05270bf834fa60c01b612a23565b806000526001601ffd5b61107267db508d98998fd4cb60c01b612a23565b61108667bd809f1f7297a39860c01b612a23565b61109a671166c1324f0a4d4360c01b612a23565b80955050505050506113b2565b6110bb67fb73a16ec6f828a360c01b612a23565b6110cf67124b4f67fba3948f60c01b612a23565b6110e367a72081e2c67a966a60c01b612a23565b6110f7670ab810c1358d671760c01b612a23565b6041878790501461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490615524565b60405180910390fd5b61115167c0b4b2b739bdbc3e60c01b612a23565b611165670f81a533fa5be34e60c01b612a23565b61117967657c1339b273a74660c01b612a23565b6000878760009060209261118f939291906151fe565b9061119a9190615251565b90506111b067dc3d3b49fc92cadb60c01b612a23565b6111c46752ae34fa8263b21b60c01b612a23565b600088886020906040926111da939291906151fe565b906111e59190615251565b90506111fb67301232fd22fb824c60c01b612a23565b61120f67f519c889a1cef68c60c01b612a23565b60008989604081811061122557611224615544565b5b9050013560f81c60f81b60f81c9050611248679a20c64fb3f7324360c01b612a23565b61125c678a031af26ced764160c01b612a23565b601b8160ff16141580156112745750601c8160ff1614155b156112f05761128d67cd922db48d204f9b60c01b612a23565b6112a167833a8605e20290ce60c01b612a23565b6112b567b3da6c39eac2834e60c01b612a23565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906155e5565b60405180910390fd5b611304675514297355562d4860c01b612a23565b6113186757b333f889b6e2b360c01b612a23565b61132c676603fc4d7122128560c01b612a23565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113669493929190615621565b6020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6113cf6706cea3225e159afe60c01b6106fa565b6113e367768e02f4b4fe93d060c01b6106fa565b6113f767bcb43f0f61fb5a1260c01b6106fa565b61140b6705112cc091d04b2260c01b6106fa565b611413612a31565b611427677b6146229717de8560c01b6106fa565b61143b671a91445bcd7d6a3660c01b6106fa565b61144f67087786fe3118ce4560c01b6106fa565b6114636712ac3ecdf13b356f60c01b6106fa565b611477676a822ec913ef224160c01b6106fa565b61148081612b95565b50565b611497670b312c177376d2f160c01b6106fa565b6114ab67526a718f37dbef7960c01b6106fa565b6114bf67bc0095b6ec842fe060c01b6106fa565b6114d36765a7b825dc91e38260c01b6106fa565b6114db612e11565b6114ef67e65dfa654e10de0360c01b6106fa565b6115036738751a29e4bbac9a60c01b6106fa565b6115176764a3e3565274624260c01b6106fa565b61152b67e3532f2d278ffcc460c01b6106fa565b61153f67b28c9cc66aedc63960c01b6106fa565b611553674c0d2e74d59320d660c01b6106fa565b81819050848490501461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906156d8565b60405180910390fd5b6115af6733f49bcf3f677de260c01b6106fa565b6115c367fda055a3194df47960c01b6106fa565b6115d7670ca2693ca40a9c3d60c01b6106fa565b60005b848490508110156116ba576115f967e45fe9f7a89384cd60c01b6106fa565b61160d677885f77483c8c7a360c01b6106fa565b6116a785858381811061162357611622615544565b5b905060200201602081019061163891906147ec565b600085858581811061164d5761164c615544565b5b905060200281019061165f9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b80806116b29061576a565b9150506115da565b5050505050565b6116d567b0e8e7fc3aed8bf060c01b6106fa565b6116e9671246157b9919312560c01b6106fa565b6116fd67cbfddca365f5dede60c01b6106fa565b611705613058565b61171967ab4f446b15a2b75360c01b6106fa565b61172d67140f31a12b03a20160c01b6106fa565b61174167c2cd95be620e67ae60c01b6106fa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790615824565b60405180910390fd5b6117c4674b99dae5f525e91060c01b6106fa565b6117d867897f79a11a9b512360c01b6106fa565b6117ec67f01df9d5178d9e0460c01b6106fa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161183f929190615853565b60405180910390a161185b6705fb80e775388d3f60c01b6106fa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006118b56784c34e023fb786f860c01b613174565b6118c9670d806432bac21d3b60c01b613174565b6118dd679da5a6f8cf654dc360c01b613174565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166119fe613177565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90615980565b60405180910390fd5b611a5d816131ce565b611ab681600067ffffffffffffffff811115611a7c57611a7b614cb2565b5b6040519080825280601f01601f191660200182016040528015611aae5781602001600182028036833780820191505090505b506000613229565b50565b6000611acf674a0b745640aaacbe60c01b613397565b611ae3673643bc4d265e004d60c01b613397565b611af767be21e9c3510eef0760c01b613397565b611aff61339a565b611b13670d9ae78f9ca6bca160c01b613397565b611b1d8484613475565b9050611b3367bac743df019f783060c01b613397565b611b47674633441562cbb38260c01b613397565b6000848060400190611b599190615707565b905003611baa57611b7467b9f604ce3adf50f460c01b613397565b611b886740dc8d2be550a2ae60c01b613397565b611b9c678d7f5bf9351f5d3760c01b613397565b611ba5846135e8565b611bbf565b611bbe67493644fd2e2f359760c01b613397565b5b611bd367f86dd1b6eddb849360c01b613397565b611be767e338ec934ff31c9e60c01b613397565b611bf0826136fa565b9392505050565b611c0b67c8d7dd5c6ec287ee60c01b6106fa565b60008060019054906101000a900460ff16159050808015611c3c5750600160008054906101000a900460ff1660ff16105b80611c695750611c4b3061383b565b158015611c685750600160008054906101000a900460ff1660ff16145b5b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90615a12565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611ce5576001600060016101000a81548160ff0219169083151502179055505b611cf967e0a1587b9fff733460c01b6106fa565b611d0d6799f49c2236f581d560c01b6106fa565b611d216713255a13306bce2760c01b6106fa565b611d35679103bdf53b9e3db060c01b6106fa565b611d3f838361385e565b8015611d985760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611d8f9190615a6d565b60405180910390a15b505050565b611db167a987bf12f6bf98ab60c01b6106fa565b611dc5671fbaaa4dbb3f884d60c01b6106fa565b611dd967e797a3f7fa46660c60c01b6106fa565b611de1612731565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e1a9190615a88565b6000604051808303818588803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b5050505050565b611e6267fbabf181d33082b660c01b6106fa565b611e7667bee35484a90cfd2660c01b6106fa565b611e8a673ceb9bb2daab856d60c01b6106fa565b611e9e6791fab911752e5b5c60c01b6106fa565b611ea6613058565b611eba672877b8446bdb5f0060c01b6106fa565b611ece676c6fc7cbb8b3b97860c01b6106fa565b611ee267eb87ca9da684e3db60c01b6106fa565b611ef6673d9d17fec85dda7860c01b6106fa565b611f0a675017b987e5f4e1e060c01b6106fa565b611f12612731565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611f4c929190615ab2565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612007906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661204f613177565b73ffffffffffffffffffffffffffffffffffffffff16146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90615980565b60405180910390fd5b6120ae826131ce565b6120ba82826001613229565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615b4d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61218b67b4c2b632b250bc6360c01b6106fa565b61219f67768e02f4b4fe93d060c01b6106fa565b6121b367bcb43f0f61fb5a1260c01b6106fa565b6121c76705112cc091d04b2260c01b6106fa565b6121cf612a31565b6121e3677b6146229717de8560c01b6106fa565b6121f76732bce9776427685f60c01b6106fa565b61220b675c4d3c86a9602c6f60c01b6106fa565b61221f670877748d77ec420260c01b6106fa565b6122336732ccb44361bec49260c01b6106fa565b61223c816139a0565b50565b612253676bacc25ce52307dd60c01b6106fa565b61226767bee35484a90cfd2660c01b6106fa565b61227b673ceb9bb2daab856d60c01b6106fa565b61228f6791fab911752e5b5c60c01b6106fa565b612297613058565b6122ab672877b8446bdb5f0060c01b6106fa565b6122bf67edec01844939018360c01b6106fa565b6122d3672d1676c1874371c960c01b6106fa565b6122e76767895a735b76188060c01b6106fa565b6122fb6762377381d2b1f71460c01b6106fa565b61230481613b5e565b50565b600061231d67a69e23ef0cf0d80560c01b612a23565b6123316789508a17c1e5baf860c01b612a23565b61234567f0e90fa9dac9b5a260c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612387959493929190615b9a565b6020604051808303816000875af11580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190615bfd565b9050949350505050565b60006123ea678cc395c88e3ae24060c01b612a23565b6123fe670e6cd08ae62d699160c01b612a23565b612412671a6d203d14bbeb3560c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612454959493929190615b9a565b6020604051808303816000875af192505050801561249057506040513d601f19601f8201168201806040525081019061248d9190615bfd565b60015b6125c8573d80600081146124c0576040519150601f19603f3d011682016040523d82523d6000602084013e6124c5565b606091505b506124da6763fa3d4afb8cd55b60c01b612a23565b6124ee67c78e77a5e38dc67760c01b612a23565b60008151905061250867a2319ac582c5f8b960c01b612a23565b61251c679d791f94f379b3d460c01b612a23565b6001810361259c57612538674b6df8afb2c0610f60c01b612a23565b61254c671241dc8732fa093a60c01b612a23565b600160f81b8260008151811061256557612564615544565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506125f5565b6125b067fb87cb9c02294f9f60c01b612a23565b6125c46773311759eab4f85760c01b612a23565b8082fd5b6125dc672f68b0ad8fd39c0a60c01b612a23565b6125f067ba867e4ef348d1a360c01b612a23565b809150505b949350505050565b612611675a98b12456966aba60c01b6106fa565b61262567bee35484a90cfd2660c01b6106fa565b612639673ceb9bb2daab856d60c01b6106fa565b61264d6791fab911752e5b5c60c01b6106fa565b612655613058565b612669672877b8446bdb5f0060c01b6106fa565b61267d67915d8b16ac69ed9860c01b6106fa565b612691671f5e91ee5a02596360c01b6106fa565b6126a5674b8e9096393c06f860c01b6106fa565b6126b967301fc09d047c18d960c01b6106fa565b6126c281613d1c565b50565b60006126db67e6997cbe175ef33460c01b6106fa565b6126ef677a25fccec1173dd960c01b6106fa565b61270367431301e0e2e31e9060c01b6106fa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061274767f561f09cfc8827bd60c01b6106fa565b61275b673350b6d208da79ee60c01b6106fa565b61276f671896327d0b3f375a60c01b6106fa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127ab67e2dda3667fd3757160c01b6106fa565b6127bf67526a718f37dbef7960c01b6106fa565b6127d367bc0095b6ec842fe060c01b6106fa565b6127e76765a7b825dc91e38260c01b6106fa565b6127ef612e11565b61280367e65dfa654e10de0360c01b6106fa565b61281767aeaf6d5fe58842a960c01b6106fa565b61282b67370ad7169464cc0060c01b6106fa565b61283f6739a00ff772ffbf9060c01b6106fa565b6128536792e03ae1c25d108960c01b6106fa565b6128a2848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b50505050565b60006128be67f6036d4dbbf1553b60c01b612a12565b6128d267e574cfd0134a53a360c01b612a12565b6128e667481cad8a93626dbc60c01b612a12565b63bc197c8160e01b905098975050505050505050565b6000612912673908573a227c011760c01b6106fa565b61292667f95a3d25f4a4d56660c01b6106fa565b61293a6701732dbf20a7ffe360c01b6106fa565b612942612731565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161297a9190615a88565b602060405180830381865afa158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb9190615c3f565b905090565b60006129d667d55e6083e458695760c01b612a12565b6129ea67229756682a8526f660c01b612a12565b6129fe672d0f5a7f66d6c2a060c01b612a12565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612a4567216671dc6f7d651060c01b6106fa565b612a5967fc696b44f549a3bd60c01b6106fa565b612a6d677d2f775bb38d794b60c01b6106fa565b612a81672c1b7774324d16e460c01b6106fa565b612a8a3361189f565b8015612aa65750612aa5679d6b1a88bd04a29560c01b613f9a565b5b80612b1457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612af75750612af667c1169fb68056496660c01b613f9a565b5b8015612b135750612b1267290c2b81e499218360c01b613f9a565b5b5b80612b405750612b2333610900565b8015612b3f5750612b3e6777d0513cc85b13d160c01b613f9a565b5b5b612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690615cde565b60405180910390fd5b612b9367023020f196fe710560c01b6106fa565b565b612ba967595c0e9f3251c28760c01b613174565b612bbd676c9e8facf275455460c01b613174565b612bd1675fd1ba867bad8d9060c01b613174565b612be5675d4405176a4c718660c01b613174565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90615d4a565b60405180910390fd5b612c67678d884950e2a04aa760c01b613174565b612c7b672dca0c18590376fc60c01b613174565b612c8f67a4f7a20d65860e4d60c01b613174565b612ca3675167170fc48a61af60c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615db6565b60405180910390fd5b612d4367d711364ae0826ec060c01b613174565b612d57670a57bd871732b8ad60c01b613174565b612d6b675d1d32267273ab9260c01b613174565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612d9a9190615a88565b60405180910390a1612db667dcc232605f03b59860c01b613174565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e256731b64f8837124c3160c01b6106fa565b612e3967648db564106906a760c01b6106fa565b612e4d67c4dbbfd60bd1214960c01b6106fa565b612e616701512b58157c381b60c01b6106fa565b612e69612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612eb35750612eb26747f66328b063331a60c01b613f9a565b5b80612edf5750612ec23361189f565b8015612ede5750612edd67e429b1ab88ceb31060c01b613f9a565b5b5b612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590615e48565b60405180910390fd5b612f326762f06635bf7b4acd60c01b6106fa565b565b612f4867bdfd46f0589b81c760c01b6106fa565b612f5c67b0457063cebd82a360c01b6106fa565b612f70675b626d0fcf3aa6ce60c01b6106fa565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051612f9991906153ac565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b5091509150612ff4672fb56cccf4f3b66560c01b6106fa565b6130086747166df0733c52e860c01b6106fa565b8161303d576130216719461c9227bd654a60c01b6106fa565b6130356767b989a4f1f2a8f560c01b6106fa565b805160208201fd5b61305167c859f4ceb5b7418760c01b6106fa565b5050505050565b61306c67851edf0db3fe6a8060c01b6106fa565b61308067765412b7902e3abf60c01b6106fa565b61309467151d6c3106b9e49760c01b6106fa565b6130a8671b070d07d4380e9a60c01b6106fa565b6130b13361189f565b80156130cd57506130cc67d5ef82e5a5d379e060c01b613f9a565b5b8061311f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561311e575061311d670cc2ae0862027a8c60c01b613f9a565b5b5b61315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615eb4565b60405180910390fd5b61317267362a52eb7781e15260c01b6106fa565b565b50565b60006131a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6131e2675b243153b1324c8660c01b6106fa565b6131f667703050f3f8cbae0160c01b6106fa565b61320a67096f3ba87c8df4a960c01b6106fa565b61321e67360d12c388c6eb2e60c01b6106fa565b613226613058565b50565b6132557f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613faf565b60000160009054906101000a900460ff16156132795761327483613fb9565b613392565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132e157506040513d601f19601f820116820180604052508101906132de9190615ee9565b60015b613320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331790615f88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c9061601a565b60405180910390fd5b50613391838383614072565b5b505050565b50565b6133ae67e67927338dfde90a60c01b613397565b6133c2670e51b57b7e9b4da560c01b613397565b6133d667e3f66e826ec687ff60c01b613397565b6133ea6792d1df458e7acb7960c01b613397565b6133f2612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461345f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613456906160ac565b60405180910390fd5b61347367f59af56761c9812d60c01b613397565b565b600061348b67c29ba408c7eee76560c01b6106fa565b61349f673c1aef8cecb8edf860c01b6106fa565b6134b367edc08ed16faddf6a60c01b6106fa565b60006134be8361409e565b90506134d467fcbbf19e6a4683c460c01b6106fa565b6134e86765a9159f51e099f460c01b6106fa565b613556613551858061014001906134ff9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836140ce90919063ffffffff16565b61189f565b6135a05761356e67682feb9fbb195d8360c01b6106fa565b61358267514af5066901f36e60c01b6106fa565b613596670bad72a866512a0460c01b6106fa565b60019150506135e2565b6135b467025800585b55a6ff60c01b6106fa565b6135c86705b3b124a394a8c460c01b6106fa565b6135dc678bad695b7ee735c860c01b6106fa565b60009150505b92915050565b6135fc67f347b6eb768867bd60c01b6106fa565b61361067e4b8fad4d2d1902a60c01b6106fa565b6136246722ce8514c24b563d60c01b6106fa565b613638676bd35fd711427f6d60c01b6106fa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613667906160e4565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136da90616164565b60405180910390fd5b6136f7675143066244fa845f60c01b6106fa565b50565b61370e67cc5c47196db5bd6160c01b613397565b613722678b55e749b3c352ab60c01b613397565b61373667e6442311764077fa60c01b613397565b6000811461382357613752671589e0478f7a186060c01b613397565b61376667d37e8b3807985e7360c01b613397565b61377a67c2c62d2bb50a980360c01b613397565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516137c2906161aa565b600060405180830381858888f193505050503d8060008114613800576040519150601f19603f3d011682016040523d82523d6000602084013e613805565b606091505b5050905061381d6714643eaa19656f6660c01b613397565b50613838565b61383767cc382f158ab6697a60c01b613397565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138726703748e24ba0bf9ec60c01b6106fa565b613886670bc8db960be8c07860c01b6106fa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138db67019acf8eca98742f60c01b6106fa565b6138ef67ffb0ee9b4a9774fe60c01b6106fa565b6138f8816139a0565b61390c675b78c5bf4202c90360c01b6106fa565b6139206725b6d74483d24a8260c01b6106fa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139b46717c7d6a68a08773960c01b613174565b6139c867cc8de6b882acb1a360c01b613174565b6139dc671ec2242cb4213daf60c01b613174565b6139f067e7bfe4742339224760c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a749061620b565b60405180910390fd5b613a91676270d7427db14f5b60c01b613174565b613aa56704aa357520b4416d60c01b613174565b613ab9672b9382deb815da6060c01b613174565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613ae89190615a88565b60405180910390a1613b0467c36c72a8ecc3a90660c01b613174565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b7267c36ba9a4464b6ea960c01b612a20565b613b8667dbc59bf60721ec3760c01b612a20565b613b9a67a9b899a25d7f84f360c01b612a20565b613bae676ccf2b04ef43fe2c60c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3190616277565b60405180910390fd5b613c4e677f234f21a7a7167460c01b612a20565b613c62675dad748d723fc1a560c01b612a20565b613c7667bcc423d1b918455e60c01b612a20565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613ca59190615a88565b60405180910390a1613cc167ea5e8a43da197a0d60c01b612a20565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613d3067473271421f468fd260c01b612a20565b613d446792976a0e8d69a1f860c01b612a20565b613d586722fdc4cd5a73662060c01b612a20565b613d6c677f1705d0822221e360c01b612a20565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290616309565b60405180910390fd5b613def67d29ec12c81e5975160c01b612a20565b613e03675ce58ff31b29be9c60c01b612a20565b613e1767e300c4231196178660c01b612a20565b613e2b6756d066aad6d03b2860c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eaf90616375565b60405180910390fd5b613ecc67ceace18cb99efb4860c01b612a20565b613ee067b298b03df19232ce60c01b612a20565b613ef46771c3a697a02cf77360c01b612a20565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613f239190615a88565b60405180910390a1613f3f673094a602565cca5360c01b612a20565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613fc28161383b565b614001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff890616407565b60405180910390fd5b8061402e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61407b836140f5565b6000825111806140885750805b15614099576140978383614144565b505b505050565b6000816040516020016140b1919061649f565b604051602081830303815290604052805190602001209050919050565b60008060006140dd8585614171565b915091506140ea816141c2565b819250505092915050565b6140fe81613fb9565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614169838360405180606001604052806027815260200161673160279139614328565b905092915050565b60008060418351036141b25760008060006020860151925060408601519150606086015160001a90506141a6878285856143ae565b945094505050506141bb565b60006002915091505b9250929050565b600060048111156141d6576141d56164c5565b5b8160048111156141e9576141e86164c5565b5b03156143255760016004811115614203576142026164c5565b5b816004811115614216576142156164c5565b5b03614256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424d90616540565b60405180910390fd5b6002600481111561426a576142696164c5565b5b81600481111561427d5761427c6164c5565b5b036142bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b4906165ac565b60405180910390fd5b600360048111156142d1576142d06164c5565b5b8160048111156142e4576142e36164c5565b5b03614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b9061663e565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161435291906153ac565b600060405180830381855af49150503d806000811461438d576040519150601f19603f3d011682016040523d82523d6000602084013e614392565b606091505b50915091506143a386838387614490565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156143e9576000600391509150614487565b60006001878787876040516000815260200160405260405161440e9493929190615621565b6020604051602081039080840390855afa158015614430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361447e57600060019250925050614487565b80600092509250505b94509492505050565b606083156144f25760008351036144ea576144aa8561383b565b6144e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e0906166aa565b60405180910390fd5b5b8290506144fd565b6144fc8383614505565b5b949350505050565b6000825111156145185781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454c919061670e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459482614569565b9050919050565b6145a481614589565b81146145af57600080fd5b50565b6000813590506145c18161459b565b92915050565b6000819050919050565b6145da816145c7565b81146145e557600080fd5b50565b6000813590506145f7816145d1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614622576146216145fd565b5b8235905067ffffffffffffffff81111561463f5761463e614602565b5b60208301915083600182028301111561465b5761465a614607565b5b9250929050565b60008060008060008060008060c0898b0312156146825761468161455f565b5b60006146908b828c016145b2565b98505060206146a18b828c016145b2565b97505060406146b28b828c016145b2565b96505060606146c38b828c016145e8565b955050608089013567ffffffffffffffff8111156146e4576146e3614564565b5b6146f08b828c0161460c565b945094505060a089013567ffffffffffffffff81111561471357614712614564565b5b61471f8b828c0161460c565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61476681614731565b811461477157600080fd5b50565b6000813590506147838161475d565b92915050565b60006020828403121561479f5761479e61455f565b5b60006147ad84828501614774565b91505092915050565b60008115159050919050565b6147cb816147b6565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6000602082840312156148025761480161455f565b5b6000614810848285016145b2565b91505092915050565b6000806000806000608086880312156148355761483461455f565b5b6000614843888289016145b2565b9550506020614854888289016145b2565b9450506040614865888289016145e8565b935050606086013567ffffffffffffffff81111561488657614885614564565b5b6148928882890161460c565b92509250509295509295909350565b6148aa81614731565b82525050565b60006020820190506148c560008301846148a1565b92915050565b6000819050919050565b6148de816148cb565b81146148e957600080fd5b50565b6000813590506148fb816148d5565b92915050565b61490a816147b6565b811461491557600080fd5b50565b60008135905061492781614901565b92915050565b6000806000806000608086880312156149495761494861455f565b5b6000614957888289016145b2565b9550506020614968888289016148ec565b945050604086013567ffffffffffffffff81111561498957614988614564565b5b6149958882890161460c565b935093505060606149a888828901614918565b9150509295509295909350565b60008083601f8401126149cb576149ca6145fd565b5b8235905067ffffffffffffffff8111156149e8576149e7614602565b5b602083019150836020820283011115614a0457614a03614607565b5b9250929050565b60008083601f840112614a2157614a206145fd565b5b8235905067ffffffffffffffff811115614a3e57614a3d614602565b5b602083019150836020820283011115614a5a57614a59614607565b5b9250929050565b60008060008060408587031215614a7b57614a7a61455f565b5b600085013567ffffffffffffffff811115614a9957614a98614564565b5b614aa5878288016149b5565b9450945050602085013567ffffffffffffffff811115614ac857614ac7614564565b5b614ad487828801614a0b565b925092505092959194509250565b600080fd5b60006101608284031215614afe57614afd614ae2565b5b81905092915050565b600080600060608486031215614b2057614b1f61455f565b5b600084013567ffffffffffffffff811115614b3e57614b3d614564565b5b614b4a86828701614ae7565b9350506020614b5b868287016148ec565b9250506040614b6c868287016145e8565b9150509250925092565b614b7f816145c7565b82525050565b6000602082019050614b9a6000830184614b76565b92915050565b6000614bab82614589565b9050919050565b614bbb81614ba0565b8114614bc657600080fd5b50565b600081359050614bd881614bb2565b92915050565b60008060408385031215614bf557614bf461455f565b5b6000614c0385828601614bc9565b9250506020614c14858286016145b2565b9150509250929050565b6000614c2982614569565b9050919050565b614c3981614c1e565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b60008060408385031215614c7357614c7261455f565b5b6000614c8185828601614c47565b9250506020614c92858286016145e8565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cea82614ca1565b810181811067ffffffffffffffff82111715614d0957614d08614cb2565b5b80604052505050565b6000614d1c614555565b9050614d288282614ce1565b919050565b600067ffffffffffffffff821115614d4857614d47614cb2565b5b614d5182614ca1565b9050602081019050919050565b82818337600083830152505050565b6000614d80614d7b84614d2d565b614d12565b905082815260208101848484011115614d9c57614d9b614c9c565b5b614da7848285614d5e565b509392505050565b600082601f830112614dc457614dc36145fd565b5b8135614dd4848260208601614d6d565b91505092915050565b60008060408385031215614df457614df361455f565b5b6000614e02858286016145b2565b925050602083013567ffffffffffffffff811115614e2357614e22614564565b5b614e2f85828601614daf565b9150509250929050565b614e42816148cb565b82525050565b6000602082019050614e5d6000830184614e39565b92915050565b60008060008060608587031215614e7d57614e7c61455f565b5b6000614e8b878288016145b2565b9450506020614e9c878288016148ec565b935050604085013567ffffffffffffffff811115614ebd57614ebc614564565b5b614ec98782880161460c565b925092505092959194509250565b6000819050919050565b6000614efc614ef7614ef284614569565b614ed7565b614569565b9050919050565b6000614f0e82614ee1565b9050919050565b6000614f2082614f03565b9050919050565b614f3081614f15565b82525050565b6000602082019050614f4b6000830184614f27565b92915050565b60008060008060608587031215614f6b57614f6a61455f565b5b6000614f79878288016145b2565b9450506020614f8a878288016145e8565b935050604085013567ffffffffffffffff811115614fab57614faa614564565b5b614fb78782880161460c565b925092505092959194509250565b60008083601f840112614fdb57614fda6145fd565b5b8235905067ffffffffffffffff811115614ff857614ff7614602565b5b60208301915083602082028301111561501457615013614607565b5b9250929050565b60008060008060008060008060a0898b03121561503b5761503a61455f565b5b60006150498b828c016145b2565b985050602061505a8b828c016145b2565b975050604089013567ffffffffffffffff81111561507b5761507a614564565b5b6150878b828c01614fc5565b9650965050606089013567ffffffffffffffff8111156150aa576150a9614564565b5b6150b68b828c01614fc5565b9450945050608089013567ffffffffffffffff8111156150d9576150d8614564565b5b6150e58b828c0161460c565b92509250509295985092959890939650565b60008060008060008060a087890312156151145761511361455f565b5b600061512289828a016145b2565b965050602061513389828a016145b2565b955050604061514489828a016145e8565b945050606061515589828a016145e8565b935050608087013567ffffffffffffffff81111561517657615175614564565b5b61518289828a0161460c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151cb826145c7565b91506151d6836145c7565b92508282039050818111156151ee576151ed615191565b5b92915050565b600080fd5b600080fd5b60008085851115615212576152116151f4565b5b83861115615223576152226151f9565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061525d8383615239565b8261526881356148cb565b925060208210156152a8576152a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615244565b831692505b505092915050565b6000806000606084860312156152c9576152c861455f565b5b60006152d786828701614c47565b935050602084013567ffffffffffffffff8111156152f8576152f7614564565b5b61530486828701614daf565b925050604084013567ffffffffffffffff81111561532557615324614564565b5b61533186828701614daf565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561536f578082015181840152602081019050615354565b60008484015250505050565b60006153868261533b565b6153908185615346565b93506153a0818560208601615351565b80840191505092915050565b60006153b8828461537b565b915081905092915050565b600082825260208201905092915050565b60006153df8261533b565b6153e981856153c3565b93506153f9818560208601615351565b61540281614ca1565b840191505092915050565b6000602082019050818103600083015261542781846153d4565b905092915050565b60006040820190506154446000830185614e39565b818103602083015261545681846153d4565b90509392505050565b60008151905061546e8161475d565b92915050565b60006020828403121561548a5761548961455f565b5b60006154988482850161545f565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061550e603a836154a1565b9150615519826154b2565b604082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006155cf602d836154a1565b91506155da82615573565b604082019050919050565b600060208201905081810360008301526155fe816155c2565b9050919050565b600060ff82169050919050565b61561b81615605565b82525050565b60006080820190506156366000830187614e39565b6156436020830186615612565b6156506040830185614e39565b61565d6060830184614e39565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006156c26033836154a1565b91506156cd82615666565b604082019050919050565b600060208201905081810360008301526156f1816156b5565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615724576157236156f8565b5b80840192508235915067ffffffffffffffff821115615746576157456156fd565b5b60208301925060018202360383131561576257615761615702565b5b509250929050565b6000615775826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157a7576157a6615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061580e6033836154a1565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b61584d81614589565b82525050565b60006040820190506158686000830185615844565b6158756020830184615844565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006158d8602c836154a1565b91506158e38261587c565b604082019050919050565b60006020820190508181036000830152615907816158cb565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061596a602c836154a1565b91506159758261590e565b604082019050919050565b600060208201905081810360008301526159998161595d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006159fc602e836154a1565b9150615a07826159a0565b604082019050919050565b60006020820190508181036000830152615a2b816159ef565b9050919050565b6000819050919050565b6000615a57615a52615a4d84615a32565b614ed7565b615605565b9050919050565b615a6781615a3c565b82525050565b6000602082019050615a826000830184615a5e565b92915050565b6000602082019050615a9d6000830184615844565b92915050565b615aac81614c1e565b82525050565b6000604082019050615ac76000830185615aa3565b615ad46020830184614b76565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615b376038836154a1565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b6000615b7983856153c3565b9350615b86838584614d5e565b615b8f83614ca1565b840190509392505050565b6000608082019050615baf6000830188615844565b615bbc6020830187614e39565b8181036040830152615bcf818587615b6d565b9050615bde60608301846147c2565b9695505050505050565b600081519050615bf781614901565b92915050565b600060208284031215615c1357615c1261455f565b5b6000615c2184828501615be8565b91505092915050565b600081519050615c39816145d1565b92915050565b600060208284031215615c5557615c5461455f565b5b6000615c6384828501615c2a565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615cc86028836154a1565b9150615cd382615c6c565b604082019050919050565b60006020820190508181036000830152615cf781615cbb565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615d34601a836154a1565b9150615d3f82615cfe565b602082019050919050565b60006020820190508181036000830152615d6381615d27565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615da0601b836154a1565b9150615dab82615d6a565b602082019050919050565b60006020820190508181036000830152615dcf81615d93565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615e326029836154a1565b9150615e3d82615dd6565b604082019050919050565b60006020820190508181036000830152615e6181615e25565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615e9e601c836154a1565b9150615ea982615e68565b602082019050919050565b60006020820190508181036000830152615ecd81615e91565b9050919050565b600081519050615ee3816148d5565b92915050565b600060208284031215615eff57615efe61455f565b5b6000615f0d84828501615ed4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615f72602e836154a1565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006160046029836154a1565b915061600f82615fa8565b604082019050919050565b6000602082019050818103600083015261603381615ff7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006160966024836154a1565b91506160a18261603a565b604082019050919050565b600060208201905081810360008301526160c581616089565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006160ef826160cc565b91506bffffffffffffffffffffffff820361610d5761610c615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061614e601f836154a1565b915061615982616118565b602082019050919050565b6000602082019050818103600083015261617d81616141565b9050919050565b50565b6000616194600083615346565b915061619f82616184565b600082019050919050565b60006161b582616187565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006161f56018836154a1565b9150616200826161bf565b602082019050919050565b60006020820190508181036000830152616224816161e8565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006162616020836154a1565b915061626c8261622b565b602082019050919050565b6000602082019050818103600083015261629081616254565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006162f36028836154a1565b91506162fe82616297565b604082019050919050565b60006020820190508181036000830152616322816162e6565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061635f601c836154a1565b915061636a82616329565b602082019050919050565b6000602082019050818103600083015261638e81616352565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006163f1602d836154a1565b91506163fc82616395565b604082019050919050565b60006020820190508181036000830152616420816163e4565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616468601c83616427565b915061647382616432565b601c82019050919050565b6000819050919050565b616499616494826148cb565b61647e565b82525050565b60006164aa8261645b565b91506164b68284616488565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061652a6018836154a1565b9150616535826164f4565b602082019050919050565b600060208201905081810360008301526165598161651d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000616596601f836154a1565b91506165a182616560565b602082019050919050565b600060208201905081810360008301526165c581616589565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006166286022836154a1565b9150616633826165cc565b604082019050919050565b600060208201905081810360008301526166578161661b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616694601d836154a1565b915061669f8261665e565b602082019050919050565b600060208201905081810360008301526166c381616687565b9050919050565b600081519050919050565b60006166e0826166ca565b6166ea81856154a1565b93506166fa818560208601615351565b61670381614ca1565b840191505092915050565b6000602082019050818103600083015261672881846166d5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220409e8d136ed140ff75f4fa7a004a6a1dfe99e425561980f54e6553e5fa38328a64736f6c63430008110033"; + +type AccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: AccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class AccountFactory__factory extends ContractFactory { + constructor(...args: AccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): AccountFactory { + return super.attach(address) as AccountFactory; + } + override connect(signer: Signer): AccountFactory__factory { + return super.connect(signer) as AccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): AccountFactoryInterface { + return new utils.Interface(_abi) as AccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): AccountFactory { + return new Contract(address, _abi, signerOrProvider) as AccountFactory; + } +} diff --git a/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts b/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts index 04f86d0c..0ff475f0 100644 --- a/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts +++ b/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts @@ -35,11 +35,6 @@ const _abi = [ name: "_entryPoint", type: "address", }, - { - internalType: "address", - name: "_registry", - type: "address", - }, { internalType: "address", name: "owner", @@ -69,11 +64,6 @@ const _abi = [ name: "_entryPoint", type: "address", }, - { - internalType: "address", - name: "_registry", - type: "address", - }, { internalType: "address", name: "owner", @@ -99,7 +89,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b5060405161001d90610072565b604051809103906000f080158015610039573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505061007f565b613e2b8061147183390190565b6080516113ca6100a76000396000818160db01528181610147015261023e01526113ca6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806311464fbe146200004b57806361b36f4b146200006d5780639f3ee0f914620000a3575b600080fd5b62000055620000d9565b604051620000649190620003ef565b60405180910390f35b6200008b6004803603810190620000859190620004d6565b620000fd565b6040516200009a9190620003ef565b60405180910390f35b620000c16004803603810190620000bb9190620004d6565b6200020c565b604051620000d0919062000559565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806200010e868686866200020c565b905060008173ffffffffffffffffffffffffffffffffffffffff163b905060008111156200014157819250505062000204565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200017d93929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620001d09062000356565b620001dd92919062000690565b8190604051809103906000f5905080158015620001fe573d6000803e3d6000fd5b50925050505b949350505050565b60006200030a8260001b60405180602001620002289062000356565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008888886040516024016200027493929190620005af565b60405160208183030381529060405263c0c53b8b60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620002cc92919062000690565b604051602081830303815290604052604051602001620002ee92919062000706565b6040516020818303038152906040528051906020012062000314565b9050949350505050565b6000620003238383306200032b565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c66806200072f83390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620003af620003a9620003a38462000364565b62000384565b62000364565b9050919050565b6000620003c3826200038e565b9050919050565b6000620003d782620003b6565b9050919050565b620003e981620003ca565b82525050565b6000602082019050620004066000830184620003de565b92915050565b600080fd5b60006200041e8262000364565b9050919050565b6000620004328262000411565b9050919050565b620004448162000425565b81146200045057600080fd5b50565b600081359050620004648162000439565b92915050565b620004758162000411565b81146200048157600080fd5b50565b60008135905062000495816200046a565b92915050565b6000819050919050565b620004b0816200049b565b8114620004bc57600080fd5b50565b600081359050620004d081620004a5565b92915050565b60008060008060808587031215620004f357620004f26200040c565b5b6000620005038782880162000453565b9450506020620005168782880162000484565b9350506040620005298782880162000484565b92505060606200053c87828801620004bf565b91505092959194509250565b620005538162000411565b82525050565b600060208201905062000570600083018462000548565b92915050565b600062000583826200038e565b9050919050565b6000620005978262000576565b9050919050565b620005a9816200058a565b82525050565b6000606082019050620005c660008301866200059e565b620005d5602083018562000548565b620005e4604083018462000548565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620006285780820151818401526020810190506200060b565b8381111562000638576000848401525b50505050565b6000601f19601f8301169050919050565b60006200065c82620005ec565b620006688185620005f7565b93506200067a81856020860162000608565b62000685816200063e565b840191505092915050565b6000604082019050620006a7600083018562000548565b8181036020830152620006bb81846200064f565b90509392505050565b600081905092915050565b6000620006dc82620005ec565b620006e88185620006c4565b9350620006fa81856020860162000608565b80840191505092915050565b6000620007148285620006cf565b9150620007228284620006cf565b9150819050939250505056fe608060405260405162000c6638038062000c6683398181016040528101906200002991906200058b565b6200003d828260006200004560201b60201c565b5050620007e2565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c3f60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000678565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006e7565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031b576000835114156200031257620002cf856200027d60201b60201c565b62000311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003089062000750565b60405180910390fd5b5b8290506200032e565b6200032d83836200033660201b60201c565b5b949350505050565b6000825111156200034a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809190620007be565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003ca826200039d565b9050919050565b620003dc81620003bd565b8114620003e857600080fd5b50565b600081519050620003fc81620003d1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000457826200040c565b810181811067ffffffffffffffff821117156200047957620004786200041d565b5b80604052505050565b60006200048e62000389565b90506200049c82826200044c565b919050565b600067ffffffffffffffff821115620004bf57620004be6200041d565b5b620004ca826200040c565b9050602081019050919050565b60005b83811015620004f7578082015181840152602081019050620004da565b8381111562000507576000848401525b50505050565b6000620005246200051e84620004a1565b62000482565b90508281526020810184848401111562000543576200054262000407565b5b62000550848285620004d7565b509392505050565b600082601f83011262000570576200056f62000402565b5b8151620005828482602086016200050d565b91505092915050565b60008060408385031215620005a557620005a462000393565b5b6000620005b585828601620003eb565b925050602083015167ffffffffffffffff811115620005d957620005d862000398565b5b620005e78582860162000558565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000660602d83620005f1565b91506200066d8262000602565b604082019050919050565b60006020820190508181036000830152620006938162000651565b9050919050565b600081519050919050565b600081905092915050565b6000620006bd826200069a565b620006c98185620006a5565b9350620006db818560208601620004d7565b80840191505092915050565b6000620006f58284620006b0565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062000738601d83620005f1565b9150620007458262000700565b602082019050919050565b600060208201905081810360008301526200076b8162000729565b9050919050565b600081519050919050565b60006200078a8262000772565b620007968185620005f1565b9350620007a8818560208601620004d7565b620007b3816200040c565b840191505092915050565b60006020820190508181036000830152620007da81846200077d565b905092915050565b61044d80620007f26000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103f1602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102e5565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060831561020857600083511415610200576101c085610064565b6101ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f690610359565b60405180910390fd5b5b829050610213565b610212838361021b565b5b949350505050565b60008251111561022e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026291906103ce565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029f578082015181840152602081019050610284565b838111156102ae576000848401525b50505050565b60006102bf8261026b565b6102c98185610276565b93506102d9818560208601610281565b80840191505092915050565b60006102f182846102b4565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610343601d836102fc565b915061034e8261030d565b602082019050919050565b6000602082019050818103600083015261037281610336565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103a082610379565b6103aa81856102fc565b93506103ba818560208601610281565b6103c381610384565b840191505092915050565b600060208201905081810360008301526103e88184610395565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220212497a92c006ce41f95a03fd2317be7b99240bb86e076ac010ef5f4df71d3f064736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212202f917c1c52a3384037df5caca942a270e7da463181c73e9b6c215b0dec0ab73c64736f6c634300080c003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613db061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613db06000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612230565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a91906122ff565b61059d565b6040516101ac91906123c2565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612413565b6105b2565b6040516101e991906123c2565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061251f565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906125a0565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906125a0565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906125cd565b6109d2565b6040516102a191906123c2565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc919061264e565b610ab8565b6040516102de919061269d565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906125a0565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906126dd565b610cd9565b604051610344919061275b565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906127b4565b610d98565b005b61039a60048036038101906103959190612935565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be919061269d565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906129a0565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906129a0565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906129a0565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a919061275b565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612a1a565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612a35565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190612ae7565b611138565b005b3480156104fc57600080fd5b50610505611281565b604051610512919061275b565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612b3a565b611309565b60405161054f91906123c2565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612bd4565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612c49565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612cc1565b6106665763ffffffff60e01b61068c565b60405160200161067590612d45565b604051602081830303815290604052805190602001205b90509392505050565b61069d61131f565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612ddd565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612dfd565b5b905060200201602081019061071e91906125a0565b600085858581811061073357610732612dfd565b5b90506020028101906107459190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b808061079890612ecd565b9150506106e8565b5050505050565b6107af611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612f88565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612fa8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90613043565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612fa8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190613063565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612cc1565b610a885763ffffffff60e01b610aae565b604051602001610a97906130f8565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca90613159565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906131ba565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906132d3565b60405180910390fd5b610c7d81611591565b610cd681600067ffffffffffffffff811115610c9c57610c9b61280a565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b50600061159c565b50565b6000610ce361170a565b610ced8484611781565b90506000848060400190610d019190612e3b565b90501415610d1357610d128461185f565b5b610d1c8261190d565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906129a0565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611472565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613302565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee661153a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906132d3565b60405180910390fd5b610f4582611591565b610f518282600161159c565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061339d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361131f565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b50505050565b60008060159054906101000a900460ff1615905080801561116b57506001600060149054906101000a900460ff1660ff16105b8061119a575061117a306119a9565b15801561119957506001600060149054906101000a900460ff1660ff16145b5b6111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d09061342f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611217576001600060156101000a81548160ff0219169083151502179055505b6112228484846119cc565b801561127b5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112729190613497565b60405180910390a15b50505050565b600061128b6110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112c391906129a0565b602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130491906134c7565b905090565b600063f23a6e6160e01b90509695505050505050565b6113276110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ad57506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613566565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114179190613600565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508161146b57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114f957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613663565b60405180910390fd5b565b60006115687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611599611472565b50565b6115c87f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b72565b60000160009054906101000a900460ff16156115ec576115e783611b7c565b611705565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561165457506040513d601f19601f820116820180604052508101906116519190613698565b60015b611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613737565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906137c9565b60405180910390fd5b50611704838383611c35565b5b505050565b6117126110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061385b565b60405180910390fd5b565b60008061178d83611c61565b90506117f5848061014001906117a39190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611c9190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576001915050611859565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff168092919061188e90613893565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613914565b60405180910390fd5b50565b600081146119a65760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161195d9061395a565b600060405180830381858888f193505050503d806000811461199b576040519150601f19603f3d011682016040523d82523d6000602084013e6119a0565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b85816119a9565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb906139e1565b60405180910390fd5b80611bf17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3e83611cb8565b600082511180611c4b5750805b15611c5c57611c5a8383611d07565b505b505050565b600081604051602001611c749190613a6e565b604051602081830303815290604052805190602001209050919050565b6000806000611ca08585611d34565b91509150611cad81611d86565b819250505092915050565b611cc181611b7c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d2c8383604051806060016040528060278152602001613d5460279139611ef4565b905092915050565b600080604183511415611d765760008060006020860151925060408601519150606086015160001a9050611d6a87828585611f7a565b94509450505050611d7f565b60006002915091505b9250929050565b60006004811115611d9a57611d99613a94565b5b816004811115611dad57611dac613a94565b5b1415611db857611ef1565b60016004811115611dcc57611dcb613a94565b5b816004811115611ddf57611dde613a94565b5b1415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613b0f565b60405180910390fd5b60026004811115611e3457611e33613a94565b5b816004811115611e4757611e46613a94565b5b1415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613b7b565b60405180910390fd5b60036004811115611e9c57611e9b613a94565b5b816004811115611eaf57611eae613a94565b5b1415611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613c0d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f1e9190613600565b600060405180830381855af49150503d8060008114611f59576040519150601f19603f3d011682016040523d82523d6000602084013e611f5e565b606091505b5091509150611f6f8683838761205d565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611fb5576000600391509150612054565b600060018787878760405160008152602001604052604051611fda9493929190613c3c565b6020604051602081039080840390855afa158015611ffc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204b57600060019250925050612054565b80600092509250505b94509492505050565b606083156120c0576000835114156120b857612078856119a9565b6120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613ccd565b60405180910390fd5b5b8290506120cb565b6120ca83836120d3565b5b949350505050565b6000825111156120e65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190613d31565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216282612137565b9050919050565b61217281612157565b811461217d57600080fd5b50565b60008135905061218f81612169565b92915050565b6000819050919050565b6121a881612195565b81146121b357600080fd5b50565b6000813590506121c58161219f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f0576121ef6121cb565b5b8235905067ffffffffffffffff81111561220d5761220c6121d0565b5b602083019150836001820283011115612229576122286121d5565b5b9250929050565b60008060008060008060008060c0898b0312156122505761224f61212d565b5b600061225e8b828c01612180565b985050602061226f8b828c01612180565b97505060406122808b828c01612180565b96505060606122918b828c016121b6565b955050608089013567ffffffffffffffff8111156122b2576122b1612132565b5b6122be8b828c016121da565b945094505060a089013567ffffffffffffffff8111156122e1576122e0612132565b5b6122ed8b828c016121da565b92509250509295985092959890939650565b60008060008060006080868803121561231b5761231a61212d565b5b600061232988828901612180565b955050602061233a88828901612180565b945050604061234b888289016121b6565b935050606086013567ffffffffffffffff81111561236c5761236b612132565b5b612378888289016121da565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123bc81612387565b82525050565b60006020820190506123d760008301846123b3565b92915050565b6000819050919050565b6123f0816123dd565b81146123fb57600080fd5b50565b60008135905061240d816123e7565b92915050565b60008060006040848603121561242c5761242b61212d565b5b600061243a868287016123fe565b935050602084013567ffffffffffffffff81111561245b5761245a612132565b5b612467868287016121da565b92509250509250925092565b60008083601f840112612489576124886121cb565b5b8235905067ffffffffffffffff8111156124a6576124a56121d0565b5b6020830191508360208202830111156124c2576124c16121d5565b5b9250929050565b60008083601f8401126124df576124de6121cb565b5b8235905067ffffffffffffffff8111156124fc576124fb6121d0565b5b602083019150836020820283011115612518576125176121d5565b5b9250929050565b600080600080604085870312156125395761253861212d565b5b600085013567ffffffffffffffff81111561255757612556612132565b5b61256387828801612473565b9450945050602085013567ffffffffffffffff81111561258657612585612132565b5b612592878288016124c9565b925092505092959194509250565b6000602082840312156125b6576125b561212d565b5b60006125c484828501612180565b91505092915050565b600080600080604085870312156125e7576125e661212d565b5b600085013567ffffffffffffffff81111561260557612604612132565b5b612611878288016121da565b9450945050602085013567ffffffffffffffff81111561263457612633612132565b5b612640878288016121da565b925092505092959194509250565b600080604083850312156126655761266461212d565b5b6000612673858286016123fe565b925050602061268485828601612180565b9150509250929050565b612697816123dd565b82525050565b60006020820190506126b2600083018461268e565b92915050565b600080fd5b600061016082840312156126d4576126d36126b8565b5b81905092915050565b6000806000606084860312156126f6576126f561212d565b5b600084013567ffffffffffffffff81111561271457612713612132565b5b612720868287016126bd565b9350506020612731868287016123fe565b9250506040612742868287016121b6565b9150509250925092565b61275581612195565b82525050565b6000602082019050612770600083018461274c565b92915050565b600061278182612137565b9050919050565b61279181612776565b811461279c57600080fd5b50565b6000813590506127ae81612788565b92915050565b600080604083850312156127cb576127ca61212d565b5b60006127d98582860161279f565b92505060206127ea858286016121b6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612842826127f9565b810181811067ffffffffffffffff821117156128615761286061280a565b5b80604052505050565b6000612874612123565b90506128808282612839565b919050565b600067ffffffffffffffff8211156128a05761289f61280a565b5b6128a9826127f9565b9050602081019050919050565b82818337600083830152505050565b60006128d86128d384612885565b61286a565b9050828152602081018484840111156128f4576128f36127f4565b5b6128ff8482856128b6565b509392505050565b600082601f83011261291c5761291b6121cb565b5b813561292c8482602086016128c5565b91505092915050565b6000806040838503121561294c5761294b61212d565b5b600061295a85828601612180565b925050602083013567ffffffffffffffff81111561297b5761297a612132565b5b61298785828601612907565b9150509250929050565b61299a81612157565b82525050565b60006020820190506129b56000830184612991565b92915050565b6000819050919050565b60006129e06129db6129d684612137565b6129bb565b612137565b9050919050565b60006129f2826129c5565b9050919050565b6000612a04826129e7565b9050919050565b612a14816129f9565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b60008060008060608587031215612a4f57612a4e61212d565b5b6000612a5d87828801612180565b9450506020612a6e878288016121b6565b935050604085013567ffffffffffffffff811115612a8f57612a8e612132565b5b612a9b878288016121da565b925092505092959194509250565b6000612ab482612157565b9050919050565b612ac481612aa9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b600080600060608486031215612b0057612aff61212d565b5b6000612b0e86828701612ad2565b9350506020612b1f86828701612180565b9250506040612b3086828701612180565b9150509250925092565b60008060008060008060a08789031215612b5757612b5661212d565b5b6000612b6589828a01612180565b9650506020612b7689828a01612180565b9550506040612b8789828a016121b6565b9450506060612b9889828a016121b6565b935050608087013567ffffffffffffffff811115612bb957612bb8612132565b5b612bc589828a016121da565b92509250509295509295509295565b6000606082019050612be96000830186612991565b612bf66020830185612991565b612c03604083018461274c565b949350505050565b600082825260208201905092915050565b6000612c288385612c0b565b9350612c358385846128b6565b612c3e836127f9565b840190509392505050565b6000606082019050612c5e6000830187612991565b612c6b602083018661268e565b8181036040830152612c7e818486612c1c565b905095945050505050565b60008115159050919050565b612c9e81612c89565b8114612ca957600080fd5b50565b600081519050612cbb81612c95565b92915050565b600060208284031215612cd757612cd661212d565b5b6000612ce584828501612cac565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612d2f601f83612cee565b9150612d3a82612cf9565b601f82019050919050565b6000612d5082612d22565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612dc7603383612d5a565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e5857612e57612e2c565b5b80840192508235915067ffffffffffffffff821115612e7a57612e79612e31565b5b602083019250600182023603831315612e9657612e95612e36565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ed882612195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f0b57612f0a612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612f72603183612d5a565b9150612f7d82612f16565b604082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000604082019050612fbd6000830185612991565b612fca6020830184612991565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061302d603383612d5a565b915061303882612fd1565b604082019050919050565b6000602082019050818103600083015261305c81613020565b9050919050565b60006060820190506130786000830188612991565b818103602083015261308b818688612c1c565b905081810360408301526130a0818486612c1c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006130e2601d83612cee565b91506130ed826130ac565b601d82019050919050565b6000613103826130d5565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613143601583612cee565b915061314e8261310d565b601582019050919050565b600061316482613136565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006131a4601483612cee565b91506131af8261316e565b601482019050919050565b60006131c582613197565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061322b602c83612d5a565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006132bd602c83612d5a565b91506132c882613261565b604082019050919050565b600060208201905081810360008301526132ec816132b0565b9050919050565b6132fc81612776565b82525050565b600060408201905061331760008301856132f3565b613324602083018461274c565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613387603883612d5a565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613419602e83612d5a565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b6000819050919050565b600060ff82169050919050565b600061348161347c6134778461344f565b6129bb565b613459565b9050919050565b61349181613466565b82525050565b60006020820190506134ac6000830184613488565b92915050565b6000815190506134c18161219f565b92915050565b6000602082840312156134dd576134dc61212d565b5b60006134eb848285016134b2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613550602983612d5a565b915061355b826134f4565b604082019050919050565b6000602082019050818103600083015261357f81613543565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b838111156135c9576000848401525b50505050565b60006135da82613586565b6135e48185613591565b93506135f481856020860161359c565b80840191505092915050565b600061360c82846135cf565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061364d601c83612d5a565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b600081519050613692816123e7565b92915050565b6000602082840312156136ae576136ad61212d565b5b60006136bc84828501613683565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613721602e83612d5a565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006137b3602983612d5a565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613845602483612d5a565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061389e8261387b565b91506bffffffffffffffffffffffff8214156138bd576138bc612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006138fe601f83612d5a565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b50565b6000613944600083613591565b915061394f82613934565b600082019050919050565b600061396582613937565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006139cb602d83612d5a565b91506139d68261396f565b604082019050919050565b600060208201905081810360008301526139fa816139be565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613a37601c83612cee565b9150613a4282613a01565b601c82019050919050565b6000819050919050565b613a68613a63826123dd565b613a4d565b82525050565b6000613a7982613a2a565b9150613a858284613a57565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613af9601883612d5a565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613b65601f83612d5a565b9150613b7082613b2f565b602082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf7602283612d5a565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b613c3681613459565b82525050565b6000608082019050613c51600083018761268e565b613c5e6020830186613c2d565b613c6b604083018561268e565b613c78606083018461268e565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613cb7601d83612d5a565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b9050919050565b600081519050919050565b6000613d0382613ced565b613d0d8185612d5a565b9350613d1d81856020860161359c565b613d26816127f9565b840191505092915050565b60006020820190508181036000830152613d4b8184613cf8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e7b3cca3e2571b62a7891f31e01656f6dc5f558347db439841ba2e83c7a052a64736f6c634300080c0033"; + "0x60a060405234801561001057600080fd5b5061002b67f1d5a5fca7afb46e60c01b6100a660201b60201c565b61004567d20ca9b6ca34e81560c01b6100a660201b60201c565b604051610051906100a9565b604051809103906000f08015801561006d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506100b6565b50565b616a22806115ab83390190565b6080516114cc6100df6000396000818161014d01528181610222015261039601526114cc6000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c806308a6354e146200004b57806311464fbe14620000815780631230aea214620000a3575b600080fd5b62000069600480360381019062000063919062000595565b620000d9565b60405162000078919062000602565b60405180910390f35b6200008b62000220565b6040516200009a91906200068a565b60405180910390f35b620000c16004803603810190620000bb919062000595565b62000244565b604051620000d091906200068a565b60405180910390f35b6000620000f167ac15e5093a03741c60c01b62000458565b6200010767aac1dd9d2e71e43760c01b62000458565b6200011d670c94381102378a3c60c01b62000458565b620002178260001b6040518060200162000137906200049d565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000878760405160240162000181929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051602001620001d9929190620007a7565b604051602081830303815290604052604051602001620001fb9291906200081d565b604051602081830303815290604052805190602001206200045b565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006200025c67a139644d6f58f90a60c01b62000458565b62000272678c4c8fa60f849b2560c01b62000458565b6200028867beb5f7ea5c1dc43a60c01b62000458565b600062000297858585620000d9565b9050620002af675c85a10f3e4ba77660c01b62000458565b620002c5671e19aede16a6c92460c01b62000458565b60008173ffffffffffffffffffffffffffffffffffffffff163b9050620002f76794617911b1a6163260c01b62000458565b6200030d67c450e2b17e74966060c01b62000458565b600081111562000364576200032d67c03ad20fad49d46360c01b62000458565b62000343670406286f1ec2e42160c01b62000458565b62000359672d534cb370b5282360c01b62000458565b819250505062000451565b6200037a67c0d1c03c8e389f9d60c01b62000458565b62000390673030005a11b8926f60c01b62000458565b8360001b7f00000000000000000000000000000000000000000000000000000000000000008787604051602401620003ca929190620006e0565b60405160208183030381529060405263485cc95560e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200041d906200049d565b6200042a929190620007a7565b8190604051809103906000f59050801580156200044b573d6000803e3d6000fd5b50925050505b9392505050565b50565b60006200046a83833062000472565b905092915050565b6000604051836040820152846020820152828152600b810160ff815360558120925050509392505050565b610c51806200084683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004dd82620004b0565b9050919050565b6000620004f182620004d0565b9050919050565b6200050381620004e4565b81146200050f57600080fd5b50565b6000813590506200052381620004f8565b92915050565b6200053481620004d0565b81146200054057600080fd5b50565b600081359050620005548162000529565b92915050565b6000819050919050565b6200056f816200055a565b81146200057b57600080fd5b50565b6000813590506200058f8162000564565b92915050565b600080600060608486031215620005b157620005b0620004ab565b5b6000620005c18682870162000512565b9350506020620005d48682870162000543565b9250506040620005e7868287016200057e565b9150509250925092565b620005fc81620004d0565b82525050565b6000602082019050620006196000830184620005f1565b92915050565b6000819050919050565b60006200064a620006446200063e84620004b0565b6200061f565b620004b0565b9050919050565b60006200065e8262000629565b9050919050565b6000620006728262000651565b9050919050565b620006848162000665565b82525050565b6000602082019050620006a1600083018462000679565b92915050565b6000620006b48262000629565b9050919050565b6000620006c882620006a7565b9050919050565b620006da81620006bb565b82525050565b6000604082019050620006f76000830185620006cf565b620007066020830184620005f1565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620007495780820151818401526020810190506200072c565b60008484015250505050565b6000601f19601f8301169050919050565b600062000773826200070d565b6200077f818562000718565b93506200079181856020860162000729565b6200079c8162000755565b840191505092915050565b6000604082019050620007be6000830185620005f1565b8181036020830152620007d2818462000766565b90509392505050565b600081905092915050565b6000620007f3826200070d565b620007ff8185620007db565b93506200081181856020860162000729565b80840191505092915050565b60006200082b8285620007e6565b9150620008398284620007e6565b9150819050939250505056fe608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220773026539aa251fd395be446e9d674791bd85b01a9c5800d37f058d94ff172b764736f6c6343000811003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000616777bd353ae5f6f4b860c01b620000af60201b60201c565b6200007d67f4849dbf6086b19760c01b620000af60201b60201c565b62000099671331b88614a8024260c01b620000af60201b60201c565b620000a9620000b260201b60201c565b6200025d565b50565b600060019054906101000a900460ff161562000105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fc9062000200565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001775760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200016e919062000240565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b6000620001e860278362000179565b9150620001f5826200018a565b604082019050919050565b600060208201905081810360008301526200021b81620001d9565b9050919050565b600060ff82169050919050565b6200023a8162000222565b82525050565b60006020820190506200025760008301846200022f565b92915050565b60805161678d6200029560003960008181611933015281816119c101528181611f840152818161201201526120c2015261678d6000f3fe60806040526004361061019f5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f61461062c578063bc197c8114610655578063c399ec8814610692578063f23a6e61146106bd576101fe565b8063a526d83b146105ad578063affed0e0146105d6578063b0d691fe14610601576101fe565b80637065cb48116100c65780637065cb48146104e1578063714041561461050a5780638f0684301461053357806398ef1ed814610570576101fe565b80634d44560d146104715780634f1ef2861461049a57806352d1902d146104b6576101fe565b806318dfb3c7116101595780633659cfe6116101335780633659cfe6146103d85780633a871cdd14610401578063485cc9551461043e5780634a58db1914610467576101fe565b806318dfb3c7146103495780631b71bb6e146103725780632f54bf6e1461039b576101fe565b806223de291461020357806301ffc9a71461022c5780630c68ba2114610269578063150b7a02146102a657806316d43401146102e3578063173825d914610320576101fe565b366101fe576101b867290bbd319612162360c01b6106fa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190614662565b6106fd565b005b34801561023857600080fd5b50610253600480360381019061024e9190614789565b61071b565b60405161026091906147d1565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906147ec565b610900565b60405161029d91906147d1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190614819565b610992565b6040516102da91906148b0565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061492d565b6109e2565b60405161031791906147d1565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906147ec565b6113bb565b005b34801561035557600080fd5b50610370600480360381019061036b9190614a61565b611483565b005b34801561037e57600080fd5b50610399600480360381019061039491906147ec565b6116c1565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906147ec565b61189f565b6040516103cf91906147d1565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906147ec565b611931565b005b34801561040d57600080fd5b5061042860048036038101906104239190614b07565b611ab9565b6040516104359190614b85565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614bde565b611bf7565b005b61046f611d9d565b005b34801561047d57600080fd5b5061049860048036038101906104939190614c5c565b611e4e565b005b6104b460048036038101906104af9190614ddd565b611f82565b005b3480156104c257600080fd5b506104cb6120be565b6040516104d89190614e48565b60405180910390f35b3480156104ed57600080fd5b50610508600480360381019061050391906147ec565b612177565b005b34801561051657600080fd5b50610531600480360381019061052c91906147ec565b61223f565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614e63565b612307565b60405161056791906147d1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614e63565b6123d4565b6040516105a491906147d1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906147ec565b6125fd565b005b3480156105e257600080fd5b506105eb6126c5565b6040516105f89190614b85565b60405180910390f35b34801561060d57600080fd5b50610616612731565b6040516106239190614f36565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190614f51565b612797565b005b34801561066157600080fd5b5061067c6004803603810190610677919061501b565b6128a8565b60405161068991906148b0565b60405180910390f35b34801561069e57600080fd5b506106a76128fc565b6040516106b49190614b85565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906150f7565b6129c0565b6040516106f191906148b0565b60405180910390f35b50565b610711671278753381487ed660c01b612a12565b5050505050505050565b600061073167f20d647ea02d480060c01b612a12565b61074567ffb589296d687db060c01b612a12565b6107596727ecf9b318901df560c01b612a12565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156107d657506107d5675d4be9b73183ad3f60c01b612a15565b5b8061087657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108595750610858674cb5733a4ebd736b60c01b612a15565b5b8015610875575061087467927753031b1e765d60c01b612a15565b5b5b806108f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108f857506108f766bc16169e90631c60c01b612a15565b5b5b9050919050565b6000610916679a530c869daa649060c01b612a20565b61092a677819779a5121f4ad60c01b612a20565b61093e67dcc814792f5595a060c01b612a20565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109a76642558288c0c26a60c01b612a12565b6109bb670cd59c881166cff460c01b612a12565b6109cf67d8d160ce8c3ef4cc60c01b612a12565b63150b7a0260e01b905095945050505050565b60006109f86777258f39a67c0acd60c01b612a23565b610a0c67c9d3460cf31b367060c01b612a23565b610a2067301450deda14998860c01b612a23565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a5067ec35fa0e327aba3360c01b612a23565b610a646757c603851350fa0960c01b612a23565b6060610a7a67ed7102d9c731614b60c01b612a23565b610a8e67260c95324dc5522a60c01b612a23565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610ac691906151c0565b908a8a905092610ad8939291906151fe565b90610ae39190615251565b149050610afa67adb0f8e971c6f00460c01b612a23565b610b0e6775ac95bff94d832360c01b612a23565b8015610d5b57610b2867b7ce1fa3f7f6604d60c01b612a23565b610b3c679fc1490a6707ce8260c01b612a23565b610b50679cbd4322f03dcb3060c01b612a23565b6000610b66677c50636fd0d78e6e60c01b612a23565b610b7a67b6c96f6498872fdd60c01b612a23565b6060610b9067d225012c278bc14960c01b612a23565b888860009060208c8c9050610ba591906151c0565b92610bb2939291906151fe565b810190610bbf91906152b0565b809650819350829450505050610bdf67414eafbc10d5dfd460c01b612a23565b610bf3679735072f1875e8c560c01b612a23565b60008503610d3f57610c0f67ece2f114e83cba5460c01b612a23565b610c2367bb4b7709950fab6560c01b612a23565b610c3767e556fd7ed728116b60c01b612a23565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c5f91906153ac565b6000604051808303816000865af19150503d8060008114610c9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ca1565b606091505b5091509150610cba675bb7adbcacc27af760c01b612a23565b610cce67925a11ac41b1a62f60c01b612a23565b81610d2457610ce7674b9b350a0c4e240d60c01b612a23565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d1b919061540d565b60405180910390fd5b610d3867270a9300cfb5deb160c01b612a23565b5050610d54565b610d536719ddea40eb9c9d5e60c01b612a23565b5b5050610dcb565b610d6f671617c5f7b544c15460c01b612a23565b610d8367152cf4f885c3c7bd60c01b612a23565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ddf678968ba2400116cd160c01b612a23565b610df367d26f37fb13c4702060c01b612a23565b808015610e105750610e0f67e672c6829c01435e60c01b612a26565b5b80610e375750600083118015610e365750610e35672f1034641526e8e560c01b612a26565b5b5b156110a757610e506787b8bb2f9d833b2360c01b612a23565b610e646748ed04b5790955de60c01b612a23565b610e7867c07d3098ed811b0e60c01b612a23565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610eb392919061542f565b602060405180830381865afa925050508015610eed57506040513d601f19601f82011682018060405250810190610eea9190615474565b60015b610f74573d8060008114610f1d576040519150601f19603f3d011682016040523d82523d6000602084013e610f22565b606091505b50610f37672c516c89798db2e060c01b612a23565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610f6b919061540d565b60405180910390fd5b610f88677a7dc9015ade993760c01b612a23565b610f9c676bd30bd513db1c1260c01b612a23565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050610ffc67f77b76e97cdda63e60c01b612a23565b61101067f2ac3b0c93d4d96060c01b612a23565b60008514801561101d5750825b8015611027575086155b1561105e576110406732203bac67e9a5c660c01b612a23565b61105467bacd05270bf834fa60c01b612a23565b806000526001601ffd5b61107267db508d98998fd4cb60c01b612a23565b61108667bd809f1f7297a39860c01b612a23565b61109a671166c1324f0a4d4360c01b612a23565b80955050505050506113b2565b6110bb67fb73a16ec6f828a360c01b612a23565b6110cf67124b4f67fba3948f60c01b612a23565b6110e367a72081e2c67a966a60c01b612a23565b6110f7670ab810c1358d671760c01b612a23565b6041878790501461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490615524565b60405180910390fd5b61115167c0b4b2b739bdbc3e60c01b612a23565b611165670f81a533fa5be34e60c01b612a23565b61117967657c1339b273a74660c01b612a23565b6000878760009060209261118f939291906151fe565b9061119a9190615251565b90506111b067dc3d3b49fc92cadb60c01b612a23565b6111c46752ae34fa8263b21b60c01b612a23565b600088886020906040926111da939291906151fe565b906111e59190615251565b90506111fb67301232fd22fb824c60c01b612a23565b61120f67f519c889a1cef68c60c01b612a23565b60008989604081811061122557611224615544565b5b9050013560f81c60f81b60f81c9050611248679a20c64fb3f7324360c01b612a23565b61125c678a031af26ced764160c01b612a23565b601b8160ff16141580156112745750601c8160ff1614155b156112f05761128d67cd922db48d204f9b60c01b612a23565b6112a167833a8605e20290ce60c01b612a23565b6112b567b3da6c39eac2834e60c01b612a23565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906155e5565b60405180910390fd5b611304675514297355562d4860c01b612a23565b6113186757b333f889b6e2b360c01b612a23565b61132c676603fc4d7122128560c01b612a23565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113669493929190615621565b6020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6113cf6706cea3225e159afe60c01b6106fa565b6113e367768e02f4b4fe93d060c01b6106fa565b6113f767bcb43f0f61fb5a1260c01b6106fa565b61140b6705112cc091d04b2260c01b6106fa565b611413612a31565b611427677b6146229717de8560c01b6106fa565b61143b671a91445bcd7d6a3660c01b6106fa565b61144f67087786fe3118ce4560c01b6106fa565b6114636712ac3ecdf13b356f60c01b6106fa565b611477676a822ec913ef224160c01b6106fa565b61148081612b95565b50565b611497670b312c177376d2f160c01b6106fa565b6114ab67526a718f37dbef7960c01b6106fa565b6114bf67bc0095b6ec842fe060c01b6106fa565b6114d36765a7b825dc91e38260c01b6106fa565b6114db612e11565b6114ef67e65dfa654e10de0360c01b6106fa565b6115036738751a29e4bbac9a60c01b6106fa565b6115176764a3e3565274624260c01b6106fa565b61152b67e3532f2d278ffcc460c01b6106fa565b61153f67b28c9cc66aedc63960c01b6106fa565b611553674c0d2e74d59320d660c01b6106fa565b81819050848490501461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906156d8565b60405180910390fd5b6115af6733f49bcf3f677de260c01b6106fa565b6115c367fda055a3194df47960c01b6106fa565b6115d7670ca2693ca40a9c3d60c01b6106fa565b60005b848490508110156116ba576115f967e45fe9f7a89384cd60c01b6106fa565b61160d677885f77483c8c7a360c01b6106fa565b6116a785858381811061162357611622615544565b5b905060200201602081019061163891906147ec565b600085858581811061164d5761164c615544565b5b905060200281019061165f9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b80806116b29061576a565b9150506115da565b5050505050565b6116d567b0e8e7fc3aed8bf060c01b6106fa565b6116e9671246157b9919312560c01b6106fa565b6116fd67cbfddca365f5dede60c01b6106fa565b611705613058565b61171967ab4f446b15a2b75360c01b6106fa565b61172d67140f31a12b03a20160c01b6106fa565b61174167c2cd95be620e67ae60c01b6106fa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790615824565b60405180910390fd5b6117c4674b99dae5f525e91060c01b6106fa565b6117d867897f79a11a9b512360c01b6106fa565b6117ec67f01df9d5178d9e0460c01b6106fa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161183f929190615853565b60405180910390a161185b6705fb80e775388d3f60c01b6106fa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006118b56784c34e023fb786f860c01b613174565b6118c9670d806432bac21d3b60c01b613174565b6118dd679da5a6f8cf654dc360c01b613174565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166119fe613177565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90615980565b60405180910390fd5b611a5d816131ce565b611ab681600067ffffffffffffffff811115611a7c57611a7b614cb2565b5b6040519080825280601f01601f191660200182016040528015611aae5781602001600182028036833780820191505090505b506000613229565b50565b6000611acf674a0b745640aaacbe60c01b613397565b611ae3673643bc4d265e004d60c01b613397565b611af767be21e9c3510eef0760c01b613397565b611aff61339a565b611b13670d9ae78f9ca6bca160c01b613397565b611b1d8484613475565b9050611b3367bac743df019f783060c01b613397565b611b47674633441562cbb38260c01b613397565b6000848060400190611b599190615707565b905003611baa57611b7467b9f604ce3adf50f460c01b613397565b611b886740dc8d2be550a2ae60c01b613397565b611b9c678d7f5bf9351f5d3760c01b613397565b611ba5846135e8565b611bbf565b611bbe67493644fd2e2f359760c01b613397565b5b611bd367f86dd1b6eddb849360c01b613397565b611be767e338ec934ff31c9e60c01b613397565b611bf0826136fa565b9392505050565b611c0b67c8d7dd5c6ec287ee60c01b6106fa565b60008060019054906101000a900460ff16159050808015611c3c5750600160008054906101000a900460ff1660ff16105b80611c695750611c4b3061383b565b158015611c685750600160008054906101000a900460ff1660ff16145b5b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90615a12565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611ce5576001600060016101000a81548160ff0219169083151502179055505b611cf967e0a1587b9fff733460c01b6106fa565b611d0d6799f49c2236f581d560c01b6106fa565b611d216713255a13306bce2760c01b6106fa565b611d35679103bdf53b9e3db060c01b6106fa565b611d3f838361385e565b8015611d985760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611d8f9190615a6d565b60405180910390a15b505050565b611db167a987bf12f6bf98ab60c01b6106fa565b611dc5671fbaaa4dbb3f884d60c01b6106fa565b611dd967e797a3f7fa46660c60c01b6106fa565b611de1612731565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e1a9190615a88565b6000604051808303818588803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b5050505050565b611e6267fbabf181d33082b660c01b6106fa565b611e7667bee35484a90cfd2660c01b6106fa565b611e8a673ceb9bb2daab856d60c01b6106fa565b611e9e6791fab911752e5b5c60c01b6106fa565b611ea6613058565b611eba672877b8446bdb5f0060c01b6106fa565b611ece676c6fc7cbb8b3b97860c01b6106fa565b611ee267eb87ca9da684e3db60c01b6106fa565b611ef6673d9d17fec85dda7860c01b6106fa565b611f0a675017b987e5f4e1e060c01b6106fa565b611f12612731565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611f4c929190615ab2565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612007906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661204f613177565b73ffffffffffffffffffffffffffffffffffffffff16146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90615980565b60405180910390fd5b6120ae826131ce565b6120ba82826001613229565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615b4d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61218b67b4c2b632b250bc6360c01b6106fa565b61219f67768e02f4b4fe93d060c01b6106fa565b6121b367bcb43f0f61fb5a1260c01b6106fa565b6121c76705112cc091d04b2260c01b6106fa565b6121cf612a31565b6121e3677b6146229717de8560c01b6106fa565b6121f76732bce9776427685f60c01b6106fa565b61220b675c4d3c86a9602c6f60c01b6106fa565b61221f670877748d77ec420260c01b6106fa565b6122336732ccb44361bec49260c01b6106fa565b61223c816139a0565b50565b612253676bacc25ce52307dd60c01b6106fa565b61226767bee35484a90cfd2660c01b6106fa565b61227b673ceb9bb2daab856d60c01b6106fa565b61228f6791fab911752e5b5c60c01b6106fa565b612297613058565b6122ab672877b8446bdb5f0060c01b6106fa565b6122bf67edec01844939018360c01b6106fa565b6122d3672d1676c1874371c960c01b6106fa565b6122e76767895a735b76188060c01b6106fa565b6122fb6762377381d2b1f71460c01b6106fa565b61230481613b5e565b50565b600061231d67a69e23ef0cf0d80560c01b612a23565b6123316789508a17c1e5baf860c01b612a23565b61234567f0e90fa9dac9b5a260c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612387959493929190615b9a565b6020604051808303816000875af11580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190615bfd565b9050949350505050565b60006123ea678cc395c88e3ae24060c01b612a23565b6123fe670e6cd08ae62d699160c01b612a23565b612412671a6d203d14bbeb3560c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612454959493929190615b9a565b6020604051808303816000875af192505050801561249057506040513d601f19601f8201168201806040525081019061248d9190615bfd565b60015b6125c8573d80600081146124c0576040519150601f19603f3d011682016040523d82523d6000602084013e6124c5565b606091505b506124da6763fa3d4afb8cd55b60c01b612a23565b6124ee67c78e77a5e38dc67760c01b612a23565b60008151905061250867a2319ac582c5f8b960c01b612a23565b61251c679d791f94f379b3d460c01b612a23565b6001810361259c57612538674b6df8afb2c0610f60c01b612a23565b61254c671241dc8732fa093a60c01b612a23565b600160f81b8260008151811061256557612564615544565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506125f5565b6125b067fb87cb9c02294f9f60c01b612a23565b6125c46773311759eab4f85760c01b612a23565b8082fd5b6125dc672f68b0ad8fd39c0a60c01b612a23565b6125f067ba867e4ef348d1a360c01b612a23565b809150505b949350505050565b612611675a98b12456966aba60c01b6106fa565b61262567bee35484a90cfd2660c01b6106fa565b612639673ceb9bb2daab856d60c01b6106fa565b61264d6791fab911752e5b5c60c01b6106fa565b612655613058565b612669672877b8446bdb5f0060c01b6106fa565b61267d67915d8b16ac69ed9860c01b6106fa565b612691671f5e91ee5a02596360c01b6106fa565b6126a5674b8e9096393c06f860c01b6106fa565b6126b967301fc09d047c18d960c01b6106fa565b6126c281613d1c565b50565b60006126db67e6997cbe175ef33460c01b6106fa565b6126ef677a25fccec1173dd960c01b6106fa565b61270367431301e0e2e31e9060c01b6106fa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061274767f561f09cfc8827bd60c01b6106fa565b61275b673350b6d208da79ee60c01b6106fa565b61276f671896327d0b3f375a60c01b6106fa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127ab67e2dda3667fd3757160c01b6106fa565b6127bf67526a718f37dbef7960c01b6106fa565b6127d367bc0095b6ec842fe060c01b6106fa565b6127e76765a7b825dc91e38260c01b6106fa565b6127ef612e11565b61280367e65dfa654e10de0360c01b6106fa565b61281767aeaf6d5fe58842a960c01b6106fa565b61282b67370ad7169464cc0060c01b6106fa565b61283f6739a00ff772ffbf9060c01b6106fa565b6128536792e03ae1c25d108960c01b6106fa565b6128a2848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b50505050565b60006128be67f6036d4dbbf1553b60c01b612a12565b6128d267e574cfd0134a53a360c01b612a12565b6128e667481cad8a93626dbc60c01b612a12565b63bc197c8160e01b905098975050505050505050565b6000612912673908573a227c011760c01b6106fa565b61292667f95a3d25f4a4d56660c01b6106fa565b61293a6701732dbf20a7ffe360c01b6106fa565b612942612731565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161297a9190615a88565b602060405180830381865afa158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb9190615c3f565b905090565b60006129d667d55e6083e458695760c01b612a12565b6129ea67229756682a8526f660c01b612a12565b6129fe672d0f5a7f66d6c2a060c01b612a12565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612a4567216671dc6f7d651060c01b6106fa565b612a5967fc696b44f549a3bd60c01b6106fa565b612a6d677d2f775bb38d794b60c01b6106fa565b612a81672c1b7774324d16e460c01b6106fa565b612a8a3361189f565b8015612aa65750612aa5679d6b1a88bd04a29560c01b613f9a565b5b80612b1457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612af75750612af667c1169fb68056496660c01b613f9a565b5b8015612b135750612b1267290c2b81e499218360c01b613f9a565b5b5b80612b405750612b2333610900565b8015612b3f5750612b3e6777d0513cc85b13d160c01b613f9a565b5b5b612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690615cde565b60405180910390fd5b612b9367023020f196fe710560c01b6106fa565b565b612ba967595c0e9f3251c28760c01b613174565b612bbd676c9e8facf275455460c01b613174565b612bd1675fd1ba867bad8d9060c01b613174565b612be5675d4405176a4c718660c01b613174565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90615d4a565b60405180910390fd5b612c67678d884950e2a04aa760c01b613174565b612c7b672dca0c18590376fc60c01b613174565b612c8f67a4f7a20d65860e4d60c01b613174565b612ca3675167170fc48a61af60c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615db6565b60405180910390fd5b612d4367d711364ae0826ec060c01b613174565b612d57670a57bd871732b8ad60c01b613174565b612d6b675d1d32267273ab9260c01b613174565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612d9a9190615a88565b60405180910390a1612db667dcc232605f03b59860c01b613174565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e256731b64f8837124c3160c01b6106fa565b612e3967648db564106906a760c01b6106fa565b612e4d67c4dbbfd60bd1214960c01b6106fa565b612e616701512b58157c381b60c01b6106fa565b612e69612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612eb35750612eb26747f66328b063331a60c01b613f9a565b5b80612edf5750612ec23361189f565b8015612ede5750612edd67e429b1ab88ceb31060c01b613f9a565b5b5b612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590615e48565b60405180910390fd5b612f326762f06635bf7b4acd60c01b6106fa565b565b612f4867bdfd46f0589b81c760c01b6106fa565b612f5c67b0457063cebd82a360c01b6106fa565b612f70675b626d0fcf3aa6ce60c01b6106fa565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051612f9991906153ac565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b5091509150612ff4672fb56cccf4f3b66560c01b6106fa565b6130086747166df0733c52e860c01b6106fa565b8161303d576130216719461c9227bd654a60c01b6106fa565b6130356767b989a4f1f2a8f560c01b6106fa565b805160208201fd5b61305167c859f4ceb5b7418760c01b6106fa565b5050505050565b61306c67851edf0db3fe6a8060c01b6106fa565b61308067765412b7902e3abf60c01b6106fa565b61309467151d6c3106b9e49760c01b6106fa565b6130a8671b070d07d4380e9a60c01b6106fa565b6130b13361189f565b80156130cd57506130cc67d5ef82e5a5d379e060c01b613f9a565b5b8061311f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561311e575061311d670cc2ae0862027a8c60c01b613f9a565b5b5b61315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615eb4565b60405180910390fd5b61317267362a52eb7781e15260c01b6106fa565b565b50565b60006131a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6131e2675b243153b1324c8660c01b6106fa565b6131f667703050f3f8cbae0160c01b6106fa565b61320a67096f3ba87c8df4a960c01b6106fa565b61321e67360d12c388c6eb2e60c01b6106fa565b613226613058565b50565b6132557f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613faf565b60000160009054906101000a900460ff16156132795761327483613fb9565b613392565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132e157506040513d601f19601f820116820180604052508101906132de9190615ee9565b60015b613320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331790615f88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c9061601a565b60405180910390fd5b50613391838383614072565b5b505050565b50565b6133ae67e67927338dfde90a60c01b613397565b6133c2670e51b57b7e9b4da560c01b613397565b6133d667e3f66e826ec687ff60c01b613397565b6133ea6792d1df458e7acb7960c01b613397565b6133f2612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461345f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613456906160ac565b60405180910390fd5b61347367f59af56761c9812d60c01b613397565b565b600061348b67c29ba408c7eee76560c01b6106fa565b61349f673c1aef8cecb8edf860c01b6106fa565b6134b367edc08ed16faddf6a60c01b6106fa565b60006134be8361409e565b90506134d467fcbbf19e6a4683c460c01b6106fa565b6134e86765a9159f51e099f460c01b6106fa565b613556613551858061014001906134ff9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836140ce90919063ffffffff16565b61189f565b6135a05761356e67682feb9fbb195d8360c01b6106fa565b61358267514af5066901f36e60c01b6106fa565b613596670bad72a866512a0460c01b6106fa565b60019150506135e2565b6135b467025800585b55a6ff60c01b6106fa565b6135c86705b3b124a394a8c460c01b6106fa565b6135dc678bad695b7ee735c860c01b6106fa565b60009150505b92915050565b6135fc67f347b6eb768867bd60c01b6106fa565b61361067e4b8fad4d2d1902a60c01b6106fa565b6136246722ce8514c24b563d60c01b6106fa565b613638676bd35fd711427f6d60c01b6106fa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613667906160e4565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136da90616164565b60405180910390fd5b6136f7675143066244fa845f60c01b6106fa565b50565b61370e67cc5c47196db5bd6160c01b613397565b613722678b55e749b3c352ab60c01b613397565b61373667e6442311764077fa60c01b613397565b6000811461382357613752671589e0478f7a186060c01b613397565b61376667d37e8b3807985e7360c01b613397565b61377a67c2c62d2bb50a980360c01b613397565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516137c2906161aa565b600060405180830381858888f193505050503d8060008114613800576040519150601f19603f3d011682016040523d82523d6000602084013e613805565b606091505b5050905061381d6714643eaa19656f6660c01b613397565b50613838565b61383767cc382f158ab6697a60c01b613397565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138726703748e24ba0bf9ec60c01b6106fa565b613886670bc8db960be8c07860c01b6106fa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138db67019acf8eca98742f60c01b6106fa565b6138ef67ffb0ee9b4a9774fe60c01b6106fa565b6138f8816139a0565b61390c675b78c5bf4202c90360c01b6106fa565b6139206725b6d74483d24a8260c01b6106fa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139b46717c7d6a68a08773960c01b613174565b6139c867cc8de6b882acb1a360c01b613174565b6139dc671ec2242cb4213daf60c01b613174565b6139f067e7bfe4742339224760c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a749061620b565b60405180910390fd5b613a91676270d7427db14f5b60c01b613174565b613aa56704aa357520b4416d60c01b613174565b613ab9672b9382deb815da6060c01b613174565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613ae89190615a88565b60405180910390a1613b0467c36c72a8ecc3a90660c01b613174565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b7267c36ba9a4464b6ea960c01b612a20565b613b8667dbc59bf60721ec3760c01b612a20565b613b9a67a9b899a25d7f84f360c01b612a20565b613bae676ccf2b04ef43fe2c60c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3190616277565b60405180910390fd5b613c4e677f234f21a7a7167460c01b612a20565b613c62675dad748d723fc1a560c01b612a20565b613c7667bcc423d1b918455e60c01b612a20565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613ca59190615a88565b60405180910390a1613cc167ea5e8a43da197a0d60c01b612a20565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613d3067473271421f468fd260c01b612a20565b613d446792976a0e8d69a1f860c01b612a20565b613d586722fdc4cd5a73662060c01b612a20565b613d6c677f1705d0822221e360c01b612a20565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290616309565b60405180910390fd5b613def67d29ec12c81e5975160c01b612a20565b613e03675ce58ff31b29be9c60c01b612a20565b613e1767e300c4231196178660c01b612a20565b613e2b6756d066aad6d03b2860c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eaf90616375565b60405180910390fd5b613ecc67ceace18cb99efb4860c01b612a20565b613ee067b298b03df19232ce60c01b612a20565b613ef46771c3a697a02cf77360c01b612a20565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613f239190615a88565b60405180910390a1613f3f673094a602565cca5360c01b612a20565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613fc28161383b565b614001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff890616407565b60405180910390fd5b8061402e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61407b836140f5565b6000825111806140885750805b15614099576140978383614144565b505b505050565b6000816040516020016140b1919061649f565b604051602081830303815290604052805190602001209050919050565b60008060006140dd8585614171565b915091506140ea816141c2565b819250505092915050565b6140fe81613fb9565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614169838360405180606001604052806027815260200161673160279139614328565b905092915050565b60008060418351036141b25760008060006020860151925060408601519150606086015160001a90506141a6878285856143ae565b945094505050506141bb565b60006002915091505b9250929050565b600060048111156141d6576141d56164c5565b5b8160048111156141e9576141e86164c5565b5b03156143255760016004811115614203576142026164c5565b5b816004811115614216576142156164c5565b5b03614256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424d90616540565b60405180910390fd5b6002600481111561426a576142696164c5565b5b81600481111561427d5761427c6164c5565b5b036142bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b4906165ac565b60405180910390fd5b600360048111156142d1576142d06164c5565b5b8160048111156142e4576142e36164c5565b5b03614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b9061663e565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161435291906153ac565b600060405180830381855af49150503d806000811461438d576040519150601f19603f3d011682016040523d82523d6000602084013e614392565b606091505b50915091506143a386838387614490565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156143e9576000600391509150614487565b60006001878787876040516000815260200160405260405161440e9493929190615621565b6020604051602081039080840390855afa158015614430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361447e57600060019250925050614487565b80600092509250505b94509492505050565b606083156144f25760008351036144ea576144aa8561383b565b6144e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e0906166aa565b60405180910390fd5b5b8290506144fd565b6144fc8383614505565b5b949350505050565b6000825111156145185781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454c919061670e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459482614569565b9050919050565b6145a481614589565b81146145af57600080fd5b50565b6000813590506145c18161459b565b92915050565b6000819050919050565b6145da816145c7565b81146145e557600080fd5b50565b6000813590506145f7816145d1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614622576146216145fd565b5b8235905067ffffffffffffffff81111561463f5761463e614602565b5b60208301915083600182028301111561465b5761465a614607565b5b9250929050565b60008060008060008060008060c0898b0312156146825761468161455f565b5b60006146908b828c016145b2565b98505060206146a18b828c016145b2565b97505060406146b28b828c016145b2565b96505060606146c38b828c016145e8565b955050608089013567ffffffffffffffff8111156146e4576146e3614564565b5b6146f08b828c0161460c565b945094505060a089013567ffffffffffffffff81111561471357614712614564565b5b61471f8b828c0161460c565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61476681614731565b811461477157600080fd5b50565b6000813590506147838161475d565b92915050565b60006020828403121561479f5761479e61455f565b5b60006147ad84828501614774565b91505092915050565b60008115159050919050565b6147cb816147b6565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6000602082840312156148025761480161455f565b5b6000614810848285016145b2565b91505092915050565b6000806000806000608086880312156148355761483461455f565b5b6000614843888289016145b2565b9550506020614854888289016145b2565b9450506040614865888289016145e8565b935050606086013567ffffffffffffffff81111561488657614885614564565b5b6148928882890161460c565b92509250509295509295909350565b6148aa81614731565b82525050565b60006020820190506148c560008301846148a1565b92915050565b6000819050919050565b6148de816148cb565b81146148e957600080fd5b50565b6000813590506148fb816148d5565b92915050565b61490a816147b6565b811461491557600080fd5b50565b60008135905061492781614901565b92915050565b6000806000806000608086880312156149495761494861455f565b5b6000614957888289016145b2565b9550506020614968888289016148ec565b945050604086013567ffffffffffffffff81111561498957614988614564565b5b6149958882890161460c565b935093505060606149a888828901614918565b9150509295509295909350565b60008083601f8401126149cb576149ca6145fd565b5b8235905067ffffffffffffffff8111156149e8576149e7614602565b5b602083019150836020820283011115614a0457614a03614607565b5b9250929050565b60008083601f840112614a2157614a206145fd565b5b8235905067ffffffffffffffff811115614a3e57614a3d614602565b5b602083019150836020820283011115614a5a57614a59614607565b5b9250929050565b60008060008060408587031215614a7b57614a7a61455f565b5b600085013567ffffffffffffffff811115614a9957614a98614564565b5b614aa5878288016149b5565b9450945050602085013567ffffffffffffffff811115614ac857614ac7614564565b5b614ad487828801614a0b565b925092505092959194509250565b600080fd5b60006101608284031215614afe57614afd614ae2565b5b81905092915050565b600080600060608486031215614b2057614b1f61455f565b5b600084013567ffffffffffffffff811115614b3e57614b3d614564565b5b614b4a86828701614ae7565b9350506020614b5b868287016148ec565b9250506040614b6c868287016145e8565b9150509250925092565b614b7f816145c7565b82525050565b6000602082019050614b9a6000830184614b76565b92915050565b6000614bab82614589565b9050919050565b614bbb81614ba0565b8114614bc657600080fd5b50565b600081359050614bd881614bb2565b92915050565b60008060408385031215614bf557614bf461455f565b5b6000614c0385828601614bc9565b9250506020614c14858286016145b2565b9150509250929050565b6000614c2982614569565b9050919050565b614c3981614c1e565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b60008060408385031215614c7357614c7261455f565b5b6000614c8185828601614c47565b9250506020614c92858286016145e8565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cea82614ca1565b810181811067ffffffffffffffff82111715614d0957614d08614cb2565b5b80604052505050565b6000614d1c614555565b9050614d288282614ce1565b919050565b600067ffffffffffffffff821115614d4857614d47614cb2565b5b614d5182614ca1565b9050602081019050919050565b82818337600083830152505050565b6000614d80614d7b84614d2d565b614d12565b905082815260208101848484011115614d9c57614d9b614c9c565b5b614da7848285614d5e565b509392505050565b600082601f830112614dc457614dc36145fd565b5b8135614dd4848260208601614d6d565b91505092915050565b60008060408385031215614df457614df361455f565b5b6000614e02858286016145b2565b925050602083013567ffffffffffffffff811115614e2357614e22614564565b5b614e2f85828601614daf565b9150509250929050565b614e42816148cb565b82525050565b6000602082019050614e5d6000830184614e39565b92915050565b60008060008060608587031215614e7d57614e7c61455f565b5b6000614e8b878288016145b2565b9450506020614e9c878288016148ec565b935050604085013567ffffffffffffffff811115614ebd57614ebc614564565b5b614ec98782880161460c565b925092505092959194509250565b6000819050919050565b6000614efc614ef7614ef284614569565b614ed7565b614569565b9050919050565b6000614f0e82614ee1565b9050919050565b6000614f2082614f03565b9050919050565b614f3081614f15565b82525050565b6000602082019050614f4b6000830184614f27565b92915050565b60008060008060608587031215614f6b57614f6a61455f565b5b6000614f79878288016145b2565b9450506020614f8a878288016145e8565b935050604085013567ffffffffffffffff811115614fab57614faa614564565b5b614fb78782880161460c565b925092505092959194509250565b60008083601f840112614fdb57614fda6145fd565b5b8235905067ffffffffffffffff811115614ff857614ff7614602565b5b60208301915083602082028301111561501457615013614607565b5b9250929050565b60008060008060008060008060a0898b03121561503b5761503a61455f565b5b60006150498b828c016145b2565b985050602061505a8b828c016145b2565b975050604089013567ffffffffffffffff81111561507b5761507a614564565b5b6150878b828c01614fc5565b9650965050606089013567ffffffffffffffff8111156150aa576150a9614564565b5b6150b68b828c01614fc5565b9450945050608089013567ffffffffffffffff8111156150d9576150d8614564565b5b6150e58b828c0161460c565b92509250509295985092959890939650565b60008060008060008060a087890312156151145761511361455f565b5b600061512289828a016145b2565b965050602061513389828a016145b2565b955050604061514489828a016145e8565b945050606061515589828a016145e8565b935050608087013567ffffffffffffffff81111561517657615175614564565b5b61518289828a0161460c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151cb826145c7565b91506151d6836145c7565b92508282039050818111156151ee576151ed615191565b5b92915050565b600080fd5b600080fd5b60008085851115615212576152116151f4565b5b83861115615223576152226151f9565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061525d8383615239565b8261526881356148cb565b925060208210156152a8576152a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615244565b831692505b505092915050565b6000806000606084860312156152c9576152c861455f565b5b60006152d786828701614c47565b935050602084013567ffffffffffffffff8111156152f8576152f7614564565b5b61530486828701614daf565b925050604084013567ffffffffffffffff81111561532557615324614564565b5b61533186828701614daf565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561536f578082015181840152602081019050615354565b60008484015250505050565b60006153868261533b565b6153908185615346565b93506153a0818560208601615351565b80840191505092915050565b60006153b8828461537b565b915081905092915050565b600082825260208201905092915050565b60006153df8261533b565b6153e981856153c3565b93506153f9818560208601615351565b61540281614ca1565b840191505092915050565b6000602082019050818103600083015261542781846153d4565b905092915050565b60006040820190506154446000830185614e39565b818103602083015261545681846153d4565b90509392505050565b60008151905061546e8161475d565b92915050565b60006020828403121561548a5761548961455f565b5b60006154988482850161545f565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061550e603a836154a1565b9150615519826154b2565b604082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006155cf602d836154a1565b91506155da82615573565b604082019050919050565b600060208201905081810360008301526155fe816155c2565b9050919050565b600060ff82169050919050565b61561b81615605565b82525050565b60006080820190506156366000830187614e39565b6156436020830186615612565b6156506040830185614e39565b61565d6060830184614e39565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006156c26033836154a1565b91506156cd82615666565b604082019050919050565b600060208201905081810360008301526156f1816156b5565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615724576157236156f8565b5b80840192508235915067ffffffffffffffff821115615746576157456156fd565b5b60208301925060018202360383131561576257615761615702565b5b509250929050565b6000615775826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157a7576157a6615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061580e6033836154a1565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b61584d81614589565b82525050565b60006040820190506158686000830185615844565b6158756020830184615844565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006158d8602c836154a1565b91506158e38261587c565b604082019050919050565b60006020820190508181036000830152615907816158cb565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061596a602c836154a1565b91506159758261590e565b604082019050919050565b600060208201905081810360008301526159998161595d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006159fc602e836154a1565b9150615a07826159a0565b604082019050919050565b60006020820190508181036000830152615a2b816159ef565b9050919050565b6000819050919050565b6000615a57615a52615a4d84615a32565b614ed7565b615605565b9050919050565b615a6781615a3c565b82525050565b6000602082019050615a826000830184615a5e565b92915050565b6000602082019050615a9d6000830184615844565b92915050565b615aac81614c1e565b82525050565b6000604082019050615ac76000830185615aa3565b615ad46020830184614b76565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615b376038836154a1565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b6000615b7983856153c3565b9350615b86838584614d5e565b615b8f83614ca1565b840190509392505050565b6000608082019050615baf6000830188615844565b615bbc6020830187614e39565b8181036040830152615bcf818587615b6d565b9050615bde60608301846147c2565b9695505050505050565b600081519050615bf781614901565b92915050565b600060208284031215615c1357615c1261455f565b5b6000615c2184828501615be8565b91505092915050565b600081519050615c39816145d1565b92915050565b600060208284031215615c5557615c5461455f565b5b6000615c6384828501615c2a565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615cc86028836154a1565b9150615cd382615c6c565b604082019050919050565b60006020820190508181036000830152615cf781615cbb565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615d34601a836154a1565b9150615d3f82615cfe565b602082019050919050565b60006020820190508181036000830152615d6381615d27565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615da0601b836154a1565b9150615dab82615d6a565b602082019050919050565b60006020820190508181036000830152615dcf81615d93565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615e326029836154a1565b9150615e3d82615dd6565b604082019050919050565b60006020820190508181036000830152615e6181615e25565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615e9e601c836154a1565b9150615ea982615e68565b602082019050919050565b60006020820190508181036000830152615ecd81615e91565b9050919050565b600081519050615ee3816148d5565b92915050565b600060208284031215615eff57615efe61455f565b5b6000615f0d84828501615ed4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615f72602e836154a1565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006160046029836154a1565b915061600f82615fa8565b604082019050919050565b6000602082019050818103600083015261603381615ff7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006160966024836154a1565b91506160a18261603a565b604082019050919050565b600060208201905081810360008301526160c581616089565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006160ef826160cc565b91506bffffffffffffffffffffffff820361610d5761610c615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061614e601f836154a1565b915061615982616118565b602082019050919050565b6000602082019050818103600083015261617d81616141565b9050919050565b50565b6000616194600083615346565b915061619f82616184565b600082019050919050565b60006161b582616187565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006161f56018836154a1565b9150616200826161bf565b602082019050919050565b60006020820190508181036000830152616224816161e8565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006162616020836154a1565b915061626c8261622b565b602082019050919050565b6000602082019050818103600083015261629081616254565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006162f36028836154a1565b91506162fe82616297565b604082019050919050565b60006020820190508181036000830152616322816162e6565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061635f601c836154a1565b915061636a82616329565b602082019050919050565b6000602082019050818103600083015261638e81616352565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006163f1602d836154a1565b91506163fc82616395565b604082019050919050565b60006020820190508181036000830152616420816163e4565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616468601c83616427565b915061647382616432565b601c82019050919050565b6000819050919050565b616499616494826148cb565b61647e565b82525050565b60006164aa8261645b565b91506164b68284616488565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061652a6018836154a1565b9150616535826164f4565b602082019050919050565b600060208201905081810360008301526165598161651d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000616596601f836154a1565b91506165a182616560565b602082019050919050565b600060208201905081810360008301526165c581616589565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006166286022836154a1565b9150616633826165cc565b604082019050919050565b600060208201905081810360008301526166578161661b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616694601d836154a1565b915061669f8261665e565b602082019050919050565b600060208201905081810360008301526166c381616687565b9050919050565b600081519050919050565b60006166e0826166ca565b6166ea81856154a1565b93506166fa818560208601615351565b61670381614ca1565b840191505092915050565b6000602082019050818103600083015261672881846166d5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220409e8d136ed140ff75f4fa7a004a6a1dfe99e425561980f54e6553e5fa38328a64736f6c63430008110033"; type EtherspotWalletFactoryConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts b/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts index fc830432..497a52fc 100644 --- a/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts +++ b/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts @@ -10,6 +10,33 @@ import type { } from "../../../src/wallet/EtherspotWallet"; const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC1271Revert", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "error", + type: "bytes", + }, + ], + name: "ERC6492DeployFailed", + type: "error", + }, { anonymous: false, inputs: [ @@ -48,42 +75,36 @@ const _abi = [ { indexed: false, internalType: "address", - name: "from", + name: "oldEntryPoint", type: "address", }, { indexed: false, internalType: "address", - name: "to", + name: "newEntryPoint", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, ], - name: "ERC777Received", + name: "EntryPointChanged", type: "event", }, { anonymous: false, inputs: [ { - indexed: false, - internalType: "address", - name: "oldEntryPoint", + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", type: "address", }, { - indexed: false, + indexed: true, internalType: "address", - name: "newEntryPoint", + name: "owner", type: "address", }, ], - name: "EntryPointChanged", + name: "EtherspotWalletInitialized", type: "event", }, { @@ -91,24 +112,44 @@ const _abi = [ inputs: [ { indexed: true, - internalType: "contract IEntryPoint", - name: "entryPoint", + internalType: "address", + name: "from", type: "address", }, { indexed: true, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "EtherspotWalletReceived", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, internalType: "address", - name: "registry", + name: "newGuardian", type: "address", }, + ], + name: "GuardianAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { - indexed: true, + indexed: false, internalType: "address", - name: "owner", + name: "removedGuardian", type: "address", }, ], - name: "EtherspotWalletInitialized", + name: "GuardianRemoved", type: "event", }, { @@ -130,17 +171,24 @@ const _abi = [ { indexed: false, internalType: "address", - name: "oldRegistry", + name: "newOwner", type: "address", }, + ], + name: "OwnerAdded", + type: "event", + }, + { + anonymous: false, + inputs: [ { indexed: false, internalType: "address", - name: "newRegistry", + name: "removedOwner", type: "address", }, ], - name: "RegistryChanged", + name: "OwnerRemoved", type: "event", }, { @@ -156,19 +204,6 @@ const _abi = [ name: "Upgraded", type: "event", }, - { - inputs: [], - name: "_registry", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "addDeposit", @@ -178,26 +213,28 @@ const _abi = [ }, { inputs: [ - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, { internalType: "address", - name: "addr", + name: "_newGuardian", type: "address", }, ], - name: "canImplementInterfaceForAddress", - outputs: [ + name: "addGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ { - internalType: "bytes32", - name: "", - type: "bytes32", + internalType: "address", + name: "_newOwner", + type: "address", }, ], - stateMutability: "view", + name: "addOwner", + outputs: [], + stateMutability: "nonpayable", type: "function", }, { @@ -274,11 +311,6 @@ const _abi = [ name: "anEntryPoint", type: "address", }, - { - internalType: "address", - name: "anRegistry", - type: "address", - }, { internalType: "address", name: "anOwner", @@ -292,50 +324,132 @@ const _abi = [ }, { inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isGuardian", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, { internalType: "bytes32", - name: "messageHash", + name: "_hash", type: "bytes32", }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSig", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "message", + name: "_signature", type: "bytes", }, + { + internalType: "bool", + name: "allowSideEffects", + type: "bool", + }, + ], + name: "isValidSigImpl", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_signer", + type: "address", + }, + { + internalType: "bytes32", + name: "_hash", + type: "bytes32", + }, { internalType: "bytes", - name: "signature", + name: "_signature", type: "bytes", }, ], - name: "isValidSignature", + name: "isValidSigWithSideEffects", outputs: [ { - internalType: "bytes4", + internalType: "bool", name: "", - type: "bytes4", + type: "bool", }, ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { @@ -364,14 +478,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { - internalType: "uint256", + internalType: "uint256[]", name: "", - type: "uint256", + type: "uint256[]", }, { internalType: "bytes", @@ -379,7 +493,7 @@ const _abi = [ type: "bytes", }, ], - name: "onERC1155Received", + name: "onERC1155BatchReceived", outputs: [ { internalType: "bytes4", @@ -407,13 +521,18 @@ const _abi = [ name: "", type: "uint256", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, { internalType: "bytes", name: "", type: "bytes", }, ], - name: "onERC721Received", + name: "onERC1155Received", outputs: [ { internalType: "bytes4", @@ -425,16 +544,37 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "owner", - outputs: [ + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, { internalType: "address", name: "", type: "address", }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, ], - stateMutability: "view", + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", type: "function", }, { @@ -451,15 +591,47 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "registry", - outputs: [ + inputs: [ { internalType: "address", - name: "", + name: "_guardian", + type: "address", + }, + ], + name: "removeGuardian", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", type: "address", }, ], + name: "removeOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], stateMutability: "view", type: "function", }, @@ -472,17 +644,17 @@ const _abi = [ }, { internalType: "address", - name: "_from", + name: "", type: "address", }, { internalType: "address", - name: "_to", + name: "", type: "address", }, { internalType: "uint256", - name: "_amount", + name: "", type: "uint256", }, { @@ -498,7 +670,7 @@ const _abi = [ ], name: "tokensReceived", outputs: [], - stateMutability: "nonpayable", + stateMutability: "pure", type: "function", }, { @@ -514,19 +686,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "address", - name: "_newRegistry", - type: "address", - }, - ], - name: "updateRegistry", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, { inputs: [ { @@ -669,7 +828,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b50608051613db061007b60003960008181610b5201528181610be101528181610e1a01528181610ea90152610f590152613db06000f3fe6080604052600436106101435760003560e01c80634d44560d116100b6578063affed0e01161006f578063affed0e014610448578063b0d691fe14610473578063b61d27f61461049e578063c0c53b8b146104c7578063c399ec88146104f0578063f23a6e611461051b5761014a565b80634d44560d146103575780634f1ef2861461038057806352d1902d1461039c57806379cbc5fa146103c75780637b103999146103f25780638da5cb5b1461041d5761014a565b80631b71bb6e116101085780631b71bb6e1461024457806320c13b0b1461026d578063249cb3fa146102aa5780633659cfe6146102e75780633a871cdd146103105780634a58db191461034d5761014a565b806223de291461014f578063150b7a02146101785780631626ba7e146101b557806318dfb3c7146101f25780631a5da6c81461021b5761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612230565b610558565b005b34801561018457600080fd5b5061019f600480360381019061019a91906122ff565b61059d565b6040516101ac91906123c2565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190612413565b6105b2565b6040516101e991906123c2565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061251f565b610695565b005b34801561022757600080fd5b50610242600480360381019061023d91906125a0565b6107a7565b005b34801561025057600080fd5b5061026b600480360381019061026691906125a0565b6108bb565b005b34801561027957600080fd5b50610294600480360381019061028f91906125cd565b6109d2565b6040516102a191906123c2565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc919061264e565b610ab8565b6040516102de919061269d565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906125a0565b610b50565b005b34801561031c57600080fd5b50610337600480360381019061033291906126dd565b610cd9565b604051610344919061275b565b60405180910390f35b610355610d23565b005b34801561036357600080fd5b5061037e600480360381019061037991906127b4565b610d98565b005b61039a60048036038101906103959190612935565b610e18565b005b3480156103a857600080fd5b506103b1610f55565b6040516103be919061269d565b60405180910390f35b3480156103d357600080fd5b506103dc61100e565b6040516103e991906129a0565b60405180910390f35b3480156103fe57600080fd5b50610407611032565b60405161041491906129a0565b60405180910390f35b34801561042957600080fd5b5061043261105b565b60405161043f91906129a0565b60405180910390f35b34801561045457600080fd5b5061045d611081565b60405161046a919061275b565b60405180910390f35b34801561047f57600080fd5b506104886110b1565b6040516104959190612a1a565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190612a35565b6110db565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190612ae7565b611138565b005b3480156104fc57600080fd5b50610505611281565b604051610512919061275b565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612b3a565b611309565b60405161054f91906123c2565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d1565087878760405161058b93929190612bd4565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016106149493929190612c49565b602060405180830381865afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190612cc1565b6106665763ffffffff60e01b61068c565b60405160200161067590612d45565b604051602081830303815290604052805190602001205b90509392505050565b61069d61131f565b8181905084849050146106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc90612ddd565b60405180910390fd5b60005b848490508110156107a05761078d85858381811061070957610708612dfd565b5b905060200201602081019061071e91906125a0565b600085858581811061073357610732612dfd565b5b90506020028101906107459190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b808061079890612ecd565b9150506106e8565b5050505050565b6107af611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612f88565b60405180910390fd5b7f4803049971913703d2dd43c06110dc7fad451e4603e9f485cbeebdda11263ab060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610870929190612fa8565b60405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108c3611472565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90613043565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610986929190612fa8565b60405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610a36959493929190613063565b602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612cc1565b610a885763ffffffff60e01b610aae565b604051602001610a97906130f8565b604051602081830303815290604052805190602001205b9050949350505050565b600080604051602001610aca90613159565b6040516020818303038152906040528051906020012084148015610b1957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610b4657604051602001610b2d906131ba565b6040516020818303038152906040528051906020012090505b8091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1e61153a565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b906132d3565b60405180910390fd5b610c7d81611591565b610cd681600067ffffffffffffffff811115610c9c57610c9b61280a565b5b6040519080825280601f01601f191660200182016040528015610cce5781602001600182028036833780820191505090505b50600061159c565b50565b6000610ce361170a565b610ced8484611781565b90506000848060400190610d019190612e3b565b90501415610d1357610d128461185f565b5b610d1c8261190d565b9392505050565b610d2b6110b1565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401610d6491906129a0565b6000604051808303818588803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b5050505050565b610da0611472565b610da86110b1565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401610de2929190613302565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90613241565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee661153a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f33906132d3565b60405180910390fd5b610f4582611591565b610f518282600161159c565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc9061339d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361131f565b611132848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ee565b50505050565b60008060159054906101000a900460ff1615905080801561116b57506001600060149054906101000a900460ff1660ff16105b8061119a575061117a306119a9565b15801561119957506001600060149054906101000a900460ff1660ff16145b5b6111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d09061342f565b60405180910390fd5b6001600060146101000a81548160ff021916908360ff1602179055508015611217576001600060156101000a81548160ff0219169083151502179055505b6112228484846119cc565b801561127b5760008060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516112729190613497565b60405180910390a15b50505050565b600061128b6110b1565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112c391906129a0565b602060405180830381865afa1580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130491906134c7565b905090565b600063f23a6e6160e01b90509695505050505050565b6113276110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ad57506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613566565b60405180910390fd5b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516114179190613600565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508161146b57805160208201fd5b5050505050565b6003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114f957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90613663565b60405180910390fd5b565b60006115687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611599611472565b50565b6115c87f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b72565b60000160009054906101000a900460ff16156115ec576115e783611b7c565b611705565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561165457506040513d601f19601f820116820180604052508101906116519190613698565b60015b611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90613737565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef906137c9565b60405180910390fd5b50611704838383611c35565b5b505050565b6117126110b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061385b565b60405180910390fd5b565b60008061178d83611c61565b90506117f5848061014001906117a39190612e3b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505082611c9190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff166003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576001915050611859565b60009150505b92915050565b80602001356003600081819054906101000a90046bffffffffffffffffffffffff168092919061188e90613893565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190613914565b60405180910390fd5b50565b600081146119a65760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060405161195d9061395a565b600060405180830381858888f193505050503d806000811461199b576040519150601f19603f3d011682016040523d82523d6000602084013e6119a0565b606091505b50509050505b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f35d446a6e0c2acb669ae5eaa02b6659491c3a4b2e151cf3343aca066f8542e0b60405160405180910390a4505050565b6000819050919050565b6000819050919050565b611b85816119a9565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb906139e1565b60405180910390fd5b80611bf17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b68565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c3e83611cb8565b600082511180611c4b5750805b15611c5c57611c5a8383611d07565b505b505050565b600081604051602001611c749190613a6e565b604051602081830303815290604052805190602001209050919050565b6000806000611ca08585611d34565b91509150611cad81611d86565b819250505092915050565b611cc181611b7c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611d2c8383604051806060016040528060278152602001613d5460279139611ef4565b905092915050565b600080604183511415611d765760008060006020860151925060408601519150606086015160001a9050611d6a87828585611f7a565b94509450505050611d7f565b60006002915091505b9250929050565b60006004811115611d9a57611d99613a94565b5b816004811115611dad57611dac613a94565b5b1415611db857611ef1565b60016004811115611dcc57611dcb613a94565b5b816004811115611ddf57611dde613a94565b5b1415611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1790613b0f565b60405180910390fd5b60026004811115611e3457611e33613a94565b5b816004811115611e4757611e46613a94565b5b1415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f90613b7b565b60405180910390fd5b60036004811115611e9c57611e9b613a94565b5b816004811115611eaf57611eae613a94565b5b1415611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613c0d565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611f1e9190613600565b600060405180830381855af49150503d8060008114611f59576040519150601f19603f3d011682016040523d82523d6000602084013e611f5e565b606091505b5091509150611f6f8683838761205d565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611fb5576000600391509150612054565b600060018787878760405160008152602001604052604051611fda9493929190613c3c565b6020604051602081039080840390855afa158015611ffc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561204b57600060019250925050612054565b80600092509250505b94509492505050565b606083156120c0576000835114156120b857612078856119a9565b6120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613ccd565b60405180910390fd5b5b8290506120cb565b6120ca83836120d3565b5b949350505050565b6000825111156120e65781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a9190613d31565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061216282612137565b9050919050565b61217281612157565b811461217d57600080fd5b50565b60008135905061218f81612169565b92915050565b6000819050919050565b6121a881612195565b81146121b357600080fd5b50565b6000813590506121c58161219f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f0576121ef6121cb565b5b8235905067ffffffffffffffff81111561220d5761220c6121d0565b5b602083019150836001820283011115612229576122286121d5565b5b9250929050565b60008060008060008060008060c0898b0312156122505761224f61212d565b5b600061225e8b828c01612180565b985050602061226f8b828c01612180565b97505060406122808b828c01612180565b96505060606122918b828c016121b6565b955050608089013567ffffffffffffffff8111156122b2576122b1612132565b5b6122be8b828c016121da565b945094505060a089013567ffffffffffffffff8111156122e1576122e0612132565b5b6122ed8b828c016121da565b92509250509295985092959890939650565b60008060008060006080868803121561231b5761231a61212d565b5b600061232988828901612180565b955050602061233a88828901612180565b945050604061234b888289016121b6565b935050606086013567ffffffffffffffff81111561236c5761236b612132565b5b612378888289016121da565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123bc81612387565b82525050565b60006020820190506123d760008301846123b3565b92915050565b6000819050919050565b6123f0816123dd565b81146123fb57600080fd5b50565b60008135905061240d816123e7565b92915050565b60008060006040848603121561242c5761242b61212d565b5b600061243a868287016123fe565b935050602084013567ffffffffffffffff81111561245b5761245a612132565b5b612467868287016121da565b92509250509250925092565b60008083601f840112612489576124886121cb565b5b8235905067ffffffffffffffff8111156124a6576124a56121d0565b5b6020830191508360208202830111156124c2576124c16121d5565b5b9250929050565b60008083601f8401126124df576124de6121cb565b5b8235905067ffffffffffffffff8111156124fc576124fb6121d0565b5b602083019150836020820283011115612518576125176121d5565b5b9250929050565b600080600080604085870312156125395761253861212d565b5b600085013567ffffffffffffffff81111561255757612556612132565b5b61256387828801612473565b9450945050602085013567ffffffffffffffff81111561258657612585612132565b5b612592878288016124c9565b925092505092959194509250565b6000602082840312156125b6576125b561212d565b5b60006125c484828501612180565b91505092915050565b600080600080604085870312156125e7576125e661212d565b5b600085013567ffffffffffffffff81111561260557612604612132565b5b612611878288016121da565b9450945050602085013567ffffffffffffffff81111561263457612633612132565b5b612640878288016121da565b925092505092959194509250565b600080604083850312156126655761266461212d565b5b6000612673858286016123fe565b925050602061268485828601612180565b9150509250929050565b612697816123dd565b82525050565b60006020820190506126b2600083018461268e565b92915050565b600080fd5b600061016082840312156126d4576126d36126b8565b5b81905092915050565b6000806000606084860312156126f6576126f561212d565b5b600084013567ffffffffffffffff81111561271457612713612132565b5b612720868287016126bd565b9350506020612731868287016123fe565b9250506040612742868287016121b6565b9150509250925092565b61275581612195565b82525050565b6000602082019050612770600083018461274c565b92915050565b600061278182612137565b9050919050565b61279181612776565b811461279c57600080fd5b50565b6000813590506127ae81612788565b92915050565b600080604083850312156127cb576127ca61212d565b5b60006127d98582860161279f565b92505060206127ea858286016121b6565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612842826127f9565b810181811067ffffffffffffffff821117156128615761286061280a565b5b80604052505050565b6000612874612123565b90506128808282612839565b919050565b600067ffffffffffffffff8211156128a05761289f61280a565b5b6128a9826127f9565b9050602081019050919050565b82818337600083830152505050565b60006128d86128d384612885565b61286a565b9050828152602081018484840111156128f4576128f36127f4565b5b6128ff8482856128b6565b509392505050565b600082601f83011261291c5761291b6121cb565b5b813561292c8482602086016128c5565b91505092915050565b6000806040838503121561294c5761294b61212d565b5b600061295a85828601612180565b925050602083013567ffffffffffffffff81111561297b5761297a612132565b5b61298785828601612907565b9150509250929050565b61299a81612157565b82525050565b60006020820190506129b56000830184612991565b92915050565b6000819050919050565b60006129e06129db6129d684612137565b6129bb565b612137565b9050919050565b60006129f2826129c5565b9050919050565b6000612a04826129e7565b9050919050565b612a14816129f9565b82525050565b6000602082019050612a2f6000830184612a0b565b92915050565b60008060008060608587031215612a4f57612a4e61212d565b5b6000612a5d87828801612180565b9450506020612a6e878288016121b6565b935050604085013567ffffffffffffffff811115612a8f57612a8e612132565b5b612a9b878288016121da565b925092505092959194509250565b6000612ab482612157565b9050919050565b612ac481612aa9565b8114612acf57600080fd5b50565b600081359050612ae181612abb565b92915050565b600080600060608486031215612b0057612aff61212d565b5b6000612b0e86828701612ad2565b9350506020612b1f86828701612180565b9250506040612b3086828701612180565b9150509250925092565b60008060008060008060a08789031215612b5757612b5661212d565b5b6000612b6589828a01612180565b9650506020612b7689828a01612180565b9550506040612b8789828a016121b6565b9450506060612b9889828a016121b6565b935050608087013567ffffffffffffffff811115612bb957612bb8612132565b5b612bc589828a016121da565b92509250509295509295509295565b6000606082019050612be96000830186612991565b612bf66020830185612991565b612c03604083018461274c565b949350505050565b600082825260208201905092915050565b6000612c288385612c0b565b9350612c358385846128b6565b612c3e836127f9565b840190509392505050565b6000606082019050612c5e6000830187612991565b612c6b602083018661268e565b8181036040830152612c7e818486612c1c565b905095945050505050565b60008115159050919050565b612c9e81612c89565b8114612ca957600080fd5b50565b600081519050612cbb81612c95565b92915050565b600060208284031215612cd757612cd661212d565b5b6000612ce584828501612cac565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000612d2f601f83612cee565b9150612d3a82612cf9565b601f82019050919050565b6000612d5082612d22565b9150819050919050565b600082825260208201905092915050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000612dc7603383612d5a565b9150612dd282612d6b565b604082019050919050565b60006020820190508181036000830152612df681612dba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612e5857612e57612e2c565b5b80840192508235915067ffffffffffffffff821115612e7a57612e79612e31565b5b602083019250600182023603831315612e9657612e95612e36565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ed882612195565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f0b57612f0a612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20526567697374727920616464726560008201527f73732063616e6e6f74206265207a65726f000000000000000000000000000000602082015250565b6000612f72603183612d5a565b9150612f7d82612f16565b604082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000604082019050612fbd6000830185612991565b612fca6020830184612991565b9392505050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061302d603383612d5a565b915061303882612fd1565b604082019050919050565b6000602082019050818103600083015261305c81613020565b9050919050565b60006060820190506130786000830188612991565b818103602083015261308b818688612c1c565b905081810360408301526130a0818486612c1c565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b60006130e2601d83612cee565b91506130ed826130ac565b601d82019050919050565b6000613103826130d5565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000613143601583612cee565b915061314e8261310d565b601582019050919050565b600061316482613136565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b60006131a4601483612cee565b91506131af8261316e565b601482019050919050565b60006131c582613197565b9150819050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061322b602c83612d5a565b9150613236826131cf565b604082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006132bd602c83612d5a565b91506132c882613261565b604082019050919050565b600060208201905081810360008301526132ec816132b0565b9050919050565b6132fc81612776565b82525050565b600060408201905061331760008301856132f3565b613324602083018461274c565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000613387603883612d5a565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613419602e83612d5a565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b6000819050919050565b600060ff82169050919050565b600061348161347c6134778461344f565b6129bb565b613459565b9050919050565b61349181613466565b82525050565b60006020820190506134ac6000830184613488565b92915050565b6000815190506134c18161219f565b92915050565b6000602082840312156134dd576134dc61212d565b5b60006134eb848285016134b2565b91505092915050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000613550602983612d5a565b915061355b826134f4565b604082019050919050565b6000602082019050818103600083015261357f81613543565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156135ba57808201518184015260208101905061359f565b838111156135c9576000848401525b50505050565b60006135da82613586565b6135e48185613591565b93506135f481856020860161359c565b80840191505092915050565b600061360c82846135cf565b915081905092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b600061364d601c83612d5a565b915061365882613617565b602082019050919050565b6000602082019050818103600083015261367c81613640565b9050919050565b600081519050613692816123e7565b92915050565b6000602082840312156136ae576136ad61212d565b5b60006136bc84828501613683565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613721602e83612d5a565b915061372c826136c5565b604082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006137b3602983612d5a565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613845602483612d5a565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600061389e8261387b565b91506bffffffffffffffffffffffff8214156138bd576138bc612e9e565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b60006138fe601f83612d5a565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b50565b6000613944600083613591565b915061394f82613934565b600082019050919050565b600061396582613937565b9150819050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006139cb602d83612d5a565b91506139d68261396f565b604082019050919050565b600060208201905081810360008301526139fa816139be565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613a37601c83612cee565b9150613a4282613a01565b601c82019050919050565b6000819050919050565b613a68613a63826123dd565b613a4d565b82525050565b6000613a7982613a2a565b9150613a858284613a57565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613af9601883612d5a565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613b65601f83612d5a565b9150613b7082613b2f565b602082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf7602283612d5a565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b613c3681613459565b82525050565b6000608082019050613c51600083018761268e565b613c5e6020830186613c2d565b613c6b604083018561268e565b613c78606083018461268e565b95945050505050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613cb7601d83612d5a565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b9050919050565b600081519050919050565b6000613d0382613ced565b613d0d8185612d5a565b9350613d1d81856020860161359c565b613d26816127f9565b840191505092915050565b60006020820190508181036000830152613d4b8184613cf8565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e7b3cca3e2571b62a7891f31e01656f6dc5f558347db439841ba2e83c7a052a64736f6c634300080c0033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000616777bd353ae5f6f4b860c01b620000af60201b60201c565b6200007d67f4849dbf6086b19760c01b620000af60201b60201c565b62000099671331b88614a8024260c01b620000af60201b60201c565b620000a9620000b260201b60201c565b6200025d565b50565b600060019054906101000a900460ff161562000105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fc9062000200565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001775760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200016e919062000240565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b6000620001e860278362000179565b9150620001f5826200018a565b604082019050919050565b600060208201905081810360008301526200021b81620001d9565b9050919050565b600060ff82169050919050565b6200023a8162000222565b82525050565b60006020820190506200025760008301846200022f565b92915050565b60805161678d6200029560003960008181611933015281816119c101528181611f840152818161201201526120c2015261678d6000f3fe60806040526004361061019f5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f61461062c578063bc197c8114610655578063c399ec8814610692578063f23a6e61146106bd576101fe565b8063a526d83b146105ad578063affed0e0146105d6578063b0d691fe14610601576101fe565b80637065cb48116100c65780637065cb48146104e1578063714041561461050a5780638f0684301461053357806398ef1ed814610570576101fe565b80634d44560d146104715780634f1ef2861461049a57806352d1902d146104b6576101fe565b806318dfb3c7116101595780633659cfe6116101335780633659cfe6146103d85780633a871cdd14610401578063485cc9551461043e5780634a58db1914610467576101fe565b806318dfb3c7146103495780631b71bb6e146103725780632f54bf6e1461039b576101fe565b806223de291461020357806301ffc9a71461022c5780630c68ba2114610269578063150b7a02146102a657806316d43401146102e3578063173825d914610320576101fe565b366101fe576101b867290bbd319612162360c01b6106fa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190614662565b6106fd565b005b34801561023857600080fd5b50610253600480360381019061024e9190614789565b61071b565b60405161026091906147d1565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906147ec565b610900565b60405161029d91906147d1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190614819565b610992565b6040516102da91906148b0565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061492d565b6109e2565b60405161031791906147d1565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906147ec565b6113bb565b005b34801561035557600080fd5b50610370600480360381019061036b9190614a61565b611483565b005b34801561037e57600080fd5b50610399600480360381019061039491906147ec565b6116c1565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906147ec565b61189f565b6040516103cf91906147d1565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906147ec565b611931565b005b34801561040d57600080fd5b5061042860048036038101906104239190614b07565b611ab9565b6040516104359190614b85565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614bde565b611bf7565b005b61046f611d9d565b005b34801561047d57600080fd5b5061049860048036038101906104939190614c5c565b611e4e565b005b6104b460048036038101906104af9190614ddd565b611f82565b005b3480156104c257600080fd5b506104cb6120be565b6040516104d89190614e48565b60405180910390f35b3480156104ed57600080fd5b50610508600480360381019061050391906147ec565b612177565b005b34801561051657600080fd5b50610531600480360381019061052c91906147ec565b61223f565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614e63565b612307565b60405161056791906147d1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614e63565b6123d4565b6040516105a491906147d1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906147ec565b6125fd565b005b3480156105e257600080fd5b506105eb6126c5565b6040516105f89190614b85565b60405180910390f35b34801561060d57600080fd5b50610616612731565b6040516106239190614f36565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190614f51565b612797565b005b34801561066157600080fd5b5061067c6004803603810190610677919061501b565b6128a8565b60405161068991906148b0565b60405180910390f35b34801561069e57600080fd5b506106a76128fc565b6040516106b49190614b85565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906150f7565b6129c0565b6040516106f191906148b0565b60405180910390f35b50565b610711671278753381487ed660c01b612a12565b5050505050505050565b600061073167f20d647ea02d480060c01b612a12565b61074567ffb589296d687db060c01b612a12565b6107596727ecf9b318901df560c01b612a12565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156107d657506107d5675d4be9b73183ad3f60c01b612a15565b5b8061087657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108595750610858674cb5733a4ebd736b60c01b612a15565b5b8015610875575061087467927753031b1e765d60c01b612a15565b5b5b806108f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108f857506108f766bc16169e90631c60c01b612a15565b5b5b9050919050565b6000610916679a530c869daa649060c01b612a20565b61092a677819779a5121f4ad60c01b612a20565b61093e67dcc814792f5595a060c01b612a20565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109a76642558288c0c26a60c01b612a12565b6109bb670cd59c881166cff460c01b612a12565b6109cf67d8d160ce8c3ef4cc60c01b612a12565b63150b7a0260e01b905095945050505050565b60006109f86777258f39a67c0acd60c01b612a23565b610a0c67c9d3460cf31b367060c01b612a23565b610a2067301450deda14998860c01b612a23565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a5067ec35fa0e327aba3360c01b612a23565b610a646757c603851350fa0960c01b612a23565b6060610a7a67ed7102d9c731614b60c01b612a23565b610a8e67260c95324dc5522a60c01b612a23565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610ac691906151c0565b908a8a905092610ad8939291906151fe565b90610ae39190615251565b149050610afa67adb0f8e971c6f00460c01b612a23565b610b0e6775ac95bff94d832360c01b612a23565b8015610d5b57610b2867b7ce1fa3f7f6604d60c01b612a23565b610b3c679fc1490a6707ce8260c01b612a23565b610b50679cbd4322f03dcb3060c01b612a23565b6000610b66677c50636fd0d78e6e60c01b612a23565b610b7a67b6c96f6498872fdd60c01b612a23565b6060610b9067d225012c278bc14960c01b612a23565b888860009060208c8c9050610ba591906151c0565b92610bb2939291906151fe565b810190610bbf91906152b0565b809650819350829450505050610bdf67414eafbc10d5dfd460c01b612a23565b610bf3679735072f1875e8c560c01b612a23565b60008503610d3f57610c0f67ece2f114e83cba5460c01b612a23565b610c2367bb4b7709950fab6560c01b612a23565b610c3767e556fd7ed728116b60c01b612a23565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c5f91906153ac565b6000604051808303816000865af19150503d8060008114610c9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ca1565b606091505b5091509150610cba675bb7adbcacc27af760c01b612a23565b610cce67925a11ac41b1a62f60c01b612a23565b81610d2457610ce7674b9b350a0c4e240d60c01b612a23565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d1b919061540d565b60405180910390fd5b610d3867270a9300cfb5deb160c01b612a23565b5050610d54565b610d536719ddea40eb9c9d5e60c01b612a23565b5b5050610dcb565b610d6f671617c5f7b544c15460c01b612a23565b610d8367152cf4f885c3c7bd60c01b612a23565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ddf678968ba2400116cd160c01b612a23565b610df367d26f37fb13c4702060c01b612a23565b808015610e105750610e0f67e672c6829c01435e60c01b612a26565b5b80610e375750600083118015610e365750610e35672f1034641526e8e560c01b612a26565b5b5b156110a757610e506787b8bb2f9d833b2360c01b612a23565b610e646748ed04b5790955de60c01b612a23565b610e7867c07d3098ed811b0e60c01b612a23565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610eb392919061542f565b602060405180830381865afa925050508015610eed57506040513d601f19601f82011682018060405250810190610eea9190615474565b60015b610f74573d8060008114610f1d576040519150601f19603f3d011682016040523d82523d6000602084013e610f22565b606091505b50610f37672c516c89798db2e060c01b612a23565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610f6b919061540d565b60405180910390fd5b610f88677a7dc9015ade993760c01b612a23565b610f9c676bd30bd513db1c1260c01b612a23565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050610ffc67f77b76e97cdda63e60c01b612a23565b61101067f2ac3b0c93d4d96060c01b612a23565b60008514801561101d5750825b8015611027575086155b1561105e576110406732203bac67e9a5c660c01b612a23565b61105467bacd05270bf834fa60c01b612a23565b806000526001601ffd5b61107267db508d98998fd4cb60c01b612a23565b61108667bd809f1f7297a39860c01b612a23565b61109a671166c1324f0a4d4360c01b612a23565b80955050505050506113b2565b6110bb67fb73a16ec6f828a360c01b612a23565b6110cf67124b4f67fba3948f60c01b612a23565b6110e367a72081e2c67a966a60c01b612a23565b6110f7670ab810c1358d671760c01b612a23565b6041878790501461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490615524565b60405180910390fd5b61115167c0b4b2b739bdbc3e60c01b612a23565b611165670f81a533fa5be34e60c01b612a23565b61117967657c1339b273a74660c01b612a23565b6000878760009060209261118f939291906151fe565b9061119a9190615251565b90506111b067dc3d3b49fc92cadb60c01b612a23565b6111c46752ae34fa8263b21b60c01b612a23565b600088886020906040926111da939291906151fe565b906111e59190615251565b90506111fb67301232fd22fb824c60c01b612a23565b61120f67f519c889a1cef68c60c01b612a23565b60008989604081811061122557611224615544565b5b9050013560f81c60f81b60f81c9050611248679a20c64fb3f7324360c01b612a23565b61125c678a031af26ced764160c01b612a23565b601b8160ff16141580156112745750601c8160ff1614155b156112f05761128d67cd922db48d204f9b60c01b612a23565b6112a167833a8605e20290ce60c01b612a23565b6112b567b3da6c39eac2834e60c01b612a23565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906155e5565b60405180910390fd5b611304675514297355562d4860c01b612a23565b6113186757b333f889b6e2b360c01b612a23565b61132c676603fc4d7122128560c01b612a23565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113669493929190615621565b6020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6113cf6706cea3225e159afe60c01b6106fa565b6113e367768e02f4b4fe93d060c01b6106fa565b6113f767bcb43f0f61fb5a1260c01b6106fa565b61140b6705112cc091d04b2260c01b6106fa565b611413612a31565b611427677b6146229717de8560c01b6106fa565b61143b671a91445bcd7d6a3660c01b6106fa565b61144f67087786fe3118ce4560c01b6106fa565b6114636712ac3ecdf13b356f60c01b6106fa565b611477676a822ec913ef224160c01b6106fa565b61148081612b95565b50565b611497670b312c177376d2f160c01b6106fa565b6114ab67526a718f37dbef7960c01b6106fa565b6114bf67bc0095b6ec842fe060c01b6106fa565b6114d36765a7b825dc91e38260c01b6106fa565b6114db612e11565b6114ef67e65dfa654e10de0360c01b6106fa565b6115036738751a29e4bbac9a60c01b6106fa565b6115176764a3e3565274624260c01b6106fa565b61152b67e3532f2d278ffcc460c01b6106fa565b61153f67b28c9cc66aedc63960c01b6106fa565b611553674c0d2e74d59320d660c01b6106fa565b81819050848490501461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906156d8565b60405180910390fd5b6115af6733f49bcf3f677de260c01b6106fa565b6115c367fda055a3194df47960c01b6106fa565b6115d7670ca2693ca40a9c3d60c01b6106fa565b60005b848490508110156116ba576115f967e45fe9f7a89384cd60c01b6106fa565b61160d677885f77483c8c7a360c01b6106fa565b6116a785858381811061162357611622615544565b5b905060200201602081019061163891906147ec565b600085858581811061164d5761164c615544565b5b905060200281019061165f9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b80806116b29061576a565b9150506115da565b5050505050565b6116d567b0e8e7fc3aed8bf060c01b6106fa565b6116e9671246157b9919312560c01b6106fa565b6116fd67cbfddca365f5dede60c01b6106fa565b611705613058565b61171967ab4f446b15a2b75360c01b6106fa565b61172d67140f31a12b03a20160c01b6106fa565b61174167c2cd95be620e67ae60c01b6106fa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790615824565b60405180910390fd5b6117c4674b99dae5f525e91060c01b6106fa565b6117d867897f79a11a9b512360c01b6106fa565b6117ec67f01df9d5178d9e0460c01b6106fa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161183f929190615853565b60405180910390a161185b6705fb80e775388d3f60c01b6106fa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006118b56784c34e023fb786f860c01b613174565b6118c9670d806432bac21d3b60c01b613174565b6118dd679da5a6f8cf654dc360c01b613174565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166119fe613177565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90615980565b60405180910390fd5b611a5d816131ce565b611ab681600067ffffffffffffffff811115611a7c57611a7b614cb2565b5b6040519080825280601f01601f191660200182016040528015611aae5781602001600182028036833780820191505090505b506000613229565b50565b6000611acf674a0b745640aaacbe60c01b613397565b611ae3673643bc4d265e004d60c01b613397565b611af767be21e9c3510eef0760c01b613397565b611aff61339a565b611b13670d9ae78f9ca6bca160c01b613397565b611b1d8484613475565b9050611b3367bac743df019f783060c01b613397565b611b47674633441562cbb38260c01b613397565b6000848060400190611b599190615707565b905003611baa57611b7467b9f604ce3adf50f460c01b613397565b611b886740dc8d2be550a2ae60c01b613397565b611b9c678d7f5bf9351f5d3760c01b613397565b611ba5846135e8565b611bbf565b611bbe67493644fd2e2f359760c01b613397565b5b611bd367f86dd1b6eddb849360c01b613397565b611be767e338ec934ff31c9e60c01b613397565b611bf0826136fa565b9392505050565b611c0b67c8d7dd5c6ec287ee60c01b6106fa565b60008060019054906101000a900460ff16159050808015611c3c5750600160008054906101000a900460ff1660ff16105b80611c695750611c4b3061383b565b158015611c685750600160008054906101000a900460ff1660ff16145b5b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90615a12565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611ce5576001600060016101000a81548160ff0219169083151502179055505b611cf967e0a1587b9fff733460c01b6106fa565b611d0d6799f49c2236f581d560c01b6106fa565b611d216713255a13306bce2760c01b6106fa565b611d35679103bdf53b9e3db060c01b6106fa565b611d3f838361385e565b8015611d985760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611d8f9190615a6d565b60405180910390a15b505050565b611db167a987bf12f6bf98ab60c01b6106fa565b611dc5671fbaaa4dbb3f884d60c01b6106fa565b611dd967e797a3f7fa46660c60c01b6106fa565b611de1612731565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e1a9190615a88565b6000604051808303818588803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b5050505050565b611e6267fbabf181d33082b660c01b6106fa565b611e7667bee35484a90cfd2660c01b6106fa565b611e8a673ceb9bb2daab856d60c01b6106fa565b611e9e6791fab911752e5b5c60c01b6106fa565b611ea6613058565b611eba672877b8446bdb5f0060c01b6106fa565b611ece676c6fc7cbb8b3b97860c01b6106fa565b611ee267eb87ca9da684e3db60c01b6106fa565b611ef6673d9d17fec85dda7860c01b6106fa565b611f0a675017b987e5f4e1e060c01b6106fa565b611f12612731565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611f4c929190615ab2565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612007906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661204f613177565b73ffffffffffffffffffffffffffffffffffffffff16146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90615980565b60405180910390fd5b6120ae826131ce565b6120ba82826001613229565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615b4d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61218b67b4c2b632b250bc6360c01b6106fa565b61219f67768e02f4b4fe93d060c01b6106fa565b6121b367bcb43f0f61fb5a1260c01b6106fa565b6121c76705112cc091d04b2260c01b6106fa565b6121cf612a31565b6121e3677b6146229717de8560c01b6106fa565b6121f76732bce9776427685f60c01b6106fa565b61220b675c4d3c86a9602c6f60c01b6106fa565b61221f670877748d77ec420260c01b6106fa565b6122336732ccb44361bec49260c01b6106fa565b61223c816139a0565b50565b612253676bacc25ce52307dd60c01b6106fa565b61226767bee35484a90cfd2660c01b6106fa565b61227b673ceb9bb2daab856d60c01b6106fa565b61228f6791fab911752e5b5c60c01b6106fa565b612297613058565b6122ab672877b8446bdb5f0060c01b6106fa565b6122bf67edec01844939018360c01b6106fa565b6122d3672d1676c1874371c960c01b6106fa565b6122e76767895a735b76188060c01b6106fa565b6122fb6762377381d2b1f71460c01b6106fa565b61230481613b5e565b50565b600061231d67a69e23ef0cf0d80560c01b612a23565b6123316789508a17c1e5baf860c01b612a23565b61234567f0e90fa9dac9b5a260c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612387959493929190615b9a565b6020604051808303816000875af11580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190615bfd565b9050949350505050565b60006123ea678cc395c88e3ae24060c01b612a23565b6123fe670e6cd08ae62d699160c01b612a23565b612412671a6d203d14bbeb3560c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612454959493929190615b9a565b6020604051808303816000875af192505050801561249057506040513d601f19601f8201168201806040525081019061248d9190615bfd565b60015b6125c8573d80600081146124c0576040519150601f19603f3d011682016040523d82523d6000602084013e6124c5565b606091505b506124da6763fa3d4afb8cd55b60c01b612a23565b6124ee67c78e77a5e38dc67760c01b612a23565b60008151905061250867a2319ac582c5f8b960c01b612a23565b61251c679d791f94f379b3d460c01b612a23565b6001810361259c57612538674b6df8afb2c0610f60c01b612a23565b61254c671241dc8732fa093a60c01b612a23565b600160f81b8260008151811061256557612564615544565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506125f5565b6125b067fb87cb9c02294f9f60c01b612a23565b6125c46773311759eab4f85760c01b612a23565b8082fd5b6125dc672f68b0ad8fd39c0a60c01b612a23565b6125f067ba867e4ef348d1a360c01b612a23565b809150505b949350505050565b612611675a98b12456966aba60c01b6106fa565b61262567bee35484a90cfd2660c01b6106fa565b612639673ceb9bb2daab856d60c01b6106fa565b61264d6791fab911752e5b5c60c01b6106fa565b612655613058565b612669672877b8446bdb5f0060c01b6106fa565b61267d67915d8b16ac69ed9860c01b6106fa565b612691671f5e91ee5a02596360c01b6106fa565b6126a5674b8e9096393c06f860c01b6106fa565b6126b967301fc09d047c18d960c01b6106fa565b6126c281613d1c565b50565b60006126db67e6997cbe175ef33460c01b6106fa565b6126ef677a25fccec1173dd960c01b6106fa565b61270367431301e0e2e31e9060c01b6106fa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061274767f561f09cfc8827bd60c01b6106fa565b61275b673350b6d208da79ee60c01b6106fa565b61276f671896327d0b3f375a60c01b6106fa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127ab67e2dda3667fd3757160c01b6106fa565b6127bf67526a718f37dbef7960c01b6106fa565b6127d367bc0095b6ec842fe060c01b6106fa565b6127e76765a7b825dc91e38260c01b6106fa565b6127ef612e11565b61280367e65dfa654e10de0360c01b6106fa565b61281767aeaf6d5fe58842a960c01b6106fa565b61282b67370ad7169464cc0060c01b6106fa565b61283f6739a00ff772ffbf9060c01b6106fa565b6128536792e03ae1c25d108960c01b6106fa565b6128a2848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b50505050565b60006128be67f6036d4dbbf1553b60c01b612a12565b6128d267e574cfd0134a53a360c01b612a12565b6128e667481cad8a93626dbc60c01b612a12565b63bc197c8160e01b905098975050505050505050565b6000612912673908573a227c011760c01b6106fa565b61292667f95a3d25f4a4d56660c01b6106fa565b61293a6701732dbf20a7ffe360c01b6106fa565b612942612731565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161297a9190615a88565b602060405180830381865afa158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb9190615c3f565b905090565b60006129d667d55e6083e458695760c01b612a12565b6129ea67229756682a8526f660c01b612a12565b6129fe672d0f5a7f66d6c2a060c01b612a12565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612a4567216671dc6f7d651060c01b6106fa565b612a5967fc696b44f549a3bd60c01b6106fa565b612a6d677d2f775bb38d794b60c01b6106fa565b612a81672c1b7774324d16e460c01b6106fa565b612a8a3361189f565b8015612aa65750612aa5679d6b1a88bd04a29560c01b613f9a565b5b80612b1457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612af75750612af667c1169fb68056496660c01b613f9a565b5b8015612b135750612b1267290c2b81e499218360c01b613f9a565b5b5b80612b405750612b2333610900565b8015612b3f5750612b3e6777d0513cc85b13d160c01b613f9a565b5b5b612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690615cde565b60405180910390fd5b612b9367023020f196fe710560c01b6106fa565b565b612ba967595c0e9f3251c28760c01b613174565b612bbd676c9e8facf275455460c01b613174565b612bd1675fd1ba867bad8d9060c01b613174565b612be5675d4405176a4c718660c01b613174565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90615d4a565b60405180910390fd5b612c67678d884950e2a04aa760c01b613174565b612c7b672dca0c18590376fc60c01b613174565b612c8f67a4f7a20d65860e4d60c01b613174565b612ca3675167170fc48a61af60c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615db6565b60405180910390fd5b612d4367d711364ae0826ec060c01b613174565b612d57670a57bd871732b8ad60c01b613174565b612d6b675d1d32267273ab9260c01b613174565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612d9a9190615a88565b60405180910390a1612db667dcc232605f03b59860c01b613174565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e256731b64f8837124c3160c01b6106fa565b612e3967648db564106906a760c01b6106fa565b612e4d67c4dbbfd60bd1214960c01b6106fa565b612e616701512b58157c381b60c01b6106fa565b612e69612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612eb35750612eb26747f66328b063331a60c01b613f9a565b5b80612edf5750612ec23361189f565b8015612ede5750612edd67e429b1ab88ceb31060c01b613f9a565b5b5b612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590615e48565b60405180910390fd5b612f326762f06635bf7b4acd60c01b6106fa565b565b612f4867bdfd46f0589b81c760c01b6106fa565b612f5c67b0457063cebd82a360c01b6106fa565b612f70675b626d0fcf3aa6ce60c01b6106fa565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051612f9991906153ac565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b5091509150612ff4672fb56cccf4f3b66560c01b6106fa565b6130086747166df0733c52e860c01b6106fa565b8161303d576130216719461c9227bd654a60c01b6106fa565b6130356767b989a4f1f2a8f560c01b6106fa565b805160208201fd5b61305167c859f4ceb5b7418760c01b6106fa565b5050505050565b61306c67851edf0db3fe6a8060c01b6106fa565b61308067765412b7902e3abf60c01b6106fa565b61309467151d6c3106b9e49760c01b6106fa565b6130a8671b070d07d4380e9a60c01b6106fa565b6130b13361189f565b80156130cd57506130cc67d5ef82e5a5d379e060c01b613f9a565b5b8061311f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561311e575061311d670cc2ae0862027a8c60c01b613f9a565b5b5b61315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615eb4565b60405180910390fd5b61317267362a52eb7781e15260c01b6106fa565b565b50565b60006131a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6131e2675b243153b1324c8660c01b6106fa565b6131f667703050f3f8cbae0160c01b6106fa565b61320a67096f3ba87c8df4a960c01b6106fa565b61321e67360d12c388c6eb2e60c01b6106fa565b613226613058565b50565b6132557f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613faf565b60000160009054906101000a900460ff16156132795761327483613fb9565b613392565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132e157506040513d601f19601f820116820180604052508101906132de9190615ee9565b60015b613320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331790615f88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c9061601a565b60405180910390fd5b50613391838383614072565b5b505050565b50565b6133ae67e67927338dfde90a60c01b613397565b6133c2670e51b57b7e9b4da560c01b613397565b6133d667e3f66e826ec687ff60c01b613397565b6133ea6792d1df458e7acb7960c01b613397565b6133f2612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461345f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613456906160ac565b60405180910390fd5b61347367f59af56761c9812d60c01b613397565b565b600061348b67c29ba408c7eee76560c01b6106fa565b61349f673c1aef8cecb8edf860c01b6106fa565b6134b367edc08ed16faddf6a60c01b6106fa565b60006134be8361409e565b90506134d467fcbbf19e6a4683c460c01b6106fa565b6134e86765a9159f51e099f460c01b6106fa565b613556613551858061014001906134ff9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836140ce90919063ffffffff16565b61189f565b6135a05761356e67682feb9fbb195d8360c01b6106fa565b61358267514af5066901f36e60c01b6106fa565b613596670bad72a866512a0460c01b6106fa565b60019150506135e2565b6135b467025800585b55a6ff60c01b6106fa565b6135c86705b3b124a394a8c460c01b6106fa565b6135dc678bad695b7ee735c860c01b6106fa565b60009150505b92915050565b6135fc67f347b6eb768867bd60c01b6106fa565b61361067e4b8fad4d2d1902a60c01b6106fa565b6136246722ce8514c24b563d60c01b6106fa565b613638676bd35fd711427f6d60c01b6106fa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613667906160e4565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136da90616164565b60405180910390fd5b6136f7675143066244fa845f60c01b6106fa565b50565b61370e67cc5c47196db5bd6160c01b613397565b613722678b55e749b3c352ab60c01b613397565b61373667e6442311764077fa60c01b613397565b6000811461382357613752671589e0478f7a186060c01b613397565b61376667d37e8b3807985e7360c01b613397565b61377a67c2c62d2bb50a980360c01b613397565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516137c2906161aa565b600060405180830381858888f193505050503d8060008114613800576040519150601f19603f3d011682016040523d82523d6000602084013e613805565b606091505b5050905061381d6714643eaa19656f6660c01b613397565b50613838565b61383767cc382f158ab6697a60c01b613397565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138726703748e24ba0bf9ec60c01b6106fa565b613886670bc8db960be8c07860c01b6106fa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138db67019acf8eca98742f60c01b6106fa565b6138ef67ffb0ee9b4a9774fe60c01b6106fa565b6138f8816139a0565b61390c675b78c5bf4202c90360c01b6106fa565b6139206725b6d74483d24a8260c01b6106fa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139b46717c7d6a68a08773960c01b613174565b6139c867cc8de6b882acb1a360c01b613174565b6139dc671ec2242cb4213daf60c01b613174565b6139f067e7bfe4742339224760c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a749061620b565b60405180910390fd5b613a91676270d7427db14f5b60c01b613174565b613aa56704aa357520b4416d60c01b613174565b613ab9672b9382deb815da6060c01b613174565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613ae89190615a88565b60405180910390a1613b0467c36c72a8ecc3a90660c01b613174565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b7267c36ba9a4464b6ea960c01b612a20565b613b8667dbc59bf60721ec3760c01b612a20565b613b9a67a9b899a25d7f84f360c01b612a20565b613bae676ccf2b04ef43fe2c60c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3190616277565b60405180910390fd5b613c4e677f234f21a7a7167460c01b612a20565b613c62675dad748d723fc1a560c01b612a20565b613c7667bcc423d1b918455e60c01b612a20565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613ca59190615a88565b60405180910390a1613cc167ea5e8a43da197a0d60c01b612a20565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613d3067473271421f468fd260c01b612a20565b613d446792976a0e8d69a1f860c01b612a20565b613d586722fdc4cd5a73662060c01b612a20565b613d6c677f1705d0822221e360c01b612a20565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290616309565b60405180910390fd5b613def67d29ec12c81e5975160c01b612a20565b613e03675ce58ff31b29be9c60c01b612a20565b613e1767e300c4231196178660c01b612a20565b613e2b6756d066aad6d03b2860c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eaf90616375565b60405180910390fd5b613ecc67ceace18cb99efb4860c01b612a20565b613ee067b298b03df19232ce60c01b612a20565b613ef46771c3a697a02cf77360c01b612a20565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613f239190615a88565b60405180910390a1613f3f673094a602565cca5360c01b612a20565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613fc28161383b565b614001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff890616407565b60405180910390fd5b8061402e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61407b836140f5565b6000825111806140885750805b15614099576140978383614144565b505b505050565b6000816040516020016140b1919061649f565b604051602081830303815290604052805190602001209050919050565b60008060006140dd8585614171565b915091506140ea816141c2565b819250505092915050565b6140fe81613fb9565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614169838360405180606001604052806027815260200161673160279139614328565b905092915050565b60008060418351036141b25760008060006020860151925060408601519150606086015160001a90506141a6878285856143ae565b945094505050506141bb565b60006002915091505b9250929050565b600060048111156141d6576141d56164c5565b5b8160048111156141e9576141e86164c5565b5b03156143255760016004811115614203576142026164c5565b5b816004811115614216576142156164c5565b5b03614256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424d90616540565b60405180910390fd5b6002600481111561426a576142696164c5565b5b81600481111561427d5761427c6164c5565b5b036142bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b4906165ac565b60405180910390fd5b600360048111156142d1576142d06164c5565b5b8160048111156142e4576142e36164c5565b5b03614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b9061663e565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161435291906153ac565b600060405180830381855af49150503d806000811461438d576040519150601f19603f3d011682016040523d82523d6000602084013e614392565b606091505b50915091506143a386838387614490565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156143e9576000600391509150614487565b60006001878787876040516000815260200160405260405161440e9493929190615621565b6020604051602081039080840390855afa158015614430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361447e57600060019250925050614487565b80600092509250505b94509492505050565b606083156144f25760008351036144ea576144aa8561383b565b6144e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e0906166aa565b60405180910390fd5b5b8290506144fd565b6144fc8383614505565b5b949350505050565b6000825111156145185781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454c919061670e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459482614569565b9050919050565b6145a481614589565b81146145af57600080fd5b50565b6000813590506145c18161459b565b92915050565b6000819050919050565b6145da816145c7565b81146145e557600080fd5b50565b6000813590506145f7816145d1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614622576146216145fd565b5b8235905067ffffffffffffffff81111561463f5761463e614602565b5b60208301915083600182028301111561465b5761465a614607565b5b9250929050565b60008060008060008060008060c0898b0312156146825761468161455f565b5b60006146908b828c016145b2565b98505060206146a18b828c016145b2565b97505060406146b28b828c016145b2565b96505060606146c38b828c016145e8565b955050608089013567ffffffffffffffff8111156146e4576146e3614564565b5b6146f08b828c0161460c565b945094505060a089013567ffffffffffffffff81111561471357614712614564565b5b61471f8b828c0161460c565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61476681614731565b811461477157600080fd5b50565b6000813590506147838161475d565b92915050565b60006020828403121561479f5761479e61455f565b5b60006147ad84828501614774565b91505092915050565b60008115159050919050565b6147cb816147b6565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6000602082840312156148025761480161455f565b5b6000614810848285016145b2565b91505092915050565b6000806000806000608086880312156148355761483461455f565b5b6000614843888289016145b2565b9550506020614854888289016145b2565b9450506040614865888289016145e8565b935050606086013567ffffffffffffffff81111561488657614885614564565b5b6148928882890161460c565b92509250509295509295909350565b6148aa81614731565b82525050565b60006020820190506148c560008301846148a1565b92915050565b6000819050919050565b6148de816148cb565b81146148e957600080fd5b50565b6000813590506148fb816148d5565b92915050565b61490a816147b6565b811461491557600080fd5b50565b60008135905061492781614901565b92915050565b6000806000806000608086880312156149495761494861455f565b5b6000614957888289016145b2565b9550506020614968888289016148ec565b945050604086013567ffffffffffffffff81111561498957614988614564565b5b6149958882890161460c565b935093505060606149a888828901614918565b9150509295509295909350565b60008083601f8401126149cb576149ca6145fd565b5b8235905067ffffffffffffffff8111156149e8576149e7614602565b5b602083019150836020820283011115614a0457614a03614607565b5b9250929050565b60008083601f840112614a2157614a206145fd565b5b8235905067ffffffffffffffff811115614a3e57614a3d614602565b5b602083019150836020820283011115614a5a57614a59614607565b5b9250929050565b60008060008060408587031215614a7b57614a7a61455f565b5b600085013567ffffffffffffffff811115614a9957614a98614564565b5b614aa5878288016149b5565b9450945050602085013567ffffffffffffffff811115614ac857614ac7614564565b5b614ad487828801614a0b565b925092505092959194509250565b600080fd5b60006101608284031215614afe57614afd614ae2565b5b81905092915050565b600080600060608486031215614b2057614b1f61455f565b5b600084013567ffffffffffffffff811115614b3e57614b3d614564565b5b614b4a86828701614ae7565b9350506020614b5b868287016148ec565b9250506040614b6c868287016145e8565b9150509250925092565b614b7f816145c7565b82525050565b6000602082019050614b9a6000830184614b76565b92915050565b6000614bab82614589565b9050919050565b614bbb81614ba0565b8114614bc657600080fd5b50565b600081359050614bd881614bb2565b92915050565b60008060408385031215614bf557614bf461455f565b5b6000614c0385828601614bc9565b9250506020614c14858286016145b2565b9150509250929050565b6000614c2982614569565b9050919050565b614c3981614c1e565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b60008060408385031215614c7357614c7261455f565b5b6000614c8185828601614c47565b9250506020614c92858286016145e8565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cea82614ca1565b810181811067ffffffffffffffff82111715614d0957614d08614cb2565b5b80604052505050565b6000614d1c614555565b9050614d288282614ce1565b919050565b600067ffffffffffffffff821115614d4857614d47614cb2565b5b614d5182614ca1565b9050602081019050919050565b82818337600083830152505050565b6000614d80614d7b84614d2d565b614d12565b905082815260208101848484011115614d9c57614d9b614c9c565b5b614da7848285614d5e565b509392505050565b600082601f830112614dc457614dc36145fd565b5b8135614dd4848260208601614d6d565b91505092915050565b60008060408385031215614df457614df361455f565b5b6000614e02858286016145b2565b925050602083013567ffffffffffffffff811115614e2357614e22614564565b5b614e2f85828601614daf565b9150509250929050565b614e42816148cb565b82525050565b6000602082019050614e5d6000830184614e39565b92915050565b60008060008060608587031215614e7d57614e7c61455f565b5b6000614e8b878288016145b2565b9450506020614e9c878288016148ec565b935050604085013567ffffffffffffffff811115614ebd57614ebc614564565b5b614ec98782880161460c565b925092505092959194509250565b6000819050919050565b6000614efc614ef7614ef284614569565b614ed7565b614569565b9050919050565b6000614f0e82614ee1565b9050919050565b6000614f2082614f03565b9050919050565b614f3081614f15565b82525050565b6000602082019050614f4b6000830184614f27565b92915050565b60008060008060608587031215614f6b57614f6a61455f565b5b6000614f79878288016145b2565b9450506020614f8a878288016145e8565b935050604085013567ffffffffffffffff811115614fab57614faa614564565b5b614fb78782880161460c565b925092505092959194509250565b60008083601f840112614fdb57614fda6145fd565b5b8235905067ffffffffffffffff811115614ff857614ff7614602565b5b60208301915083602082028301111561501457615013614607565b5b9250929050565b60008060008060008060008060a0898b03121561503b5761503a61455f565b5b60006150498b828c016145b2565b985050602061505a8b828c016145b2565b975050604089013567ffffffffffffffff81111561507b5761507a614564565b5b6150878b828c01614fc5565b9650965050606089013567ffffffffffffffff8111156150aa576150a9614564565b5b6150b68b828c01614fc5565b9450945050608089013567ffffffffffffffff8111156150d9576150d8614564565b5b6150e58b828c0161460c565b92509250509295985092959890939650565b60008060008060008060a087890312156151145761511361455f565b5b600061512289828a016145b2565b965050602061513389828a016145b2565b955050604061514489828a016145e8565b945050606061515589828a016145e8565b935050608087013567ffffffffffffffff81111561517657615175614564565b5b61518289828a0161460c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151cb826145c7565b91506151d6836145c7565b92508282039050818111156151ee576151ed615191565b5b92915050565b600080fd5b600080fd5b60008085851115615212576152116151f4565b5b83861115615223576152226151f9565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061525d8383615239565b8261526881356148cb565b925060208210156152a8576152a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615244565b831692505b505092915050565b6000806000606084860312156152c9576152c861455f565b5b60006152d786828701614c47565b935050602084013567ffffffffffffffff8111156152f8576152f7614564565b5b61530486828701614daf565b925050604084013567ffffffffffffffff81111561532557615324614564565b5b61533186828701614daf565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561536f578082015181840152602081019050615354565b60008484015250505050565b60006153868261533b565b6153908185615346565b93506153a0818560208601615351565b80840191505092915050565b60006153b8828461537b565b915081905092915050565b600082825260208201905092915050565b60006153df8261533b565b6153e981856153c3565b93506153f9818560208601615351565b61540281614ca1565b840191505092915050565b6000602082019050818103600083015261542781846153d4565b905092915050565b60006040820190506154446000830185614e39565b818103602083015261545681846153d4565b90509392505050565b60008151905061546e8161475d565b92915050565b60006020828403121561548a5761548961455f565b5b60006154988482850161545f565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061550e603a836154a1565b9150615519826154b2565b604082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006155cf602d836154a1565b91506155da82615573565b604082019050919050565b600060208201905081810360008301526155fe816155c2565b9050919050565b600060ff82169050919050565b61561b81615605565b82525050565b60006080820190506156366000830187614e39565b6156436020830186615612565b6156506040830185614e39565b61565d6060830184614e39565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006156c26033836154a1565b91506156cd82615666565b604082019050919050565b600060208201905081810360008301526156f1816156b5565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615724576157236156f8565b5b80840192508235915067ffffffffffffffff821115615746576157456156fd565b5b60208301925060018202360383131561576257615761615702565b5b509250929050565b6000615775826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157a7576157a6615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061580e6033836154a1565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b61584d81614589565b82525050565b60006040820190506158686000830185615844565b6158756020830184615844565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006158d8602c836154a1565b91506158e38261587c565b604082019050919050565b60006020820190508181036000830152615907816158cb565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061596a602c836154a1565b91506159758261590e565b604082019050919050565b600060208201905081810360008301526159998161595d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006159fc602e836154a1565b9150615a07826159a0565b604082019050919050565b60006020820190508181036000830152615a2b816159ef565b9050919050565b6000819050919050565b6000615a57615a52615a4d84615a32565b614ed7565b615605565b9050919050565b615a6781615a3c565b82525050565b6000602082019050615a826000830184615a5e565b92915050565b6000602082019050615a9d6000830184615844565b92915050565b615aac81614c1e565b82525050565b6000604082019050615ac76000830185615aa3565b615ad46020830184614b76565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615b376038836154a1565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b6000615b7983856153c3565b9350615b86838584614d5e565b615b8f83614ca1565b840190509392505050565b6000608082019050615baf6000830188615844565b615bbc6020830187614e39565b8181036040830152615bcf818587615b6d565b9050615bde60608301846147c2565b9695505050505050565b600081519050615bf781614901565b92915050565b600060208284031215615c1357615c1261455f565b5b6000615c2184828501615be8565b91505092915050565b600081519050615c39816145d1565b92915050565b600060208284031215615c5557615c5461455f565b5b6000615c6384828501615c2a565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615cc86028836154a1565b9150615cd382615c6c565b604082019050919050565b60006020820190508181036000830152615cf781615cbb565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615d34601a836154a1565b9150615d3f82615cfe565b602082019050919050565b60006020820190508181036000830152615d6381615d27565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615da0601b836154a1565b9150615dab82615d6a565b602082019050919050565b60006020820190508181036000830152615dcf81615d93565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615e326029836154a1565b9150615e3d82615dd6565b604082019050919050565b60006020820190508181036000830152615e6181615e25565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615e9e601c836154a1565b9150615ea982615e68565b602082019050919050565b60006020820190508181036000830152615ecd81615e91565b9050919050565b600081519050615ee3816148d5565b92915050565b600060208284031215615eff57615efe61455f565b5b6000615f0d84828501615ed4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615f72602e836154a1565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006160046029836154a1565b915061600f82615fa8565b604082019050919050565b6000602082019050818103600083015261603381615ff7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006160966024836154a1565b91506160a18261603a565b604082019050919050565b600060208201905081810360008301526160c581616089565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006160ef826160cc565b91506bffffffffffffffffffffffff820361610d5761610c615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061614e601f836154a1565b915061615982616118565b602082019050919050565b6000602082019050818103600083015261617d81616141565b9050919050565b50565b6000616194600083615346565b915061619f82616184565b600082019050919050565b60006161b582616187565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006161f56018836154a1565b9150616200826161bf565b602082019050919050565b60006020820190508181036000830152616224816161e8565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006162616020836154a1565b915061626c8261622b565b602082019050919050565b6000602082019050818103600083015261629081616254565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006162f36028836154a1565b91506162fe82616297565b604082019050919050565b60006020820190508181036000830152616322816162e6565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061635f601c836154a1565b915061636a82616329565b602082019050919050565b6000602082019050818103600083015261638e81616352565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006163f1602d836154a1565b91506163fc82616395565b604082019050919050565b60006020820190508181036000830152616420816163e4565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616468601c83616427565b915061647382616432565b601c82019050919050565b6000819050919050565b616499616494826148cb565b61647e565b82525050565b60006164aa8261645b565b91506164b68284616488565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061652a6018836154a1565b9150616535826164f4565b602082019050919050565b600060208201905081810360008301526165598161651d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000616596601f836154a1565b91506165a182616560565b602082019050919050565b600060208201905081810360008301526165c581616589565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006166286022836154a1565b9150616633826165cc565b604082019050919050565b600060208201905081810360008301526166578161661b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616694601d836154a1565b915061669f8261665e565b602082019050919050565b600060208201905081810360008301526166c381616687565b9050919050565b600081519050919050565b60006166e0826166ca565b6166ea81856154a1565b93506166fa818560208601615351565b61670381614ca1565b840191505092915050565b6000602082019050818103600083015261672881846166d5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220409e8d136ed140ff75f4fa7a004a6a1dfe99e425561980f54e6553e5fa38328a64736f6c63430008110033"; type EtherspotWalletConstructorParams = | [signer?: Signer] diff --git a/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts b/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts deleted file mode 100644 index db587b25..00000000 --- a/src/contracts/factories/src/wallet/helpers/AccountRegistry__factory.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - AccountRegistry, - AccountRegistryInterface, -} from "../../../../src/wallet/helpers/AccountRegistry"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "messageHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidAccountSignature", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -export class AccountRegistry__factory { - static readonly abi = _abi; - static createInterface(): AccountRegistryInterface { - return new utils.Interface(_abi) as AccountRegistryInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AccountRegistry { - return new Contract(address, _abi, signerOrProvider) as AccountRegistry; - } -} diff --git a/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts b/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts deleted file mode 100644 index a48db031..00000000 --- a/src/contracts/factories/src/wallet/helpers/WalletCompatability__factory.ts +++ /dev/null @@ -1,287 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from 'ethers'; -import type { Provider, TransactionRequest } from '@ethersproject/providers'; -import type { PromiseOrValue } from '../../../../common'; -import type { - WalletCompatability, - WalletCompatabilityInterface, -} from '../../../../src/wallet/helpers/WalletCompatability'; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'ERC777Received', - type: 'event', - }, - { - inputs: [], - name: '_registry', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'interfaceHash', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'canImplementInterfaceForAddress', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'messageHash', - type: 'bytes32', - }, - { - internalType: 'bytes', - name: 'signature', - type: 'bytes', - }, - ], - name: 'isValidSignature', - outputs: [ - { - internalType: 'bytes4', - name: '', - type: 'bytes4', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'message', - type: 'bytes', - }, - { - internalType: 'bytes', - name: 'signature', - type: 'bytes', - }, - ], - name: 'isValidSignature', - outputs: [ - { - internalType: 'bytes4', - name: '', - type: 'bytes4', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - name: 'onERC1155Received', - outputs: [ - { - internalType: 'bytes4', - name: '', - type: 'bytes4', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - name: 'onERC721Received', - outputs: [ - { - internalType: 'bytes4', - name: '', - type: 'bytes4', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'registry', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '_from', - type: 'address', - }, - { - internalType: 'address', - name: '_to', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - name: 'tokensReceived', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -const _bytecode = - '0x608060405234801561001057600080fd5b50610d3e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c8063249cb3fa1161005b578063249cb3fa1461013857806379cbc5fa146101685780637b10399914610186578063f23a6e61146101a457610087565b806223de291461008c578063150b7a02146100a85780631626ba7e146100d857806320c13b0b14610108575b600080fd5b6100a660048036038101906100a191906105f5565b6101d4565b005b6100c260048036038101906100bd91906106c4565b610219565b6040516100cf9190610787565b60405180910390f35b6100f260048036038101906100ed91906107d8565b61022e565b6040516100ff9190610787565b60405180910390f35b610122600480360381019061011d9190610838565b610311565b60405161012f9190610787565b60405180910390f35b610152600480360381019061014d91906108b9565b6103f7565b60405161015f9190610908565b60405180910390f35b61017061048f565b60405161017d9190610932565b60405180910390f35b61018e6104b3565b60405161019b9190610932565b60405180910390f35b6101be60048036038101906101b9919061094d565b6104dc565b6040516101cb9190610787565b60405180910390f35b7f89221357d1a64b9fd20652b9e9bbf523bb89cb65f026eb03d9ecafed98d15650878787604051610207939291906109f6565b60405180910390a15050505050505050565b600063150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1e382ce308686866040518563ffffffff1660e01b81526004016102909493929190610a8b565b602060405180830381865afa1580156102ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d19190610b03565b6102e25763ffffffff60e01b610308565b6040516020016102f190610b87565b604051602081830303815290604052805190602001205b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124e9eb330878787876040518663ffffffff1660e01b8152600401610375959493929190610b9c565b602060405180830381865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b69190610b03565b6103c75763ffffffff60e01b6103ed565b6040516020016103d690610c31565b604051602081830303815290604052805190602001205b9050949350505050565b60008060405160200161040990610c92565b604051602081830303815290604052805190602001208414801561045857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156104855760405160200161046c90610cf3565b6040516020818303038152906040528051906020012090505b8091505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600063f23a6e6160e01b90509695505050505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610527826104fc565b9050919050565b6105378161051c565b811461054257600080fd5b50565b6000813590506105548161052e565b92915050565b6000819050919050565b61056d8161055a565b811461057857600080fd5b50565b60008135905061058a81610564565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105b5576105b4610590565b5b8235905067ffffffffffffffff8111156105d2576105d1610595565b5b6020830191508360018202830111156105ee576105ed61059a565b5b9250929050565b60008060008060008060008060c0898b031215610615576106146104f2565b5b60006106238b828c01610545565b98505060206106348b828c01610545565b97505060406106458b828c01610545565b96505060606106568b828c0161057b565b955050608089013567ffffffffffffffff811115610677576106766104f7565b5b6106838b828c0161059f565b945094505060a089013567ffffffffffffffff8111156106a6576106a56104f7565b5b6106b28b828c0161059f565b92509250509295985092959890939650565b6000806000806000608086880312156106e0576106df6104f2565b5b60006106ee88828901610545565b95505060206106ff88828901610545565b94505060406107108882890161057b565b935050606086013567ffffffffffffffff811115610731576107306104f7565b5b61073d8882890161059f565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6107818161074c565b82525050565b600060208201905061079c6000830184610778565b92915050565b6000819050919050565b6107b5816107a2565b81146107c057600080fd5b50565b6000813590506107d2816107ac565b92915050565b6000806000604084860312156107f1576107f06104f2565b5b60006107ff868287016107c3565b935050602084013567ffffffffffffffff8111156108205761081f6104f7565b5b61082c8682870161059f565b92509250509250925092565b60008060008060408587031215610852576108516104f2565b5b600085013567ffffffffffffffff8111156108705761086f6104f7565b5b61087c8782880161059f565b9450945050602085013567ffffffffffffffff81111561089f5761089e6104f7565b5b6108ab8782880161059f565b925092505092959194509250565b600080604083850312156108d0576108cf6104f2565b5b60006108de858286016107c3565b92505060206108ef85828601610545565b9150509250929050565b610902816107a2565b82525050565b600060208201905061091d60008301846108f9565b92915050565b61092c8161051c565b82525050565b60006020820190506109476000830184610923565b92915050565b60008060008060008060a0878903121561096a576109696104f2565b5b600061097889828a01610545565b965050602061098989828a01610545565b955050604061099a89828a0161057b565b94505060606109ab89828a0161057b565b935050608087013567ffffffffffffffff8111156109cc576109cb6104f7565b5b6109d889828a0161059f565b92509250509295509295509295565b6109f08161055a565b82525050565b6000606082019050610a0b6000830186610923565b610a186020830185610923565b610a2560408301846109e7565b949350505050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000610a6a8385610a2d565b9350610a77838584610a3e565b610a8083610a4d565b840190509392505050565b6000606082019050610aa06000830187610923565b610aad60208301866108f9565b8181036040830152610ac0818486610a5e565b905095945050505050565b60008115159050919050565b610ae081610acb565b8114610aeb57600080fd5b50565b600081519050610afd81610ad7565b92915050565b600060208284031215610b1957610b186104f2565b5b6000610b2784828501610aee565b91505092915050565b600081905092915050565b7f697356616c69645369676e617475726528627974657333322c62797465732900600082015250565b6000610b71601f83610b30565b9150610b7c82610b3b565b601f82019050919050565b6000610b9282610b64565b9150819050919050565b6000606082019050610bb16000830188610923565b8181036020830152610bc4818688610a5e565b90508181036040830152610bd9818486610a5e565b90509695505050505050565b7f697356616c69645369676e61747572652862797465732c627974657329000000600082015250565b6000610c1b601d83610b30565b9150610c2682610be5565b601d82019050919050565b6000610c3c82610c0e565b9150819050919050565b7f455243373737546f6b656e73526563697069656e740000000000000000000000600082015250565b6000610c7c601583610b30565b9150610c8782610c46565b601582019050919050565b6000610c9d82610c6f565b9150819050919050565b7f455243313832305f4143434550545f4d41474943000000000000000000000000600082015250565b6000610cdd601483610b30565b9150610ce882610ca7565b601482019050919050565b6000610cfe82610cd0565b915081905091905056fea2646970667358221220f7e20339dc90e32d86fa9f7a7f468d9da4a71760d505c93049696a3d99cbb55b64736f6c634300080c0033'; - -type WalletCompatabilityConstructorParams = [signer?: Signer] | ConstructorParameters; - -const isSuperArgs = (xs: WalletCompatabilityConstructorParams): xs is ConstructorParameters => - xs.length > 1; - -export class WalletCompatability__factory extends ContractFactory { - constructor(...args: WalletCompatabilityConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy(overrides?: Overrides & { from?: PromiseOrValue }): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction(overrides?: Overrides & { from?: PromiseOrValue }): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): WalletCompatability { - return super.attach(address) as WalletCompatability; - } - override connect(signer: Signer): WalletCompatability__factory { - return super.connect(signer) as WalletCompatability__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): WalletCompatabilityInterface { - return new utils.Interface(_abi) as WalletCompatabilityInterface; - } - static connect(address: string, signerOrProvider: Signer | Provider): WalletCompatability { - return new Contract(address, _abi, signerOrProvider) as WalletCompatability; - } -} diff --git a/src/contracts/factories/src/wallet/helpers/index.ts b/src/contracts/factories/src/wallet/helpers/index.ts deleted file mode 100644 index b1f3b0b0..00000000 --- a/src/contracts/factories/src/wallet/helpers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AccountRegistry__factory } from "./AccountRegistry__factory"; -export { WalletCompatability__factory } from "./WalletCompatability__factory"; diff --git a/src/contracts/factories/src/wallet/index.ts b/src/contracts/factories/src/wallet/index.ts index e8c8537f..952dd3e7 100644 --- a/src/contracts/factories/src/wallet/index.ts +++ b/src/contracts/factories/src/wallet/index.ts @@ -1,6 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export * as helpers from "./helpers"; +export { AccountFactory__factory } from "./AccountFactory__factory"; export { EtherspotWallet__factory } from "./EtherspotWallet__factory"; export { EtherspotWalletFactory__factory } from "./EtherspotWalletFactory__factory"; diff --git a/src/contracts/index.ts b/src/contracts/index.ts index 9fdee7e4..81d085ff 100644 --- a/src/contracts/index.ts +++ b/src/contracts/index.ts @@ -1,138 +1,144 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as openzeppelin from './@openzeppelin'; +import type * as openzeppelin from "./@openzeppelin"; export type { openzeppelin }; -import type * as src from './src'; +import type * as src from "./src"; export type { src }; -export * as factories from './factories'; -export type { Ownable } from './@openzeppelin/contracts/access/Ownable'; -export { Ownable__factory } from './factories/@openzeppelin/contracts/access/Ownable__factory'; -export type { IERC1822Proxiable } from './@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable'; -export { IERC1822Proxiable__factory } from './factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory'; -export type { IBeacon } from './@openzeppelin/contracts/proxy/beacon/IBeacon'; -export { IBeacon__factory } from './factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory'; -export type { ERC1967Proxy } from './@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy'; -export { ERC1967Proxy__factory } from './factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory'; -export type { ERC1967Upgrade } from './@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade'; -export { ERC1967Upgrade__factory } from './factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory'; -export type { Proxy } from './@openzeppelin/contracts/proxy/Proxy'; -export { Proxy__factory } from './factories/@openzeppelin/contracts/proxy/Proxy__factory'; -export type { Initializable } from './@openzeppelin/contracts/proxy/utils/Initializable'; -export { Initializable__factory } from './factories/@openzeppelin/contracts/proxy/utils/Initializable__factory'; -export type { UUPSUpgradeable } from './@openzeppelin/contracts/proxy/utils/UUPSUpgradeable'; -export { UUPSUpgradeable__factory } from './factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory'; -export type { ERC20 } from './@openzeppelin/contracts/token/ERC20/ERC20'; -export { ERC20__factory } from './factories/@openzeppelin/contracts/token/ERC20/ERC20__factory'; -export type { IERC20Permit } from './@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit'; -export { IERC20Permit__factory } from './factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory'; -export type { IERC20Metadata } from './@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata'; -export { IERC20Metadata__factory } from './factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory'; -export type { IERC20 } from './@openzeppelin/contracts/token/ERC20/IERC20'; -export { IERC20__factory } from './factories/@openzeppelin/contracts/token/ERC20/IERC20__factory'; -export type { BLSAccount } from './src/aa-4337/bls/BLSAccount'; -export { BLSAccount__factory } from './factories/src/aa-4337/bls/BLSAccount__factory'; -export type { BLSAccountFactory } from './src/aa-4337/bls/BLSAccountFactory'; -export { BLSAccountFactory__factory } from './factories/src/aa-4337/bls/BLSAccountFactory__factory'; -export type { BLSSignatureAggregator } from './src/aa-4337/bls/BLSSignatureAggregator'; -export { BLSSignatureAggregator__factory } from './factories/src/aa-4337/bls/BLSSignatureAggregator__factory'; -export type { IBLSAccount } from './src/aa-4337/bls/IBLSAccount'; -export { IBLSAccount__factory } from './factories/src/aa-4337/bls/IBLSAccount__factory'; -export type { BLSOpen } from './src/aa-4337/bls/lib/BLSOpen'; -export { BLSOpen__factory } from './factories/src/aa-4337/bls/lib/BLSOpen__factory'; -export type { BNPairingPrecompileCostEstimator } from './src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator'; -export { BNPairingPrecompileCostEstimator__factory } from './factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory'; -export type { BaseAccount } from './src/aa-4337/core/BaseAccount'; -export { BaseAccount__factory } from './factories/src/aa-4337/core/BaseAccount__factory'; -export type { BasePaymaster } from './src/aa-4337/core/BasePaymaster'; -export { BasePaymaster__factory } from './factories/src/aa-4337/core/BasePaymaster__factory'; -export type { EntryPoint } from './src/aa-4337/core/EntryPoint'; -export { EntryPoint__factory } from './factories/src/aa-4337/core/EntryPoint__factory'; -export type { SenderCreator } from './src/aa-4337/core/SenderCreator'; -export { SenderCreator__factory } from './factories/src/aa-4337/core/SenderCreator__factory'; -export type { StakeManager } from './src/aa-4337/core/StakeManager'; -export { StakeManager__factory } from './factories/src/aa-4337/core/StakeManager__factory'; -export type { IAccount } from './src/aa-4337/interfaces/IAccount'; -export { IAccount__factory } from './factories/src/aa-4337/interfaces/IAccount__factory'; -export type { IAggregatedAccount } from './src/aa-4337/interfaces/IAggregatedAccount'; -export { IAggregatedAccount__factory } from './factories/src/aa-4337/interfaces/IAggregatedAccount__factory'; -export type { IAggregator } from './src/aa-4337/interfaces/IAggregator'; -export { IAggregator__factory } from './factories/src/aa-4337/interfaces/IAggregator__factory'; -export type { ICreate2Deployer } from './src/aa-4337/interfaces/ICreate2Deployer'; -export { ICreate2Deployer__factory } from './factories/src/aa-4337/interfaces/ICreate2Deployer__factory'; -export type { IEntryPoint } from './src/aa-4337/interfaces/IEntryPoint'; -export { IEntryPoint__factory } from './factories/src/aa-4337/interfaces/IEntryPoint__factory'; -export type { IPaymaster } from './src/aa-4337/interfaces/IPaymaster'; -export { IPaymaster__factory } from './factories/src/aa-4337/interfaces/IPaymaster__factory'; -export type { IStakeManager } from './src/aa-4337/interfaces/IStakeManager'; -export { IStakeManager__factory } from './factories/src/aa-4337/interfaces/IStakeManager__factory'; -export type { DepositPaymaster } from './src/aa-4337/samples/DepositPaymaster'; -export { DepositPaymaster__factory } from './factories/src/aa-4337/samples/DepositPaymaster__factory'; -export type { IOracle } from './src/aa-4337/samples/IOracle'; -export { IOracle__factory } from './factories/src/aa-4337/samples/IOracle__factory'; -export type { TestAggregatedAccount } from './src/aa-4337/samples/TestAggregatedAccount'; -export { TestAggregatedAccount__factory } from './factories/src/aa-4337/samples/TestAggregatedAccount__factory'; -export type { TestAggregatedAccountFactory } from './src/aa-4337/samples/TestAggregatedAccountFactory'; -export { TestAggregatedAccountFactory__factory } from './factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory'; -export type { TokenPaymaster } from './src/aa-4337/samples/TokenPaymaster'; -export { TokenPaymaster__factory } from './factories/src/aa-4337/samples/TokenPaymaster__factory'; -export type { VerifyingPaymaster } from './src/aa-4337/samples/VerifyingPaymaster'; -export { VerifyingPaymaster__factory } from './factories/src/aa-4337/samples/VerifyingPaymaster__factory'; -export type { BrokenBLSAccount } from './src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount'; -export { BrokenBLSAccount__factory } from './factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory'; -export type { BrokenBLSAccountFactory } from './src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory'; -export { BrokenBLSAccountFactory__factory } from './factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory'; -export type { MaliciousAccount } from './src/aa-4337/test/MaliciousAccount'; -export { MaliciousAccount__factory } from './factories/src/aa-4337/test/MaliciousAccount__factory'; -export type { TestCounter } from './src/aa-4337/test/TestCounter'; -export { TestCounter__factory } from './factories/src/aa-4337/test/TestCounter__factory'; -export type { TestExpirePaymaster } from './src/aa-4337/test/TestExpirePaymaster'; -export { TestExpirePaymaster__factory } from './factories/src/aa-4337/test/TestExpirePaymaster__factory'; -export type { TestExpiryAccount } from './src/aa-4337/test/TestExpiryAccount'; -export { TestExpiryAccount__factory } from './factories/src/aa-4337/test/TestExpiryAccount__factory'; -export type { TestHelpers } from './src/aa-4337/test/TestHelpers'; -export { TestHelpers__factory } from './factories/src/aa-4337/test/TestHelpers__factory'; -export type { TestOracle } from './src/aa-4337/test/TestOracle'; -export { TestOracle__factory } from './factories/src/aa-4337/test/TestOracle__factory'; -export type { TestPaymasterAcceptAll } from './src/aa-4337/test/TestPaymasterAcceptAll'; -export { TestPaymasterAcceptAll__factory } from './factories/src/aa-4337/test/TestPaymasterAcceptAll__factory'; -export type { TestRevertAccount } from './src/aa-4337/test/TestRevertAccount'; -export { TestRevertAccount__factory } from './factories/src/aa-4337/test/TestRevertAccount__factory'; -export type { TestSignatureAggregator } from './src/aa-4337/test/TestSignatureAggregator'; -export { TestSignatureAggregator__factory } from './factories/src/aa-4337/test/TestSignatureAggregator__factory'; -export type { TestToken } from './src/aa-4337/test/TestToken'; -export { TestToken__factory } from './factories/src/aa-4337/test/TestToken__factory'; -export type { TestUtil } from './src/aa-4337/test/TestUtil'; -export { TestUtil__factory } from './factories/src/aa-4337/test/TestUtil__factory'; -export type { TestWarmColdAccount } from './src/aa-4337/test/TestWarmColdAccount'; -export { TestWarmColdAccount__factory } from './factories/src/aa-4337/test/TestWarmColdAccount__factory'; -export type { Account } from './src/backward_compatibility_helpers/Account'; -export { Account__factory } from './factories/src/backward_compatibility_helpers/Account__factory'; -export type { AccountController } from './src/backward_compatibility_helpers/AccountController'; -export { AccountController__factory } from './factories/src/backward_compatibility_helpers/AccountController__factory'; -export type { AccountRegistryMock } from './src/backward_compatibility_helpers/AccountRegistryMock'; -export { AccountRegistryMock__factory } from './factories/src/backward_compatibility_helpers/AccountRegistryMock__factory'; -export type { GatewayRecipient } from './src/backward_compatibility_helpers/GatewayRecipient'; -export { GatewayRecipient__factory } from './factories/src/backward_compatibility_helpers/GatewayRecipient__factory'; -export type { PersonalAccountRegistry } from './src/backward_compatibility_helpers/PersonalAccountRegistry'; -export { PersonalAccountRegistry__factory } from './factories/src/backward_compatibility_helpers/PersonalAccountRegistry__factory'; -export type { IWhitelist } from './src/interfaces/IWhitelist'; -export { IWhitelist__factory } from './factories/src/interfaces/IWhitelist__factory'; -export type { ValidationConstants } from './src/libs/ValidationConstants'; -export { ValidationConstants__factory } from './factories/src/libs/ValidationConstants__factory'; -export type { EtherspotPaymaster } from './src/paymaster/EtherspotPaymaster'; -export { EtherspotPaymaster__factory } from './factories/src/paymaster/EtherspotPaymaster__factory'; -export type { Whitelist } from './src/paymaster/Whitelist'; -export { Whitelist__factory } from './factories/src/paymaster/Whitelist__factory'; -export type { TestEtherspotWallet } from './src/test/TestEtherspotWallet'; -export { TestEtherspotWallet__factory } from './factories/src/test/TestEtherspotWallet__factory'; -export type { EtherspotWallet } from './src/wallet/EtherspotWallet'; -export { EtherspotWallet__factory } from './factories/src/wallet/EtherspotWallet__factory'; -export type { EtherspotWalletFactory } from './src/wallet/EtherspotWalletFactory'; -export { EtherspotWalletFactory__factory } from './factories/src/wallet/EtherspotWalletFactory__factory'; -export type { AccountRegistry } from './src/wallet/helpers/AccountRegistry'; -export { AccountRegistry__factory } from './factories/src/wallet/helpers/AccountRegistry__factory'; -export type { WalletCompatability } from './src/wallet/helpers/WalletCompatability'; -export { WalletCompatability__factory } from './factories/src/wallet/helpers/WalletCompatability__factory'; -export * from './src/aa-4337/core/EntryPoint'; -export * from './common'; +export * as factories from "./factories"; +export type { Ownable } from "./@openzeppelin/contracts/access/Ownable"; +export { Ownable__factory } from "./factories/@openzeppelin/contracts/access/Ownable__factory"; +export type { IERC1822Proxiable } from "./@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable"; +export { IERC1822Proxiable__factory } from "./factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory"; +export type { IBeacon } from "./@openzeppelin/contracts/proxy/beacon/IBeacon"; +export { IBeacon__factory } from "./factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory"; +export type { ERC1967Proxy } from "./@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy"; +export { ERC1967Proxy__factory } from "./factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory"; +export type { ERC1967Upgrade } from "./@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade"; +export { ERC1967Upgrade__factory } from "./factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory"; +export type { Proxy } from "./@openzeppelin/contracts/proxy/Proxy"; +export { Proxy__factory } from "./factories/@openzeppelin/contracts/proxy/Proxy__factory"; +export type { Initializable } from "./@openzeppelin/contracts/proxy/utils/Initializable"; +export { Initializable__factory } from "./factories/@openzeppelin/contracts/proxy/utils/Initializable__factory"; +export type { UUPSUpgradeable } from "./@openzeppelin/contracts/proxy/utils/UUPSUpgradeable"; +export { UUPSUpgradeable__factory } from "./factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory"; +export type { IERC1155Receiver } from "./@openzeppelin/contracts/token/ERC1155/IERC1155Receiver"; +export { IERC1155Receiver__factory } from "./factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory"; +export type { ERC20 } from "./@openzeppelin/contracts/token/ERC20/ERC20"; +export { ERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/ERC20__factory"; +export type { IERC20Permit } from "./@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit"; +export { IERC20Permit__factory } from "./factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory"; +export type { IERC20Metadata } from "./@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata"; +export { IERC20Metadata__factory } from "./factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory"; +export type { IERC20 } from "./@openzeppelin/contracts/token/ERC20/IERC20"; +export { IERC20__factory } from "./factories/@openzeppelin/contracts/token/ERC20/IERC20__factory"; +export type { IERC721Receiver } from "./@openzeppelin/contracts/token/ERC721/IERC721Receiver"; +export { IERC721Receiver__factory } from "./factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory"; +export type { IERC777Recipient } from "./@openzeppelin/contracts/token/ERC777/IERC777Recipient"; +export { IERC777Recipient__factory } from "./factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory"; +export type { IERC165 } from "./@openzeppelin/contracts/utils/introspection/IERC165"; +export { IERC165__factory } from "./factories/@openzeppelin/contracts/utils/introspection/IERC165__factory"; +export type { BLSAccount } from "./src/aa-4337/bls/BLSAccount"; +export { BLSAccount__factory } from "./factories/src/aa-4337/bls/BLSAccount__factory"; +export type { BLSAccountFactory } from "./src/aa-4337/bls/BLSAccountFactory"; +export { BLSAccountFactory__factory } from "./factories/src/aa-4337/bls/BLSAccountFactory__factory"; +export type { BLSSignatureAggregator } from "./src/aa-4337/bls/BLSSignatureAggregator"; +export { BLSSignatureAggregator__factory } from "./factories/src/aa-4337/bls/BLSSignatureAggregator__factory"; +export type { IBLSAccount } from "./src/aa-4337/bls/IBLSAccount"; +export { IBLSAccount__factory } from "./factories/src/aa-4337/bls/IBLSAccount__factory"; +export type { BLSOpen } from "./src/aa-4337/bls/lib/BLSOpen"; +export { BLSOpen__factory } from "./factories/src/aa-4337/bls/lib/BLSOpen__factory"; +export type { BNPairingPrecompileCostEstimator } from "./src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator"; +export { BNPairingPrecompileCostEstimator__factory } from "./factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory"; +export type { TokenCallbackHandler } from "./src/aa-4337/callback/TokenCallbackHandler"; +export { TokenCallbackHandler__factory } from "./factories/src/aa-4337/callback/TokenCallbackHandler__factory"; +export type { BaseAccount } from "./src/aa-4337/core/BaseAccount"; +export { BaseAccount__factory } from "./factories/src/aa-4337/core/BaseAccount__factory"; +export type { BasePaymaster } from "./src/aa-4337/core/BasePaymaster"; +export { BasePaymaster__factory } from "./factories/src/aa-4337/core/BasePaymaster__factory"; +export type { EntryPoint } from "./src/aa-4337/core/EntryPoint"; +export { EntryPoint__factory } from "./factories/src/aa-4337/core/EntryPoint__factory"; +export type { SenderCreator } from "./src/aa-4337/core/SenderCreator"; +export { SenderCreator__factory } from "./factories/src/aa-4337/core/SenderCreator__factory"; +export type { StakeManager } from "./src/aa-4337/core/StakeManager"; +export { StakeManager__factory } from "./factories/src/aa-4337/core/StakeManager__factory"; +export type { IAccount } from "./src/aa-4337/interfaces/IAccount"; +export { IAccount__factory } from "./factories/src/aa-4337/interfaces/IAccount__factory"; +export type { IAggregatedAccount } from "./src/aa-4337/interfaces/IAggregatedAccount"; +export { IAggregatedAccount__factory } from "./factories/src/aa-4337/interfaces/IAggregatedAccount__factory"; +export type { IAggregator } from "./src/aa-4337/interfaces/IAggregator"; +export { IAggregator__factory } from "./factories/src/aa-4337/interfaces/IAggregator__factory"; +export type { ICreate2Deployer } from "./src/aa-4337/interfaces/ICreate2Deployer"; +export { ICreate2Deployer__factory } from "./factories/src/aa-4337/interfaces/ICreate2Deployer__factory"; +export type { IEntryPoint } from "./src/aa-4337/interfaces/IEntryPoint"; +export { IEntryPoint__factory } from "./factories/src/aa-4337/interfaces/IEntryPoint__factory"; +export type { IPaymaster } from "./src/aa-4337/interfaces/IPaymaster"; +export { IPaymaster__factory } from "./factories/src/aa-4337/interfaces/IPaymaster__factory"; +export type { IStakeManager } from "./src/aa-4337/interfaces/IStakeManager"; +export { IStakeManager__factory } from "./factories/src/aa-4337/interfaces/IStakeManager__factory"; +export type { DepositPaymaster } from "./src/aa-4337/samples/DepositPaymaster"; +export { DepositPaymaster__factory } from "./factories/src/aa-4337/samples/DepositPaymaster__factory"; +export type { IOracle } from "./src/aa-4337/samples/IOracle"; +export { IOracle__factory } from "./factories/src/aa-4337/samples/IOracle__factory"; +export type { TestAggregatedAccount } from "./src/aa-4337/samples/TestAggregatedAccount"; +export { TestAggregatedAccount__factory } from "./factories/src/aa-4337/samples/TestAggregatedAccount__factory"; +export type { TestAggregatedAccountFactory } from "./src/aa-4337/samples/TestAggregatedAccountFactory"; +export { TestAggregatedAccountFactory__factory } from "./factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory"; +export type { TokenPaymaster } from "./src/aa-4337/samples/TokenPaymaster"; +export { TokenPaymaster__factory } from "./factories/src/aa-4337/samples/TokenPaymaster__factory"; +export type { VerifyingPaymaster } from "./src/aa-4337/samples/VerifyingPaymaster"; +export { VerifyingPaymaster__factory } from "./factories/src/aa-4337/samples/VerifyingPaymaster__factory"; +export type { BrokenBLSAccount } from "./src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount"; +export { BrokenBLSAccount__factory } from "./factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory"; +export type { BrokenBLSAccountFactory } from "./src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory"; +export { BrokenBLSAccountFactory__factory } from "./factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory"; +export type { MaliciousAccount } from "./src/aa-4337/test/MaliciousAccount"; +export { MaliciousAccount__factory } from "./factories/src/aa-4337/test/MaliciousAccount__factory"; +export type { TestCounter } from "./src/aa-4337/test/TestCounter"; +export { TestCounter__factory } from "./factories/src/aa-4337/test/TestCounter__factory"; +export type { TestExpirePaymaster } from "./src/aa-4337/test/TestExpirePaymaster"; +export { TestExpirePaymaster__factory } from "./factories/src/aa-4337/test/TestExpirePaymaster__factory"; +export type { TestExpiryAccount } from "./src/aa-4337/test/TestExpiryAccount"; +export { TestExpiryAccount__factory } from "./factories/src/aa-4337/test/TestExpiryAccount__factory"; +export type { TestHelpers } from "./src/aa-4337/test/TestHelpers"; +export { TestHelpers__factory } from "./factories/src/aa-4337/test/TestHelpers__factory"; +export type { TestOracle } from "./src/aa-4337/test/TestOracle"; +export { TestOracle__factory } from "./factories/src/aa-4337/test/TestOracle__factory"; +export type { TestPaymasterAcceptAll } from "./src/aa-4337/test/TestPaymasterAcceptAll"; +export { TestPaymasterAcceptAll__factory } from "./factories/src/aa-4337/test/TestPaymasterAcceptAll__factory"; +export type { TestRevertAccount } from "./src/aa-4337/test/TestRevertAccount"; +export { TestRevertAccount__factory } from "./factories/src/aa-4337/test/TestRevertAccount__factory"; +export type { TestSignatureAggregator } from "./src/aa-4337/test/TestSignatureAggregator"; +export { TestSignatureAggregator__factory } from "./factories/src/aa-4337/test/TestSignatureAggregator__factory"; +export type { TestToken } from "./src/aa-4337/test/TestToken"; +export { TestToken__factory } from "./factories/src/aa-4337/test/TestToken__factory"; +export type { TestUtil } from "./src/aa-4337/test/TestUtil"; +export { TestUtil__factory } from "./factories/src/aa-4337/test/TestUtil__factory"; +export type { TestWarmColdAccount } from "./src/aa-4337/test/TestWarmColdAccount"; +export { TestWarmColdAccount__factory } from "./factories/src/aa-4337/test/TestWarmColdAccount__factory"; +export type { Guarded } from "./src/access/Guarded"; +export { Guarded__factory } from "./factories/src/access/Guarded__factory"; +export type { Owned } from "./src/access/Owned"; +export { Owned__factory } from "./factories/src/access/Owned__factory"; +export type { IERC1271Wallet } from "./src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet"; +export { IERC1271Wallet__factory } from "./factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory"; +export type { UniversalSigValidator } from "./src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator"; +export { UniversalSigValidator__factory } from "./factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory"; +export type { ValidateSigOffchain } from "./src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain"; +export { ValidateSigOffchain__factory } from "./factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory"; +export type { IEtherspotPaymaster } from "./src/interfaces/IEtherspotPaymaster"; +export { IEtherspotPaymaster__factory } from "./factories/src/interfaces/IEtherspotPaymaster__factory"; +export type { IEtherspotWallet } from "./src/interfaces/IEtherspotWallet"; +export { IEtherspotWallet__factory } from "./factories/src/interfaces/IEtherspotWallet__factory"; +export type { IWhitelist } from "./src/interfaces/IWhitelist"; +export { IWhitelist__factory } from "./factories/src/interfaces/IWhitelist__factory"; +export type { EtherspotPaymaster } from "./src/paymaster/EtherspotPaymaster"; +export { EtherspotPaymaster__factory } from "./factories/src/paymaster/EtherspotPaymaster__factory"; +export type { Whitelist } from "./src/paymaster/Whitelist"; +export { Whitelist__factory } from "./factories/src/paymaster/Whitelist__factory"; +export type { AccountFactory } from "./src/wallet/AccountFactory"; +export { AccountFactory__factory } from "./factories/src/wallet/AccountFactory__factory"; +export type { EtherspotWallet } from "./src/wallet/EtherspotWallet"; +export { EtherspotWallet__factory } from "./factories/src/wallet/EtherspotWallet__factory"; +export type { EtherspotWalletFactory } from "./src/wallet/EtherspotWalletFactory"; +export { EtherspotWalletFactory__factory } from "./factories/src/wallet/EtherspotWalletFactory__factory"; diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts new file mode 100644 index 00000000..2b0faccb --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts @@ -0,0 +1,88 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC1822ProxiableInterface extends utils.Interface { + functions: { + "proxiableUUID()": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "proxiableUUID"): FunctionFragment; + + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC1822Proxiable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC1822ProxiableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + }; + + proxiableUUID(overrides?: CallOverrides): Promise; + + callStatic: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts new file mode 100644 index 00000000..30b20c25 --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts @@ -0,0 +1,115 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface ERC1967UpgradeInterface extends utils.Interface { + functions: {}; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface ERC1967Upgrade extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ERC1967UpgradeInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts similarity index 62% rename from src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts rename to src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts index 9beadf80..7e37bd41 100644 --- a/src/contracts/src/backward_compatibility_helpers/GatewayRecipient.ts +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts @@ -18,28 +18,34 @@ import type { TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from "../../../../../../../common"; -export interface GatewayRecipientInterface extends utils.Interface { +export interface IBeaconInterface extends utils.Interface { functions: { - "gateway()": FunctionFragment; + "implementation()": FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "gateway"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: "implementation"): FunctionFragment; - encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "implementation", + values?: undefined + ): string; - decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "implementation", + data: BytesLike + ): Result; events: {}; } -export interface GatewayRecipient extends BaseContract { +export interface IBeacon extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: GatewayRecipientInterface; + interface: IBeaconInterface; queryFilter( event: TypedEventFilter, @@ -61,22 +67,22 @@ export interface GatewayRecipient extends BaseContract { removeListener: OnEvent; functions: { - gateway(overrides?: CallOverrides): Promise<[string]>; + implementation(overrides?: CallOverrides): Promise<[string]>; }; - gateway(overrides?: CallOverrides): Promise; + implementation(overrides?: CallOverrides): Promise; callStatic: { - gateway(overrides?: CallOverrides): Promise; + implementation(overrides?: CallOverrides): Promise; }; filters: {}; estimateGas: { - gateway(overrides?: CallOverrides): Promise; + implementation(overrides?: CallOverrides): Promise; }; populateTransaction: { - gateway(overrides?: CallOverrides): Promise; + implementation(overrides?: CallOverrides): Promise; }; } diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts new file mode 100644 index 00000000..9f49c59d --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts @@ -0,0 +1,70 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface InitializableInterface extends utils.Interface { + functions: {}; + + events: { + "Initialized(uint8)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; +} + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface Initializable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: InitializableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts new file mode 100644 index 00000000..02982dea --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts @@ -0,0 +1,226 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface UUPSUpgradeableInterface extends utils.Interface { + functions: { + "proxiableUUID()": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "proxiableUUID" | "upgradeTo" | "upgradeToAndCall" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface UUPSUpgradeable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: UUPSUpgradeableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts new file mode 100644 index 00000000..47645037 --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts @@ -0,0 +1,231 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC1155ReceiverInterface extends utils.Interface { + functions: { + "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "onERC1155BatchReceived" + | "onERC1155Received" + | "supportsInterface" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "onERC1155BatchReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "onERC1155BatchReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC1155Receiver extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC1155ReceiverInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts new file mode 100644 index 00000000..db7837e0 --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts @@ -0,0 +1,342 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC20Interface extends utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "allowance" + | "approve" + | "balanceOf" + | "totalSupply" + | "transfer" + | "transferFrom" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface IERC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts new file mode 100644 index 00000000..f8cb1d08 --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts @@ -0,0 +1,126 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC721ReceiverInterface extends utils.Interface { + functions: { + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "onERC721Received"): FunctionFragment; + + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC721Receiver extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC721ReceiverInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts new file mode 100644 index 00000000..218a26bd --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts @@ -0,0 +1,138 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC777RecipientInterface extends utils.Interface { + functions: { + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "tokensReceived"): FunctionFragment; + + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC777Recipient extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC777RecipientInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts b/src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts new file mode 100644 index 00000000..57647e6a --- /dev/null +++ b/src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts @@ -0,0 +1,103 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../../common"; + +export interface IERC165Interface extends utils.Interface { + functions: { + "supportsInterface(bytes4)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "supportsInterface"): FunctionFragment; + + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC165 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC165Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/aa-4337/bls/BLSAccount.ts b/src/contracts/src/aa-4337/bls/BLSAccount.ts index 26ae988e..7588a38a 100644 --- a/src/contracts/src/aa-4337/bls/BLSAccount.ts +++ b/src/contracts/src/aa-4337/bls/BLSAccount.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,85 +70,96 @@ export type UserOperationStructOutput = [ export interface BLSAccountInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "aggregator()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getBlsPublicKey()": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,uint256[4])": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "setBlsPublicKey(uint256[4])": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'aggregator()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getBlsPublicKey()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'initialize(address,uint256[4])': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'setBlsPublicKey(uint256[4])': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "aggregator" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getBlsPublicKey" - | "getDeposit" - | "initialize(address,address,uint256[4])" - | "initialize(address,address,address)" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "setBlsPublicKey" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'aggregator' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getBlsPublicKey' + | 'getDeposit' + | 'initialize(address,address)' + | 'initialize(address,uint256[4])' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'setBlsPublicKey' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "aggregator", - values?: undefined + functionFragment: 'addGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addOwner', + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'aggregator', + values?: undefined ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -156,21 +167,24 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getBlsPublicKey", + functionFragment: 'getBlsPublicKey', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize(address,address,uint256[4])", + functionFragment: 'initialize(address,address)', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'initialize(address,uint256[4])', values: [ - PromiseOrValue, PromiseOrValue, [ PromiseOrValue, @@ -181,24 +195,51 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "initialize(address,address,address)", + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -208,7 +249,7 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -216,14 +257,20 @@ export interface BLSAccountInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "setBlsPublicKey", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'setBlsPublicKey', values: [ [ PromiseOrValue, @@ -234,7 +281,11 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -245,23 +296,19 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -269,110 +316,129 @@ export interface BLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'addGuardian', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'aggregator', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'executeBatch', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'getBlsPublicKey', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getBlsPublicKey", + functionFragment: 'initialize(address,address)', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "initialize(address,address,uint256[4])", + functionFragment: 'initialize(address,uint256[4])', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "initialize(address,address,address)", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "setBlsPublicKey", + functionFragment: 'removeGuardian', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'removeOwner', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'setBlsPublicKey', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'supportsInterface', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'tokensReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'updateEntryPoint', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'upgradeToAndCall', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'PublicKeyChanged(uint256[4],uint256[4])': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'PublicKeyChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -396,18 +462,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -422,17 +476,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -440,6 +522,20 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; +export interface OwnerAddedEventObject { + newOwner: string; +} +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; + +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; + export interface PublicKeyChangedEventObject { oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; @@ -455,17 +551,6 @@ export type PublicKeyChangedEvent = TypedEvent< export type PublicKeyChangedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; -} -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; - -export type RegistryChangedEventFilter = TypedEventFilter; - export interface UpgradedEventObject { implementation: string; } @@ -500,19 +585,21 @@ export interface BLSAccount extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise<[string]>; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -535,9 +622,14 @@ export interface BLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -547,27 +639,49 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -585,11 +699,17 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; setBlsPublicKey( newPublicKey: [ @@ -601,26 +721,26 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -646,19 +766,21 @@ export interface BLSAccount extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -681,9 +803,14 @@ export interface BLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -693,27 +820,49 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -731,11 +880,17 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; setBlsPublicKey( newPublicKey: [ @@ -747,26 +902,26 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -792,17 +947,19 @@ export interface BLSAccount extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, + addOwner( + _newOwner: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -825,9 +982,14 @@ export interface BLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -837,27 +999,49 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -875,11 +1059,17 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; setBlsPublicKey( newPublicKey: [ @@ -891,11 +1081,16 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -906,11 +1101,6 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -937,7 +1127,7 @@ export interface BLSAccount extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -946,25 +1136,14 @@ export interface BLSAccount extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -973,21 +1152,42 @@ export interface BLSAccount extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "PublicKeyChanged(uint256[4],uint256[4])"( + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; + + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'PublicKeyChanged(uint256[4],uint256[4])'( oldPublicKey?: null, newPublicKey?: null ): PublicKeyChangedEventFilter; @@ -996,16 +1196,7 @@ export interface BLSAccount extends BaseContract { newPublicKey?: null ): PublicKeyChangedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - - "Upgraded(address)"( + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -1014,20 +1205,22 @@ export interface BLSAccount extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1047,9 +1240,14 @@ export interface BLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -1059,27 +1257,49 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1097,11 +1317,17 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; setBlsPublicKey( newPublicKey: [ @@ -1113,14 +1339,19 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1128,11 +1359,6 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -1159,20 +1385,22 @@ export interface BLSAccount extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1192,9 +1420,14 @@ export interface BLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -1204,27 +1437,49 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1242,11 +1497,17 @@ export interface BLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; setBlsPublicKey( newPublicKey: [ @@ -1258,14 +1519,19 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1273,11 +1539,6 @@ export interface BLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts b/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts index 08dc5643..34c48e52 100644 --- a/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts +++ b/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts @@ -12,39 +12,38 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface BLSAccountFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,address,uint256,uint256[4])": FunctionFragment; - "getAddress(address,address,uint256,uint256[4])": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,uint256,uint256[4])': FunctionFragment; + 'getAddress(address,uint256,uint256[4])': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", + functionFragment: 'createAccount', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, [ @@ -56,9 +55,8 @@ export interface BLSAccountFactoryInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "getAddress", + functionFragment: 'getAddress', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, [ @@ -71,14 +69,14 @@ export interface BLSAccountFactoryInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } @@ -113,8 +111,7 @@ export interface BLSAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise<[string]>; createAccount( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -126,8 +123,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; getAddress( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -142,8 +138,7 @@ export interface BLSAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -155,8 +150,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; getAddress( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -171,8 +165,7 @@ export interface BLSAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -184,8 +177,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; getAddress( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -203,8 +195,7 @@ export interface BLSAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -216,8 +207,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; getAddress( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -235,8 +225,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; createAccount( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -248,8 +237,7 @@ export interface BLSAccountFactory extends BaseContract { ): Promise; getAddress( - entryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, + anEntryPoint: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, diff --git a/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts b/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts index 10ee38a0..46a6f238 100644 --- a/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts +++ b/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,99 +65,99 @@ export type UserOperationStructOutput = [ export interface BLSSignatureAggregatorInterface extends utils.Interface { functions: { - "BLS_DOMAIN()": FunctionFragment; - "N()": FunctionFragment; - "addStake(address,uint32)": FunctionFragment; - "aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])": FunctionFragment; - "getTrailingPublicKey(bytes)": FunctionFragment; - "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "getUserOpPublicKey((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "userOpToMessage((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)": FunctionFragment; - "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + 'BLS_DOMAIN()': FunctionFragment; + 'N()': FunctionFragment; + 'addStake(address,uint32)': FunctionFragment; + 'aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])': FunctionFragment; + 'getTrailingPublicKey(bytes)': FunctionFragment; + 'getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'getUserOpPublicKey((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'userOpToMessage((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)': FunctionFragment; + 'validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "BLS_DOMAIN" - | "N" - | "addStake" - | "aggregateSignatures" - | "getTrailingPublicKey" - | "getUserOpHash" - | "getUserOpPublicKey" - | "userOpToMessage" - | "validateSignatures" - | "validateUserOpSignature" + | 'BLS_DOMAIN' + | 'N' + | 'addStake' + | 'aggregateSignatures' + | 'getTrailingPublicKey' + | 'getUserOpHash' + | 'getUserOpPublicKey' + | 'userOpToMessage' + | 'validateSignatures' + | 'validateUserOpSignature' ): FunctionFragment; encodeFunctionData( - functionFragment: "BLS_DOMAIN", + functionFragment: 'BLS_DOMAIN', values?: undefined ): string; - encodeFunctionData(functionFragment: "N", values?: undefined): string; + encodeFunctionData(functionFragment: 'N', values?: undefined): string; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', values: [UserOperationStruct[]] ): string; encodeFunctionData( - functionFragment: "getTrailingPublicKey", + functionFragment: 'getTrailingPublicKey', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "getUserOpPublicKey", + functionFragment: 'getUserOpPublicKey', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "userOpToMessage", + functionFragment: 'userOpToMessage', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', values: [UserOperationStruct] ): string; - decodeFunctionResult(functionFragment: "BLS_DOMAIN", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "N", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'BLS_DOMAIN', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'N', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getTrailingPublicKey", + functionFragment: 'getTrailingPublicKey', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getUserOpPublicKey", + functionFragment: 'getUserOpPublicKey', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "userOpToMessage", + functionFragment: 'userOpToMessage', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/bls/IBLSAccount.ts b/src/contracts/src/aa-4337/bls/IBLSAccount.ts index b9cf2d73..00325e87 100644 --- a/src/contracts/src/aa-4337/bls/IBLSAccount.ts +++ b/src/contracts/src/aa-4337/bls/IBLSAccount.ts @@ -12,20 +12,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -69,20 +69,20 @@ export type UserOperationStructOutput = [ export interface IBLSAccountInterface extends utils.Interface { functions: { - "getBlsPublicKey()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'getBlsPublicKey()': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "getBlsPublicKey" | "validateUserOp" + nameOrSignatureOrTopic: 'getBlsPublicKey' | 'validateUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "getBlsPublicKey", + functionFragment: 'getBlsPublicKey', values?: undefined ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -91,19 +91,19 @@ export interface IBLSAccountInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "getBlsPublicKey", + functionFragment: 'getBlsPublicKey', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; events: { - "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; + 'PublicKeyChanged(uint256[4],uint256[4])': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'PublicKeyChanged'): EventFragment; } export interface PublicKeyChangedEventObject { @@ -185,7 +185,7 @@ export interface IBLSAccount extends BaseContract { }; filters: { - "PublicKeyChanged(uint256[4],uint256[4])"( + 'PublicKeyChanged(uint256[4],uint256[4])'( oldPublicKey?: null, newPublicKey?: null ): PublicKeyChangedEventFilter; diff --git a/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts b/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts index 46842c6c..49928cea 100644 --- a/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts +++ b/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts @@ -10,39 +10,39 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../../common"; +} from '../../../../common'; export interface BLSOpenInterface extends utils.Interface { functions: { - "hashToPoint(bytes32,bytes)": FunctionFragment; - "isZeroBLSKey(uint256[4])": FunctionFragment; - "verifyMultiple(uint256[2],uint256[4][],uint256[2][])": FunctionFragment; - "verifySingle(uint256[2],uint256[4],uint256[2])": FunctionFragment; + 'hashToPoint(bytes32,bytes)': FunctionFragment; + 'isZeroBLSKey(uint256[4])': FunctionFragment; + 'verifyMultiple(uint256[2],uint256[4][],uint256[2][])': FunctionFragment; + 'verifySingle(uint256[2],uint256[4],uint256[2])': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "hashToPoint" - | "isZeroBLSKey" - | "verifyMultiple" - | "verifySingle" + | 'hashToPoint' + | 'isZeroBLSKey' + | 'verifyMultiple' + | 'verifySingle' ): FunctionFragment; encodeFunctionData( - functionFragment: "hashToPoint", + functionFragment: 'hashToPoint', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "isZeroBLSKey", + functionFragment: 'isZeroBLSKey', values: [ [ PromiseOrValue, @@ -53,7 +53,7 @@ export interface BLSOpenInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "verifyMultiple", + functionFragment: 'verifyMultiple', values: [ [PromiseOrValue, PromiseOrValue], [ @@ -66,7 +66,7 @@ export interface BLSOpenInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "verifySingle", + functionFragment: 'verifySingle', values: [ [PromiseOrValue, PromiseOrValue], [ @@ -80,19 +80,19 @@ export interface BLSOpenInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "hashToPoint", + functionFragment: 'hashToPoint', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isZeroBLSKey", + functionFragment: 'isZeroBLSKey', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "verifyMultiple", + functionFragment: 'verifyMultiple', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "verifySingle", + functionFragment: 'verifySingle', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts index 9d1b568a..ed8bde3d 100644 --- a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts +++ b/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts @@ -12,48 +12,48 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../../../../../common"; +} from '../../../../../../../common'; export interface BNPairingPrecompileCostEstimatorInterface extends utils.Interface { functions: { - "baseCost()": FunctionFragment; - "getGasCost(uint256)": FunctionFragment; - "perPairCost()": FunctionFragment; - "run()": FunctionFragment; + 'baseCost()': FunctionFragment; + 'getGasCost(uint256)': FunctionFragment; + 'perPairCost()': FunctionFragment; + 'run()': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "baseCost" | "getGasCost" | "perPairCost" | "run" + nameOrSignatureOrTopic: 'baseCost' | 'getGasCost' | 'perPairCost' | 'run' ): FunctionFragment; - encodeFunctionData(functionFragment: "baseCost", values?: undefined): string; + encodeFunctionData(functionFragment: 'baseCost', values?: undefined): string; encodeFunctionData( - functionFragment: "getGasCost", + functionFragment: 'getGasCost', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "perPairCost", + functionFragment: 'perPairCost', values?: undefined ): string; - encodeFunctionData(functionFragment: "run", values?: undefined): string; + encodeFunctionData(functionFragment: 'run', values?: undefined): string; - decodeFunctionResult(functionFragment: "baseCost", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getGasCost", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'baseCost', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getGasCost', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "perPairCost", + functionFragment: 'perPairCost', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "run", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'run', data: BytesLike): Result; events: {}; } diff --git a/src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts b/src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts new file mode 100644 index 00000000..0a816372 --- /dev/null +++ b/src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts @@ -0,0 +1,351 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../../common'; + +export interface TokenCallbackHandlerInterface extends utils.Interface { + functions: { + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'supportsInterface' + | 'tokensReceived' + ): FunctionFragment; + + encodeFunctionData( + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'onERC1155Received', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'onERC721Received', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: 'onERC1155BatchReceived', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'onERC1155Received', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'onERC721Received', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'supportsInterface', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'tokensReceived', + data: BytesLike + ): Result; + + events: {}; +} + +export interface TokenCallbackHandler extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TokenCallbackHandlerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + tokensReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + }; + + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, + arg4: PromiseOrValue, + arg5: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts b/src/contracts/src/aa-4337/callback/index.ts similarity index 56% rename from src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts rename to src/contracts/src/aa-4337/callback/index.ts index 38431b28..3806db9a 100644 --- a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/index.ts +++ b/src/contracts/src/aa-4337/callback/index.ts @@ -1,4 +1,4 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { IPaymaster } from "./IPaymaster"; +export type { TokenCallbackHandler } from "./TokenCallbackHandler"; diff --git a/src/contracts/src/aa-4337/core/BaseAccount.ts b/src/contracts/src/aa-4337/core/BaseAccount.ts index 6c584d54..f0861e27 100644 --- a/src/contracts/src/aa-4337/core/BaseAccount.ts +++ b/src/contracts/src/aa-4337/core/BaseAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,22 +65,22 @@ export type UserOperationStructOutput = [ export interface BaseAccountInterface extends utils.Interface { functions: { - "entryPoint()": FunctionFragment; - "nonce()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'entryPoint()': FunctionFragment; + 'nonce()': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "entryPoint" | "nonce" | "validateUserOp" + nameOrSignatureOrTopic: 'entryPoint' | 'nonce' | 'validateUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -88,10 +88,10 @@ export interface BaseAccountInterface extends utils.Interface { ] ): string; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/core/BasePaymaster.ts b/src/contracts/src/aa-4337/core/BasePaymaster.ts index 51c2568d..21d1d2ba 100644 --- a/src/contracts/src/aa-4337/core/BasePaymaster.ts +++ b/src/contracts/src/aa-4337/core/BasePaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,52 +70,52 @@ export type UserOperationStructOutput = [ export interface BasePaymasterInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "deposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "owner()": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'deposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'owner()': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "deposit" - | "entryPoint" - | "getDeposit" - | "owner" - | "postOp" - | "renounceOwnership" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'deposit' + | 'entryPoint' + | 'getDeposit' + | 'owner' + | 'postOp' + | 'renounceOwnership' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -123,19 +123,19 @@ export interface BasePaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -143,47 +143,47 @@ export interface BasePaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "OwnershipTransferred(address,address)": EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; } export interface OwnershipTransferredEventObject { @@ -384,7 +384,7 @@ export interface BasePaymaster extends BaseContract { }; filters: { - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; diff --git a/src/contracts/src/aa-4337/core/EntryPoint.ts b/src/contracts/src/aa-4337/core/EntryPoint.ts index 8a2e5112..183eb221 100644 --- a/src/contracts/src/aa-4337/core/EntryPoint.ts +++ b/src/contracts/src/aa-4337/core/EntryPoint.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -167,52 +167,52 @@ export declare namespace EntryPoint { export interface EntryPointInterface extends utils.Interface { functions: { - "SIG_VALIDATION_FAILED()": FunctionFragment; - "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "deposits(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "getSenderAddress(bytes)": FunctionFragment; - "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; - "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; - "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; - "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'SIG_VALIDATION_FAILED()': FunctionFragment; + '_validateSenderAndPaymaster(bytes,address,bytes)': FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'depositTo(address)': FunctionFragment; + 'deposits(address)': FunctionFragment; + 'getDepositInfo(address)': FunctionFragment; + 'getSenderAddress(bytes)': FunctionFragment; + 'getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)': FunctionFragment; + 'handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)': FunctionFragment; + 'innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)': FunctionFragment; + 'simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)': FunctionFragment; + 'simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "SIG_VALIDATION_FAILED" - | "_validateSenderAndPaymaster" - | "addStake" - | "balanceOf" - | "depositTo" - | "deposits" - | "getDepositInfo" - | "getSenderAddress" - | "getUserOpHash" - | "handleAggregatedOps" - | "handleOps" - | "innerHandleOp" - | "simulateHandleOp" - | "simulateValidation" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" + | 'SIG_VALIDATION_FAILED' + | '_validateSenderAndPaymaster' + | 'addStake' + | 'balanceOf' + | 'depositTo' + | 'deposits' + | 'getDepositInfo' + | 'getSenderAddress' + | 'getUserOpHash' + | 'handleAggregatedOps' + | 'handleOps' + | 'innerHandleOp' + | 'simulateHandleOp' + | 'simulateValidation' + | 'unlockStake' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "SIG_VALIDATION_FAILED", + functionFragment: 'SIG_VALIDATION_FAILED', values?: undefined ): string; encodeFunctionData( - functionFragment: "_validateSenderAndPaymaster", + functionFragment: '_validateSenderAndPaymaster', values: [ PromiseOrValue, PromiseOrValue, @@ -220,43 +220,43 @@ export interface EntryPointInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "depositTo", + functionFragment: 'depositTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "deposits", + functionFragment: 'deposits', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getSenderAddress", + functionFragment: 'getSenderAddress', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "handleAggregatedOps", + functionFragment: 'handleAggregatedOps', values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "handleOps", + functionFragment: 'handleOps', values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "innerHandleOp", + functionFragment: 'innerHandleOp', values: [ PromiseOrValue, EntryPoint.UserOpInfoStruct, @@ -264,7 +264,7 @@ export interface EntryPointInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "simulateHandleOp", + functionFragment: 'simulateHandleOp', values: [ UserOperationStruct, PromiseOrValue, @@ -272,94 +272,94 @@ export interface EntryPointInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "simulateValidation", + functionFragment: 'simulateValidation', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "SIG_VALIDATION_FAILED", + functionFragment: 'SIG_VALIDATION_FAILED', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "_validateSenderAndPaymaster", + functionFragment: '_validateSenderAndPaymaster', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposits', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getSenderAddress", + functionFragment: 'getSenderAddress', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "handleAggregatedOps", + functionFragment: 'handleAggregatedOps', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'handleOps', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "innerHandleOp", + functionFragment: 'innerHandleOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "simulateHandleOp", + functionFragment: 'simulateHandleOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "simulateValidation", + functionFragment: 'simulateValidation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "AccountDeployed(bytes32,address,address,address)": EventFragment; - "Deposited(address,uint256)": EventFragment; - "SignatureAggregatorChanged(address)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; - "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; + 'AccountDeployed(bytes32,address,address,address)': EventFragment; + 'Deposited(address,uint256)': EventFragment; + 'SignatureAggregatorChanged(address)': EventFragment; + 'StakeLocked(address,uint256,uint256)': EventFragment; + 'StakeUnlocked(address,uint256)': EventFragment; + 'StakeWithdrawn(address,address,uint256)': EventFragment; + 'UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)': EventFragment; + 'UserOperationRevertReason(bytes32,address,uint256,bytes)': EventFragment; + 'Withdrawn(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AccountDeployed'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'SignatureAggregatorChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeLocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeUnlocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeWithdrawn'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'UserOperationEvent'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'UserOperationRevertReason'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Withdrawn'): EventFragment; } export interface AccountDeployedEventObject { @@ -802,7 +802,7 @@ export interface EntryPoint extends BaseContract { }; filters: { - "AccountDeployed(bytes32,address,address,address)"( + 'AccountDeployed(bytes32,address,address,address)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, factory?: null, @@ -815,7 +815,7 @@ export interface EntryPoint extends BaseContract { paymaster?: null ): AccountDeployedEventFilter; - "Deposited(address,uint256)"( + 'Deposited(address,uint256)'( account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; @@ -824,14 +824,14 @@ export interface EntryPoint extends BaseContract { totalDeposit?: null ): DepositedEventFilter; - "SignatureAggregatorChanged(address)"( + 'SignatureAggregatorChanged(address)'( aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; SignatureAggregatorChanged( aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; - "StakeLocked(address,uint256,uint256)"( + 'StakeLocked(address,uint256,uint256)'( account?: PromiseOrValue | null, totalStaked?: null, unstakeDelaySec?: null @@ -842,7 +842,7 @@ export interface EntryPoint extends BaseContract { unstakeDelaySec?: null ): StakeLockedEventFilter; - "StakeUnlocked(address,uint256)"( + 'StakeUnlocked(address,uint256)'( account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; @@ -851,7 +851,7 @@ export interface EntryPoint extends BaseContract { withdrawTime?: null ): StakeUnlockedEventFilter; - "StakeWithdrawn(address,address,uint256)"( + 'StakeWithdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null @@ -862,7 +862,7 @@ export interface EntryPoint extends BaseContract { amount?: null ): StakeWithdrawnEventFilter; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( + 'UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, paymaster?: PromiseOrValue | null, @@ -881,7 +881,7 @@ export interface EntryPoint extends BaseContract { actualGasUsed?: null ): UserOperationEventEventFilter; - "UserOperationRevertReason(bytes32,address,uint256,bytes)"( + 'UserOperationRevertReason(bytes32,address,uint256,bytes)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, nonce?: null, @@ -894,7 +894,7 @@ export interface EntryPoint extends BaseContract { revertReason?: null ): UserOperationRevertReasonEventFilter; - "Withdrawn(address,address,uint256)"( + 'Withdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null diff --git a/src/contracts/src/aa-4337/core/SenderCreator.ts b/src/contracts/src/aa-4337/core/SenderCreator.ts index 3669c957..12981c01 100644 --- a/src/contracts/src/aa-4337/core/SenderCreator.ts +++ b/src/contracts/src/aa-4337/core/SenderCreator.ts @@ -11,31 +11,31 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface SenderCreatorInterface extends utils.Interface { functions: { - "createSender(bytes)": FunctionFragment; + 'createSender(bytes)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "createSender"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'createSender'): FunctionFragment; encodeFunctionData( - functionFragment: "createSender", + functionFragment: 'createSender', values: [PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "createSender", + functionFragment: 'createSender', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/core/StakeManager.ts b/src/contracts/src/aa-4337/core/StakeManager.ts index e7e879c9..674de903 100644 --- a/src/contracts/src/aa-4337/core/StakeManager.ts +++ b/src/contracts/src/aa-4337/core/StakeManager.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export declare namespace IStakeManager { export type DepositInfoStruct = { @@ -54,92 +54,92 @@ export declare namespace IStakeManager { export interface StakeManagerInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "deposits(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'depositTo(address)': FunctionFragment; + 'deposits(address)': FunctionFragment; + 'getDepositInfo(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "balanceOf" - | "depositTo" - | "deposits" - | "getDepositInfo" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'balanceOf' + | 'depositTo' + | 'deposits' + | 'getDepositInfo' + | 'unlockStake' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "depositTo", + functionFragment: 'depositTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "deposits", + functionFragment: 'deposits', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposits', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "Deposited(address,uint256)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; + 'Deposited(address,uint256)': EventFragment; + 'StakeLocked(address,uint256,uint256)': EventFragment; + 'StakeUnlocked(address,uint256)': EventFragment; + 'StakeWithdrawn(address,address,uint256)': EventFragment; + 'Withdrawn(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeLocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeUnlocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeWithdrawn'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Withdrawn'): EventFragment; } export interface DepositedEventObject { @@ -377,7 +377,7 @@ export interface StakeManager extends BaseContract { }; filters: { - "Deposited(address,uint256)"( + 'Deposited(address,uint256)'( account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; @@ -386,7 +386,7 @@ export interface StakeManager extends BaseContract { totalDeposit?: null ): DepositedEventFilter; - "StakeLocked(address,uint256,uint256)"( + 'StakeLocked(address,uint256,uint256)'( account?: PromiseOrValue | null, totalStaked?: null, unstakeDelaySec?: null @@ -397,7 +397,7 @@ export interface StakeManager extends BaseContract { unstakeDelaySec?: null ): StakeLockedEventFilter; - "StakeUnlocked(address,uint256)"( + 'StakeUnlocked(address,uint256)'( account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; @@ -406,7 +406,7 @@ export interface StakeManager extends BaseContract { withdrawTime?: null ): StakeUnlockedEventFilter; - "StakeWithdrawn(address,address,uint256)"( + 'StakeWithdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null @@ -417,7 +417,7 @@ export interface StakeManager extends BaseContract { amount?: null ): StakeWithdrawnEventFilter; - "Withdrawn(address,address,uint256)"( + 'Withdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null diff --git a/src/contracts/src/aa-4337/index.ts b/src/contracts/src/aa-4337/index.ts index 7e3900a4..fd33e5e5 100644 --- a/src/contracts/src/aa-4337/index.ts +++ b/src/contracts/src/aa-4337/index.ts @@ -3,6 +3,8 @@ /* eslint-disable */ import type * as bls from "./bls"; export type { bls }; +import type * as callback from "./callback"; +export type { callback }; import type * as core from "./core"; export type { core }; import type * as interfaces from "./interfaces"; diff --git a/src/contracts/src/aa-4337/interfaces/IAccount.ts b/src/contracts/src/aa-4337/interfaces/IAccount.ts index 936e8d0c..126b33f2 100644 --- a/src/contracts/src/aa-4337/interfaces/IAccount.ts +++ b/src/contracts/src/aa-4337/interfaces/IAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,13 +65,13 @@ export type UserOperationStructOutput = [ export interface IAccountInterface extends utils.Interface { functions: { - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "validateUserOp"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'validateUserOp'): FunctionFragment; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -80,7 +80,7 @@ export interface IAccountInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts b/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts index 12397f09..654e5ec0 100644 --- a/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts +++ b/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,20 +65,20 @@ export type UserOperationStructOutput = [ export interface IAggregatedAccountInterface extends utils.Interface { functions: { - "getAggregator()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'getAggregator()': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "getAggregator" | "validateUserOp" + nameOrSignatureOrTopic: 'getAggregator' | 'validateUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "getAggregator", + functionFragment: 'getAggregator', values?: undefined ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -87,11 +87,11 @@ export interface IAggregatedAccountInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "getAggregator", + functionFragment: 'getAggregator', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/interfaces/IAggregator.ts b/src/contracts/src/aa-4337/interfaces/IAggregator.ts index b617dc70..08a7e861 100644 --- a/src/contracts/src/aa-4337/interfaces/IAggregator.ts +++ b/src/contracts/src/aa-4337/interfaces/IAggregator.ts @@ -10,16 +10,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -63,41 +63,41 @@ export type UserOperationStructOutput = [ export interface IAggregatorInterface extends utils.Interface { functions: { - "aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])": FunctionFragment; - "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)": FunctionFragment; - "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + 'aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])': FunctionFragment; + 'validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)': FunctionFragment; + 'validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "aggregateSignatures" - | "validateSignatures" - | "validateUserOpSignature" + | 'aggregateSignatures' + | 'validateSignatures' + | 'validateUserOpSignature' ): FunctionFragment; encodeFunctionData( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', values: [UserOperationStruct[]] ): string; encodeFunctionData( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', values: [UserOperationStruct] ): string; decodeFunctionResult( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts b/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts index d80bf9c5..89b4fb01 100644 --- a/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts +++ b/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts @@ -11,30 +11,30 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface ICreate2DeployerInterface extends utils.Interface { functions: { - "deploy(bytes,bytes32)": FunctionFragment; + 'deploy(bytes,bytes32)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "deploy"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'deploy'): FunctionFragment; encodeFunctionData( - functionFragment: "deploy", + functionFragment: 'deploy', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deploy', data: BytesLike): Result; events: {}; } diff --git a/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts b/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts index 21924319..51c0c31c 100644 --- a/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts +++ b/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -112,72 +112,72 @@ export declare namespace IEntryPoint { export interface IEntryPointInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "getSenderAddress(bytes)": FunctionFragment; - "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; - "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; - "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'depositTo(address)': FunctionFragment; + 'getDepositInfo(address)': FunctionFragment; + 'getSenderAddress(bytes)': FunctionFragment; + 'getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)': FunctionFragment; + 'handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)': FunctionFragment; + 'simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)': FunctionFragment; + 'simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "balanceOf" - | "depositTo" - | "getDepositInfo" - | "getSenderAddress" - | "getUserOpHash" - | "handleAggregatedOps" - | "handleOps" - | "simulateHandleOp" - | "simulateValidation" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'balanceOf' + | 'depositTo' + | 'getDepositInfo' + | 'getSenderAddress' + | 'getUserOpHash' + | 'handleAggregatedOps' + | 'handleOps' + | 'simulateHandleOp' + | 'simulateValidation' + | 'unlockStake' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "depositTo", + functionFragment: 'depositTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getSenderAddress", + functionFragment: 'getSenderAddress', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "handleAggregatedOps", + functionFragment: 'handleAggregatedOps', values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "handleOps", + functionFragment: 'handleOps', values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "simulateHandleOp", + functionFragment: 'simulateHandleOp', values: [ UserOperationStruct, PromiseOrValue, @@ -185,81 +185,81 @@ export interface IEntryPointInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "simulateValidation", + functionFragment: 'simulateValidation', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getSenderAddress", + functionFragment: 'getSenderAddress', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getUserOpHash", + functionFragment: 'getUserOpHash', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "handleAggregatedOps", + functionFragment: 'handleAggregatedOps', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'handleOps', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "simulateHandleOp", + functionFragment: 'simulateHandleOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "simulateValidation", + functionFragment: 'simulateValidation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "AccountDeployed(bytes32,address,address,address)": EventFragment; - "Deposited(address,uint256)": EventFragment; - "SignatureAggregatorChanged(address)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; - "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; + 'AccountDeployed(bytes32,address,address,address)': EventFragment; + 'Deposited(address,uint256)': EventFragment; + 'SignatureAggregatorChanged(address)': EventFragment; + 'StakeLocked(address,uint256,uint256)': EventFragment; + 'StakeUnlocked(address,uint256)': EventFragment; + 'StakeWithdrawn(address,address,uint256)': EventFragment; + 'UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)': EventFragment; + 'UserOperationRevertReason(bytes32,address,uint256,bytes)': EventFragment; + 'Withdrawn(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AccountDeployed'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'SignatureAggregatorChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeLocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeUnlocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeWithdrawn'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'UserOperationEvent'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'UserOperationRevertReason'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Withdrawn'): EventFragment; } export interface AccountDeployedEventObject { @@ -615,7 +615,7 @@ export interface IEntryPoint extends BaseContract { }; filters: { - "AccountDeployed(bytes32,address,address,address)"( + 'AccountDeployed(bytes32,address,address,address)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, factory?: null, @@ -628,7 +628,7 @@ export interface IEntryPoint extends BaseContract { paymaster?: null ): AccountDeployedEventFilter; - "Deposited(address,uint256)"( + 'Deposited(address,uint256)'( account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; @@ -637,14 +637,14 @@ export interface IEntryPoint extends BaseContract { totalDeposit?: null ): DepositedEventFilter; - "SignatureAggregatorChanged(address)"( + 'SignatureAggregatorChanged(address)'( aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; SignatureAggregatorChanged( aggregator?: PromiseOrValue | null ): SignatureAggregatorChangedEventFilter; - "StakeLocked(address,uint256,uint256)"( + 'StakeLocked(address,uint256,uint256)'( account?: PromiseOrValue | null, totalStaked?: null, unstakeDelaySec?: null @@ -655,7 +655,7 @@ export interface IEntryPoint extends BaseContract { unstakeDelaySec?: null ): StakeLockedEventFilter; - "StakeUnlocked(address,uint256)"( + 'StakeUnlocked(address,uint256)'( account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; @@ -664,7 +664,7 @@ export interface IEntryPoint extends BaseContract { withdrawTime?: null ): StakeUnlockedEventFilter; - "StakeWithdrawn(address,address,uint256)"( + 'StakeWithdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null @@ -675,7 +675,7 @@ export interface IEntryPoint extends BaseContract { amount?: null ): StakeWithdrawnEventFilter; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( + 'UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, paymaster?: PromiseOrValue | null, @@ -694,7 +694,7 @@ export interface IEntryPoint extends BaseContract { actualGasUsed?: null ): UserOperationEventEventFilter; - "UserOperationRevertReason(bytes32,address,uint256,bytes)"( + 'UserOperationRevertReason(bytes32,address,uint256,bytes)'( userOpHash?: PromiseOrValue | null, sender?: PromiseOrValue | null, nonce?: null, @@ -707,7 +707,7 @@ export interface IEntryPoint extends BaseContract { revertReason?: null ): UserOperationRevertReasonEventFilter; - "Withdrawn(address,address,uint256)"( + 'Withdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null diff --git a/src/contracts/src/aa-4337/interfaces/IPaymaster.ts b/src/contracts/src/aa-4337/interfaces/IPaymaster.ts index 68b08bbd..cf76e84a 100644 --- a/src/contracts/src/aa-4337/interfaces/IPaymaster.ts +++ b/src/contracts/src/aa-4337/interfaces/IPaymaster.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,16 +65,16 @@ export type UserOperationStructOutput = [ export interface IPaymasterInterface extends utils.Interface { functions: { - "postOp(uint8,bytes,uint256)": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "postOp" | "validatePaymasterUserOp" + nameOrSignatureOrTopic: 'postOp' | 'validatePaymasterUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -82,7 +82,7 @@ export interface IPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -90,9 +90,9 @@ export interface IPaymasterInterface extends utils.Interface { ] ): string; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/interfaces/IStakeManager.ts b/src/contracts/src/aa-4337/interfaces/IStakeManager.ts index 0766fd74..f4c68137 100644 --- a/src/contracts/src/aa-4337/interfaces/IStakeManager.ts +++ b/src/contracts/src/aa-4337/interfaces/IStakeManager.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export declare namespace IStakeManager { export type DepositInfoStruct = { @@ -54,85 +54,85 @@ export declare namespace IStakeManager { export interface IStakeManagerInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'depositTo(address)': FunctionFragment; + 'getDepositInfo(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "balanceOf" - | "depositTo" - | "getDepositInfo" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'balanceOf' + | 'depositTo' + | 'getDepositInfo' + | 'unlockStake' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "depositTo", + functionFragment: 'depositTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getDepositInfo", + functionFragment: 'getDepositInfo', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "Deposited(address,uint256)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; + 'Deposited(address,uint256)': EventFragment; + 'StakeLocked(address,uint256,uint256)': EventFragment; + 'StakeUnlocked(address,uint256)': EventFragment; + 'StakeWithdrawn(address,address,uint256)': EventFragment; + 'Withdrawn(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeLocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeUnlocked'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'StakeWithdrawn'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Withdrawn'): EventFragment; } export interface DepositedEventObject { @@ -331,7 +331,7 @@ export interface IStakeManager extends BaseContract { }; filters: { - "Deposited(address,uint256)"( + 'Deposited(address,uint256)'( account?: PromiseOrValue | null, totalDeposit?: null ): DepositedEventFilter; @@ -340,7 +340,7 @@ export interface IStakeManager extends BaseContract { totalDeposit?: null ): DepositedEventFilter; - "StakeLocked(address,uint256,uint256)"( + 'StakeLocked(address,uint256,uint256)'( account?: PromiseOrValue | null, totalStaked?: null, unstakeDelaySec?: null @@ -351,7 +351,7 @@ export interface IStakeManager extends BaseContract { unstakeDelaySec?: null ): StakeLockedEventFilter; - "StakeUnlocked(address,uint256)"( + 'StakeUnlocked(address,uint256)'( account?: PromiseOrValue | null, withdrawTime?: null ): StakeUnlockedEventFilter; @@ -360,7 +360,7 @@ export interface IStakeManager extends BaseContract { withdrawTime?: null ): StakeUnlockedEventFilter; - "StakeWithdrawn(address,address,uint256)"( + 'StakeWithdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null @@ -371,7 +371,7 @@ export interface IStakeManager extends BaseContract { amount?: null ): StakeWithdrawnEventFilter; - "Withdrawn(address,address,uint256)"( + 'Withdrawn(address,address,uint256)'( account?: PromiseOrValue | null, withdrawAddress?: null, amount?: null diff --git a/src/contracts/src/aa-4337/samples/DepositPaymaster.ts b/src/contracts/src/aa-4337/samples/DepositPaymaster.ts index 564c3650..964d8eb9 100644 --- a/src/contracts/src/aa-4337/samples/DepositPaymaster.ts +++ b/src/contracts/src/aa-4337/samples/DepositPaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,62 +70,62 @@ export type UserOperationStructOutput = [ export interface DepositPaymasterInterface extends utils.Interface { functions: { - "COST_OF_POST()": FunctionFragment; - "addDepositFor(address,address,uint256)": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "addToken(address,address)": FunctionFragment; - "balances(address,address)": FunctionFragment; - "deposit()": FunctionFragment; - "depositInfo(address,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "lockTokenDeposit()": FunctionFragment; - "oracles(address)": FunctionFragment; - "owner()": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockBlock(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "unlockTokenDeposit()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; - "withdrawTokensTo(address,address,uint256)": FunctionFragment; + 'COST_OF_POST()': FunctionFragment; + 'addDepositFor(address,address,uint256)': FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'addToken(address,address)': FunctionFragment; + 'balances(address,address)': FunctionFragment; + 'deposit()': FunctionFragment; + 'depositInfo(address,address)': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'lockTokenDeposit()': FunctionFragment; + 'oracles(address)': FunctionFragment; + 'owner()': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockBlock(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'unlockTokenDeposit()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; + 'withdrawTokensTo(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "COST_OF_POST" - | "addDepositFor" - | "addStake" - | "addToken" - | "balances" - | "deposit" - | "depositInfo" - | "entryPoint" - | "getDeposit" - | "lockTokenDeposit" - | "oracles" - | "owner" - | "postOp" - | "renounceOwnership" - | "transferOwnership" - | "unlockBlock" - | "unlockStake" - | "unlockTokenDeposit" - | "validatePaymasterUserOp" - | "withdrawStake" - | "withdrawTo" - | "withdrawTokensTo" + | 'COST_OF_POST' + | 'addDepositFor' + | 'addStake' + | 'addToken' + | 'balances' + | 'deposit' + | 'depositInfo' + | 'entryPoint' + | 'getDeposit' + | 'lockTokenDeposit' + | 'oracles' + | 'owner' + | 'postOp' + | 'renounceOwnership' + | 'transferOwnership' + | 'unlockBlock' + | 'unlockStake' + | 'unlockTokenDeposit' + | 'validatePaymasterUserOp' + | 'withdrawStake' + | 'withdrawTo' + | 'withdrawTokensTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "COST_OF_POST", + functionFragment: 'COST_OF_POST', values?: undefined ): string; encodeFunctionData( - functionFragment: "addDepositFor", + functionFragment: 'addDepositFor', values: [ PromiseOrValue, PromiseOrValue, @@ -133,41 +133,41 @@ export interface DepositPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "addToken", + functionFragment: 'addToken', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balances", + functionFragment: 'balances', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "depositInfo", + functionFragment: 'depositInfo', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "lockTokenDeposit", + functionFragment: 'lockTokenDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "oracles", + functionFragment: 'oracles', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -175,27 +175,27 @@ export interface DepositPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockBlock", + functionFragment: 'unlockBlock', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "unlockTokenDeposit", + functionFragment: 'unlockTokenDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -203,15 +203,15 @@ export interface DepositPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTokensTo", + functionFragment: 'withdrawTokensTo', values: [ PromiseOrValue, PromiseOrValue, @@ -220,69 +220,69 @@ export interface DepositPaymasterInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "COST_OF_POST", + functionFragment: 'COST_OF_POST', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "addDepositFor", + functionFragment: 'addDepositFor', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balances", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addToken', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balances', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "depositInfo", + functionFragment: 'depositInfo', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "lockTokenDeposit", + functionFragment: 'lockTokenDeposit', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "oracles", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'oracles', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockBlock", + functionFragment: 'unlockBlock', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockTokenDeposit", + functionFragment: 'unlockTokenDeposit', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "withdrawTokensTo", + functionFragment: 'withdrawTokensTo', data: BytesLike ): Result; events: { - "OwnershipTransferred(address,address)": EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; } export interface OwnershipTransferredEventObject { @@ -641,7 +641,7 @@ export interface DepositPaymaster extends BaseContract { }; filters: { - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; diff --git a/src/contracts/src/aa-4337/samples/IOracle.ts b/src/contracts/src/aa-4337/samples/IOracle.ts index 942a185f..ec382cf5 100644 --- a/src/contracts/src/aa-4337/samples/IOracle.ts +++ b/src/contracts/src/aa-4337/samples/IOracle.ts @@ -10,31 +10,31 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface IOracleInterface extends utils.Interface { functions: { - "getTokenValueOfEth(uint256)": FunctionFragment; + 'getTokenValueOfEth(uint256)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "getTokenValueOfEth"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'getTokenValueOfEth'): FunctionFragment; encodeFunctionData( - functionFragment: "getTokenValueOfEth", + functionFragment: 'getTokenValueOfEth', values: [PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "getTokenValueOfEth", + functionFragment: 'getTokenValueOfEth', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/samples/SimpleAccount.ts b/src/contracts/src/aa-4337/samples/SimpleAccount.ts deleted file mode 100644 index a4390322..00000000 --- a/src/contracts/src/aa-4337/samples/SimpleAccount.ts +++ /dev/null @@ -1,599 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface SimpleAccountInterface extends utils.Interface { - functions: { - "addDeposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address)": FunctionFragment; - "nonce()": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "addDeposit" - | "entryPoint" - | "execute" - | "executeBatch" - | "getDeposit" - | "initialize" - | "nonce" - | "owner" - | "proxiableUUID" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "addDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "entryPoint", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "executeBatch", - values: [PromiseOrValue[], PromiseOrValue[]] - ): string; - encodeFunctionData( - functionFragment: "getDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "proxiableUUID", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "withdrawDepositTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeBatch", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proxiableUUID", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeToAndCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawDepositTo", - data: BytesLike - ): Result; - - events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "Initialized(uint8)": EventFragment; - "SimpleAccountInitialized(address,address)": EventFragment; - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SimpleAccountInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export interface AdminChangedEventObject { - previousAdmin: string; - newAdmin: string; -} -export type AdminChangedEvent = TypedEvent< - [string, string], - AdminChangedEventObject ->; - -export type AdminChangedEventFilter = TypedEventFilter; - -export interface BeaconUpgradedEventObject { - beacon: string; -} -export type BeaconUpgradedEvent = TypedEvent< - [string], - BeaconUpgradedEventObject ->; - -export type BeaconUpgradedEventFilter = TypedEventFilter; - -export interface InitializedEventObject { - version: number; -} -export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; - -export type InitializedEventFilter = TypedEventFilter; - -export interface SimpleAccountInitializedEventObject { - entryPoint: string; - owner: string; -} -export type SimpleAccountInitializedEvent = TypedEvent< - [string, string], - SimpleAccountInitializedEventObject ->; - -export type SimpleAccountInitializedEventFilter = - TypedEventFilter; - -export interface UpgradedEventObject { - implementation: string; -} -export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; - -export type UpgradedEventFilter = TypedEventFilter; - -export interface SimpleAccount extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SimpleAccountInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise<[string]>; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - - initialize( - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonce(overrides?: CallOverrides): Promise<[BigNumber]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - addDeposit(overrides?: CallOverrides): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AdminChanged(address,address)"( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - AdminChanged( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - - "BeaconUpgraded(address)"( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - BeaconUpgraded( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - - "Initialized(uint8)"(version?: null): InitializedEventFilter; - Initialized(version?: null): InitializedEventFilter; - - "SimpleAccountInitialized(address,address)"( - entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): SimpleAccountInitializedEventFilter; - SimpleAccountInitialized( - entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): SimpleAccountInitializedEventFilter; - - "Upgraded(address)"( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; - Upgraded( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; - }; - - estimateGas: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts b/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts index aabc641d..6f2f74e8 100644 --- a/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts +++ b/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,81 +70,92 @@ export type UserOperationStructOutput = [ export interface TestAggregatedAccountInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "aggregator()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getAggregator()": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'aggregator()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getAggregator()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "aggregator" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getAggregator" - | "getDeposit" - | "initialize" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'aggregator' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getAggregator' + | 'getDeposit' + | 'initialize' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "aggregator", - values?: undefined + functionFragment: 'addGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addOwner', + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'aggregator', + values?: undefined ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -152,36 +163,67 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getAggregator", + functionFragment: 'getAggregator', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize", + functionFragment: 'initialize', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -191,7 +233,7 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -199,14 +241,24 @@ export interface TestAggregatedAccountInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -217,23 +269,19 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -241,97 +289,116 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'addGuardian', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'aggregator', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "getAggregator", + functionFragment: 'getAggregator', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'onERC721Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'removeGuardian', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'removeOwner', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'supportsInterface', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'tokensReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'updateEntryPoint', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'upgradeToAndCall', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -355,18 +422,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -381,17 +436,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -399,16 +482,19 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; +export interface OwnerAddedEventObject { + newOwner: string; } -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; + +export type OwnerAddedEventFilter = TypedEventFilter; -export type RegistryChangedEventFilter = TypedEventFilter; +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; export interface UpgradedEventObject { implementation: string; @@ -444,19 +530,21 @@ export interface TestAggregatedAccount extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise<[string]>; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -479,25 +567,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -515,32 +631,38 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -566,19 +688,21 @@ export interface TestAggregatedAccount extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -601,25 +725,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -637,32 +789,38 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -688,17 +846,19 @@ export interface TestAggregatedAccount extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, + addOwner( + _newOwner: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -721,25 +881,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -757,17 +945,28 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -778,11 +977,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -809,7 +1003,7 @@ export interface TestAggregatedAccount extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -818,25 +1012,14 @@ export interface TestAggregatedAccount extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -845,30 +1028,42 @@ export interface TestAggregatedAccount extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; - "Upgraded(address)"( + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -877,20 +1072,22 @@ export interface TestAggregatedAccount extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -912,25 +1109,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -948,20 +1173,31 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -969,11 +1205,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -1000,20 +1231,22 @@ export interface TestAggregatedAccount extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1035,25 +1268,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1071,20 +1332,31 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1092,11 +1364,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts b/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts index 81aac0b8..58bb60f2 100644 --- a/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts +++ b/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts @@ -12,48 +12,46 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface TestAggregatedAccountFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,address,address,uint256)": FunctionFragment; - "getAddress(address,address,address,uint256)": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,address,uint256)': FunctionFragment; + 'getAddress(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", + functionFragment: 'createAccount', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "getAddress", + functionFragment: 'getAddress', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue @@ -61,14 +59,14 @@ export interface TestAggregatedAccountFactoryInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } @@ -104,7 +102,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -112,7 +109,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -123,7 +119,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -131,7 +126,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -142,7 +136,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -150,7 +143,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -164,7 +156,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -172,7 +163,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -186,7 +176,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -194,7 +183,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides diff --git a/src/contracts/src/aa-4337/samples/TokenPaymaster.ts b/src/contracts/src/aa-4337/samples/TokenPaymaster.ts index 0fb49190..6e26b4e6 100644 --- a/src/contracts/src/aa-4337/samples/TokenPaymaster.ts +++ b/src/contracts/src/aa-4337/samples/TokenPaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,110 +70,110 @@ export type UserOperationStructOutput = [ export interface TokenPaymasterInterface extends utils.Interface { functions: { - "COST_OF_POST()": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "deposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mintTokens(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "owner()": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "symbol()": FunctionFragment; - "theFactory()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'COST_OF_POST()': FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'allowance(address,address)': FunctionFragment; + 'approve(address,uint256)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'decimals()': FunctionFragment; + 'decreaseAllowance(address,uint256)': FunctionFragment; + 'deposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'increaseAllowance(address,uint256)': FunctionFragment; + 'mintTokens(address,uint256)': FunctionFragment; + 'name()': FunctionFragment; + 'owner()': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'symbol()': FunctionFragment; + 'theFactory()': FunctionFragment; + 'totalSupply()': FunctionFragment; + 'transfer(address,uint256)': FunctionFragment; + 'transferFrom(address,address,uint256)': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "COST_OF_POST" - | "addStake" - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "deposit" - | "entryPoint" - | "getDeposit" - | "increaseAllowance" - | "mintTokens" - | "name" - | "owner" - | "postOp" - | "renounceOwnership" - | "symbol" - | "theFactory" - | "totalSupply" - | "transfer" - | "transferFrom" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "withdrawStake" - | "withdrawTo" + | 'COST_OF_POST' + | 'addStake' + | 'allowance' + | 'approve' + | 'balanceOf' + | 'decimals' + | 'decreaseAllowance' + | 'deposit' + | 'entryPoint' + | 'getDeposit' + | 'increaseAllowance' + | 'mintTokens' + | 'name' + | 'owner' + | 'postOp' + | 'renounceOwnership' + | 'symbol' + | 'theFactory' + | 'totalSupply' + | 'transfer' + | 'transferFrom' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "COST_OF_POST", + functionFragment: 'COST_OF_POST', values?: undefined ): string; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "allowance", + functionFragment: 'allowance', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "approve", + functionFragment: 'approve', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: 'decimals', values?: undefined): string; encodeFunctionData( - functionFragment: "decreaseAllowance", + functionFragment: 'decreaseAllowance', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "increaseAllowance", + functionFragment: 'increaseAllowance', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "mintTokens", + functionFragment: 'mintTokens', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'name', values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -181,24 +181,24 @@ export interface TokenPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: 'symbol', values?: undefined): string; encodeFunctionData( - functionFragment: "theFactory", + functionFragment: 'theFactory', values?: undefined ): string; encodeFunctionData( - functionFragment: "totalSupply", + functionFragment: 'totalSupply', values?: undefined ): string; encodeFunctionData( - functionFragment: "transfer", + functionFragment: 'transfer', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "transferFrom", + functionFragment: 'transferFrom', values: [ PromiseOrValue, PromiseOrValue, @@ -206,15 +206,15 @@ export interface TokenPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -222,80 +222,80 @@ export interface TokenPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "COST_OF_POST", + functionFragment: 'COST_OF_POST', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'allowance', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'approve', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'decimals', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "decreaseAllowance", + functionFragment: 'decreaseAllowance', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "increaseAllowance", + functionFragment: 'increaseAllowance', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "mintTokens", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'mintTokens', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'name', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "theFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'symbol', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'theFactory', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "totalSupply", + functionFragment: 'totalSupply', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'transfer', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "transferFrom", + functionFragment: 'transferFrom', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "Approval(address,address,uint256)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; + 'Approval(address,address,uint256)': EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; + 'Transfer(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Approval'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Transfer'): EventFragment; } export interface ApprovalEventObject { @@ -700,7 +700,7 @@ export interface TokenPaymaster extends BaseContract { }; filters: { - "Approval(address,address,uint256)"( + 'Approval(address,address,uint256)'( owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null @@ -711,7 +711,7 @@ export interface TokenPaymaster extends BaseContract { value?: null ): ApprovalEventFilter; - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; @@ -720,7 +720,7 @@ export interface TokenPaymaster extends BaseContract { newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; - "Transfer(address,address,uint256)"( + 'Transfer(address,address,uint256)'( from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null diff --git a/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts b/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts index 0cc23b22..4db42925 100644 --- a/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts +++ b/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,72 +70,72 @@ export type UserOperationStructOutput = [ export interface VerifyingPaymasterInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "deposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)": FunctionFragment; - "owner()": FunctionFragment; - "parsePaymasterAndData(bytes)": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "senderNonce(address)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "verifyingSigner()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'deposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)': FunctionFragment; + 'owner()': FunctionFragment; + 'parsePaymasterAndData(bytes)': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'senderNonce(address)': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'verifyingSigner()': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "deposit" - | "entryPoint" - | "getDeposit" - | "getHash" - | "owner" - | "parsePaymasterAndData" - | "postOp" - | "renounceOwnership" - | "senderNonce" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "verifyingSigner" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'deposit' + | 'entryPoint' + | 'getDeposit' + | 'getHash' + | 'owner' + | 'parsePaymasterAndData' + | 'postOp' + | 'renounceOwnership' + | 'senderNonce' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'verifyingSigner' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "getHash", + functionFragment: 'getHash', values: [ UserOperationStruct, PromiseOrValue, PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "parsePaymasterAndData", + functionFragment: 'parsePaymasterAndData', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -143,23 +143,23 @@ export interface VerifyingPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "senderNonce", + functionFragment: 'senderNonce', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -167,64 +167,64 @@ export interface VerifyingPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "verifyingSigner", + functionFragment: 'verifyingSigner', values?: undefined ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getHash', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "parsePaymasterAndData", + functionFragment: 'parsePaymasterAndData', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "senderNonce", + functionFragment: 'senderNonce', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "verifyingSigner", + functionFragment: 'verifyingSigner', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "OwnershipTransferred(address,address)": EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; } export interface OwnershipTransferredEventObject { @@ -500,7 +500,7 @@ export interface VerifyingPaymaster extends BaseContract { }; filters: { - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts index 3e20db45..d27e0c66 100644 --- a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts +++ b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../../common"; +} from '../../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,83 +70,94 @@ export type UserOperationStructOutput = [ export interface BrokenBLSAccountInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "aggregator()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getBlsPublicKey()": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,uint256[4])": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'aggregator()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getBlsPublicKey()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'initialize(address,uint256[4])': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "aggregator" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getBlsPublicKey" - | "getDeposit" - | "initialize(address,address,uint256[4])" - | "initialize(address,address,address)" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'aggregator' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getBlsPublicKey' + | 'getDeposit' + | 'initialize(address,address)' + | 'initialize(address,uint256[4])' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "aggregator", - values?: undefined + functionFragment: 'addGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addOwner', + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'aggregator', + values?: undefined ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -154,21 +165,24 @@ export interface BrokenBLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getBlsPublicKey", + functionFragment: 'getBlsPublicKey', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize(address,address,uint256[4])", + functionFragment: 'initialize(address,address)', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'initialize(address,uint256[4])', values: [ - PromiseOrValue, PromiseOrValue, [ PromiseOrValue, @@ -179,24 +193,51 @@ export interface BrokenBLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "initialize(address,address,address)", + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -206,7 +247,7 @@ export interface BrokenBLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -214,14 +255,24 @@ export interface BrokenBLSAccountInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -232,23 +283,19 @@ export interface BrokenBLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -256,106 +303,125 @@ export interface BrokenBLSAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'addGuardian', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'aggregator', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'executeBatch', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'getBlsPublicKey', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "getBlsPublicKey", + functionFragment: 'initialize(address,address)', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "initialize(address,address,uint256[4])", + functionFragment: 'initialize(address,uint256[4])', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "initialize(address,address,address)", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'removeOwner', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'supportsInterface', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'tokensReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'updateEntryPoint', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'upgradeToAndCall', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "PublicKeyChanged(uint256[4],uint256[4])": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'PublicKeyChanged(uint256[4],uint256[4])': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "PublicKeyChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'PublicKeyChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -379,18 +445,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -405,17 +459,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -423,6 +505,20 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; +export interface OwnerAddedEventObject { + newOwner: string; +} +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; + +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; + export interface PublicKeyChangedEventObject { oldPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; newPublicKey: [BigNumber, BigNumber, BigNumber, BigNumber]; @@ -438,17 +534,6 @@ export type PublicKeyChangedEvent = TypedEvent< export type PublicKeyChangedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; -} -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; - -export type RegistryChangedEventFilter = TypedEventFilter; - export interface UpgradedEventObject { implementation: string; } @@ -483,19 +568,21 @@ export interface BrokenBLSAccount extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise<[string]>; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -518,9 +605,14 @@ export interface BrokenBLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -530,27 +622,49 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -568,32 +682,38 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -619,19 +739,21 @@ export interface BrokenBLSAccount extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -654,9 +776,14 @@ export interface BrokenBLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -666,27 +793,49 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -704,32 +853,38 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -755,17 +910,19 @@ export interface BrokenBLSAccount extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, + addOwner( + _newOwner: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -788,9 +945,14 @@ export interface BrokenBLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -800,27 +962,49 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -838,17 +1022,28 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -859,11 +1054,6 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -890,7 +1080,7 @@ export interface BrokenBLSAccount extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -899,25 +1089,14 @@ export interface BrokenBLSAccount extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -926,21 +1105,42 @@ export interface BrokenBLSAccount extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "PublicKeyChanged(uint256[4],uint256[4])"( + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; + + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'PublicKeyChanged(uint256[4],uint256[4])'( oldPublicKey?: null, newPublicKey?: null ): PublicKeyChangedEventFilter; @@ -949,16 +1149,7 @@ export interface BrokenBLSAccount extends BaseContract { newPublicKey?: null ): PublicKeyChangedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - - "Upgraded(address)"( + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -967,20 +1158,22 @@ export interface BrokenBLSAccount extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1000,9 +1193,14 @@ export interface BrokenBLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -1012,27 +1210,49 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1050,20 +1270,31 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1071,11 +1302,6 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -1102,20 +1328,22 @@ export interface BrokenBLSAccount extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1135,9 +1363,14 @@ export interface BrokenBLSAccount extends BaseContract { getDeposit(overrides?: CallOverrides): Promise; - "initialize(address,address,uint256[4])"( + 'initialize(address,address)'( + anEntryPoint: PromiseOrValue, + anOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + 'initialize(address,uint256[4])'( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, aPublicKey: [ PromiseOrValue, PromiseOrValue, @@ -1147,27 +1380,49 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "initialize(address,address,address)"( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1185,20 +1440,31 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1206,11 +1472,6 @@ export interface BrokenBLSAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts index f282c372..83675989 100644 --- a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts +++ b/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts @@ -12,39 +12,38 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../../common"; +} from '../../../../common'; export interface BrokenBLSAccountFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,address,uint256,uint256[4])": FunctionFragment; - "getAddress(address,address,uint256,uint256[4])": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,uint256,uint256[4])': FunctionFragment; + 'getAddress(address,uint256,uint256[4])': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", + functionFragment: 'createAccount', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, [ @@ -56,9 +55,8 @@ export interface BrokenBLSAccountFactoryInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "getAddress", + functionFragment: 'getAddress', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, [ @@ -71,14 +69,14 @@ export interface BrokenBLSAccountFactoryInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } @@ -114,7 +112,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -127,7 +124,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -143,7 +139,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -156,7 +151,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -172,7 +166,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -185,7 +178,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -204,7 +196,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -217,7 +208,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -236,7 +226,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, @@ -249,7 +238,6 @@ export interface BrokenBLSAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, salt: PromiseOrValue, aPublicKey: [ PromiseOrValue, diff --git a/src/contracts/src/aa-4337/test/MaliciousAccount.ts b/src/contracts/src/aa-4337/test/MaliciousAccount.ts index 9b92a02d..40610776 100644 --- a/src/contracts/src/aa-4337/test/MaliciousAccount.ts +++ b/src/contracts/src/aa-4337/test/MaliciousAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,13 +65,13 @@ export type UserOperationStructOutput = [ export interface MaliciousAccountInterface extends utils.Interface { functions: { - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "validateUserOp"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'validateUserOp'): FunctionFragment; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -80,7 +80,7 @@ export interface MaliciousAccountInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts b/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts index ef43893d..18d2b002 100644 --- a/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts +++ b/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,79 +70,90 @@ export type UserOperationStructOutput = [ export interface TestAggregatedAccountInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "aggregator()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'aggregator()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "aggregator" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getDeposit" - | "initialize" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'aggregator' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getDeposit' + | 'initialize' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "aggregator", - values?: undefined + functionFragment: 'addGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addOwner', + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'aggregator', + values?: undefined ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -150,32 +161,63 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize", + functionFragment: 'initialize', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -185,7 +227,7 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -193,14 +235,24 @@ export interface TestAggregatedAccountInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -211,23 +263,19 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -235,93 +283,112 @@ export interface TestAggregatedAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'addGuardian', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'aggregator', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'onERC721Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'removeGuardian', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'removeOwner', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'supportsInterface', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'tokensReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'updateEntryPoint', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'upgradeToAndCall', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -345,18 +412,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -371,17 +426,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -389,16 +472,19 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; +export interface OwnerAddedEventObject { + newOwner: string; } -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; + +export type OwnerAddedEventFilter = TypedEventFilter; -export type RegistryChangedEventFilter = TypedEventFilter; +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; export interface UpgradedEventObject { implementation: string; @@ -434,19 +520,21 @@ export interface TestAggregatedAccount extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise<[string]>; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise<[string]>; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -467,25 +555,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -503,32 +619,38 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -554,19 +676,21 @@ export interface TestAggregatedAccount extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -587,25 +711,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -623,32 +775,38 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -674,17 +832,19 @@ export interface TestAggregatedAccount extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, + addOwner( + _newOwner: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + aggregator(overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -705,25 +865,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -741,17 +929,28 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -762,11 +961,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -793,7 +987,7 @@ export interface TestAggregatedAccount extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -802,25 +996,14 @@ export interface TestAggregatedAccount extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -829,30 +1012,42 @@ export interface TestAggregatedAccount extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; - "Upgraded(address)"( + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -861,20 +1056,22 @@ export interface TestAggregatedAccount extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -894,25 +1091,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -930,20 +1155,31 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -951,11 +1187,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -982,20 +1213,22 @@ export interface TestAggregatedAccount extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - aggregator(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + aggregator(overrides?: CallOverrides): Promise; + entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1015,25 +1248,53 @@ export interface TestAggregatedAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - arg2: PromiseOrValue, + arg1: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1051,20 +1312,31 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1072,11 +1344,6 @@ export interface TestAggregatedAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts b/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts index 81aac0b8..58bb60f2 100644 --- a/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts +++ b/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts @@ -12,48 +12,46 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface TestAggregatedAccountFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,address,address,uint256)": FunctionFragment; - "getAddress(address,address,address,uint256)": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,address,uint256)': FunctionFragment; + 'getAddress(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", + functionFragment: 'createAccount', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "getAddress", + functionFragment: 'getAddress', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue @@ -61,14 +59,14 @@ export interface TestAggregatedAccountFactoryInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } @@ -104,7 +102,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -112,7 +109,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -123,7 +119,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -131,7 +126,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -142,7 +136,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -150,7 +143,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -164,7 +156,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -172,7 +163,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -186,7 +176,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { createAccount( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -194,7 +183,6 @@ export interface TestAggregatedAccountFactory extends BaseContract { getAddress( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides diff --git a/src/contracts/src/aa-4337/test/TestCounter.ts b/src/contracts/src/aa-4337/test/TestCounter.ts index 9609e206..c3a9695c 100644 --- a/src/contracts/src/aa-4337/test/TestCounter.ts +++ b/src/contracts/src/aa-4337/test/TestCounter.ts @@ -12,73 +12,73 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface TestCounterInterface extends utils.Interface { functions: { - "count()": FunctionFragment; - "countFail()": FunctionFragment; - "counters(address)": FunctionFragment; - "gasWaster(uint256,string)": FunctionFragment; - "justemit()": FunctionFragment; - "offset()": FunctionFragment; - "xxx(uint256)": FunctionFragment; + 'count()': FunctionFragment; + 'countFail()': FunctionFragment; + 'counters(address)': FunctionFragment; + 'gasWaster(uint256,string)': FunctionFragment; + 'justemit()': FunctionFragment; + 'offset()': FunctionFragment; + 'xxx(uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "count" - | "countFail" - | "counters" - | "gasWaster" - | "justemit" - | "offset" - | "xxx" + | 'count' + | 'countFail' + | 'counters' + | 'gasWaster' + | 'justemit' + | 'offset' + | 'xxx' ): FunctionFragment; - encodeFunctionData(functionFragment: "count", values?: undefined): string; - encodeFunctionData(functionFragment: "countFail", values?: undefined): string; + encodeFunctionData(functionFragment: 'count', values?: undefined): string; + encodeFunctionData(functionFragment: 'countFail', values?: undefined): string; encodeFunctionData( - functionFragment: "counters", + functionFragment: 'counters', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "gasWaster", + functionFragment: 'gasWaster', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "justemit", values?: undefined): string; - encodeFunctionData(functionFragment: "offset", values?: undefined): string; + encodeFunctionData(functionFragment: 'justemit', values?: undefined): string; + encodeFunctionData(functionFragment: 'offset', values?: undefined): string; encodeFunctionData( - functionFragment: "xxx", + functionFragment: 'xxx', values: [PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "count", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "countFail", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "counters", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "gasWaster", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "justemit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "offset", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "xxx", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'count', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'countFail', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'counters', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'gasWaster', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'justemit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'offset', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'xxx', data: BytesLike): Result; events: { - "CalledFrom(address)": EventFragment; + 'CalledFrom(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "CalledFrom"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'CalledFrom'): EventFragment; } export interface CalledFromEventObject { @@ -199,7 +199,7 @@ export interface TestCounter extends BaseContract { }; filters: { - "CalledFrom(address)"(sender?: null): CalledFromEventFilter; + 'CalledFrom(address)'(sender?: null): CalledFromEventFilter; CalledFrom(sender?: null): CalledFromEventFilter; }; diff --git a/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts b/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts index b2f21cd3..d34f0dfd 100644 --- a/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts +++ b/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,52 +70,52 @@ export type UserOperationStructOutput = [ export interface TestExpirePaymasterInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "deposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "owner()": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'deposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'owner()': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "deposit" - | "entryPoint" - | "getDeposit" - | "owner" - | "postOp" - | "renounceOwnership" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'deposit' + | 'entryPoint' + | 'getDeposit' + | 'owner' + | 'postOp' + | 'renounceOwnership' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -123,19 +123,19 @@ export interface TestExpirePaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -143,47 +143,47 @@ export interface TestExpirePaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "OwnershipTransferred(address,address)": EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; } export interface OwnershipTransferredEventObject { @@ -384,7 +384,7 @@ export interface TestExpirePaymaster extends BaseContract { }; filters: { - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; diff --git a/src/contracts/src/aa-4337/test/TestExpiryAccount.ts b/src/contracts/src/aa-4337/test/TestExpiryAccount.ts index 8e3e7000..f9e8e558 100644 --- a/src/contracts/src/aa-4337/test/TestExpiryAccount.ts +++ b/src/contracts/src/aa-4337/test/TestExpiryAccount.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,71 +70,86 @@ export type UserOperationStructOutput = [ export interface TestExpiryAccountInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "addTemporaryOwner(address,uint48,uint48)": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "ownerAfter(address)": FunctionFragment; - "ownerUntil(address)": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'addTemporaryOwner(address,uint48,uint48)': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'ownerAfter(address)': FunctionFragment; + 'ownerUntil(address)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "addTemporaryOwner" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getDeposit" - | "initialize" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "ownerAfter" - | "ownerUntil" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'addTemporaryOwner' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getDeposit' + | 'initialize' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'ownerAfter' + | 'ownerUntil' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "addTemporaryOwner", + functionFragment: 'addGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'addTemporaryOwner', values: [ PromiseOrValue, PromiseOrValue, @@ -142,15 +157,11 @@ export interface TestExpiryAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -158,32 +169,63 @@ export interface TestExpiryAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize", + functionFragment: 'initialize', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -193,7 +235,7 @@ export interface TestExpiryAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -201,22 +243,32 @@ export interface TestExpiryAccountInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "ownerAfter", + functionFragment: 'ownerAfter', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "ownerUntil", + functionFragment: 'ownerUntil', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -227,23 +279,19 @@ export interface TestExpiryAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -251,98 +299,117 @@ export interface TestExpiryAccountInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'addGuardian', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'addTemporaryOwner', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "addTemporaryOwner", + functionFragment: 'executeBatch', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC721Received', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'ownerAfter', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'ownerUntil', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerAfter", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerUntil", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'removeGuardian', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'removeOwner', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'supportsInterface', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'tokensReceived', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'updateEntryPoint', data: BytesLike ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'upgradeToAndCall', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -366,18 +433,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -392,17 +447,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -410,16 +493,19 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; +export interface OwnerAddedEventObject { + newOwner: string; } -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; -export type RegistryChangedEventFilter = TypedEventFilter; +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; export interface UpgradedEventObject { implementation: string; @@ -455,12 +541,20 @@ export interface TestExpiryAccount extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + addTemporaryOwner( owner: PromiseOrValue, _after: PromiseOrValue, @@ -468,12 +562,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - entryPoint(overrides?: CallOverrides): Promise<[string]>; execute( @@ -493,25 +581,53 @@ export interface TestExpiryAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -529,8 +645,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - ownerAfter( arg0: PromiseOrValue, overrides?: CallOverrides @@ -543,28 +657,36 @@ export interface TestExpiryAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -590,12 +712,20 @@ export interface TestExpiryAccount extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + addTemporaryOwner( owner: PromiseOrValue, _after: PromiseOrValue, @@ -603,12 +733,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - entryPoint(overrides?: CallOverrides): Promise; execute( @@ -628,25 +752,53 @@ export interface TestExpiryAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -664,8 +816,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - ownerAfter( arg0: PromiseOrValue, overrides?: CallOverrides @@ -678,28 +828,36 @@ export interface TestExpiryAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -725,10 +883,18 @@ export interface TestExpiryAccount extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + addTemporaryOwner( owner: PromiseOrValue, _after: PromiseOrValue, @@ -736,12 +902,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - entryPoint(overrides?: CallOverrides): Promise; execute( @@ -761,25 +921,53 @@ export interface TestExpiryAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -797,8 +985,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - ownerAfter( arg0: PromiseOrValue, overrides?: CallOverrides @@ -811,13 +997,26 @@ export interface TestExpiryAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -828,11 +1027,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -859,7 +1053,7 @@ export interface TestExpiryAccount extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -868,25 +1062,14 @@ export interface TestExpiryAccount extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -895,30 +1078,42 @@ export interface TestExpiryAccount extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; - "Upgraded(address)"( + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -927,12 +1122,20 @@ export interface TestExpiryAccount extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + addTemporaryOwner( owner: PromiseOrValue, _after: PromiseOrValue, @@ -940,12 +1143,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - entryPoint(overrides?: CallOverrides): Promise; execute( @@ -965,25 +1162,53 @@ export interface TestExpiryAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1001,8 +1226,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - ownerAfter( arg0: PromiseOrValue, overrides?: CallOverrides @@ -1015,16 +1238,29 @@ export interface TestExpiryAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1032,11 +1268,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -1063,12 +1294,20 @@ export interface TestExpiryAccount extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + addTemporaryOwner( owner: PromiseOrValue, _after: PromiseOrValue, @@ -1076,12 +1315,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - entryPoint(overrides?: CallOverrides): Promise; execute( @@ -1101,25 +1334,53 @@ export interface TestExpiryAccount extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1137,8 +1398,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - ownerAfter( arg0: PromiseOrValue, overrides?: CallOverrides @@ -1151,16 +1410,29 @@ export interface TestExpiryAccount extends BaseContract { proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1168,11 +1440,6 @@ export interface TestExpiryAccount extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/aa-4337/test/TestHelpers.ts b/src/contracts/src/aa-4337/test/TestHelpers.ts index 560493e6..3bc2248a 100644 --- a/src/contracts/src/aa-4337/test/TestHelpers.ts +++ b/src/contracts/src/aa-4337/test/TestHelpers.ts @@ -10,16 +10,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type ValidationDataStruct = { aggregator: PromiseOrValue; @@ -35,26 +35,26 @@ export type ValidationDataStructOutput = [string, number, number] & { export interface TestHelpersInterface extends utils.Interface { functions: { - "intersectTimeRange(uint256,uint256)": FunctionFragment; - "packValidationData(bool,uint48,uint48)": FunctionFragment; - "packValidationDataStruct((address,uint48,uint48))": FunctionFragment; - "parseValidationData(uint256)": FunctionFragment; + 'intersectTimeRange(uint256,uint256)': FunctionFragment; + 'packValidationData(bool,uint48,uint48)': FunctionFragment; + 'packValidationDataStruct((address,uint48,uint48))': FunctionFragment; + 'parseValidationData(uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "intersectTimeRange" - | "packValidationData" - | "packValidationDataStruct" - | "parseValidationData" + | 'intersectTimeRange' + | 'packValidationData' + | 'packValidationDataStruct' + | 'parseValidationData' ): FunctionFragment; encodeFunctionData( - functionFragment: "intersectTimeRange", + functionFragment: 'intersectTimeRange', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "packValidationData", + functionFragment: 'packValidationData', values: [ PromiseOrValue, PromiseOrValue, @@ -62,28 +62,28 @@ export interface TestHelpersInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "packValidationDataStruct", + functionFragment: 'packValidationDataStruct', values: [ValidationDataStruct] ): string; encodeFunctionData( - functionFragment: "parseValidationData", + functionFragment: 'parseValidationData', values: [PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "intersectTimeRange", + functionFragment: 'intersectTimeRange', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "packValidationData", + functionFragment: 'packValidationData', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "packValidationDataStruct", + functionFragment: 'packValidationDataStruct', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "parseValidationData", + functionFragment: 'parseValidationData', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/test/TestOracle.ts b/src/contracts/src/aa-4337/test/TestOracle.ts index 216bc9cb..aace07ed 100644 --- a/src/contracts/src/aa-4337/test/TestOracle.ts +++ b/src/contracts/src/aa-4337/test/TestOracle.ts @@ -10,31 +10,31 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface TestOracleInterface extends utils.Interface { functions: { - "getTokenValueOfEth(uint256)": FunctionFragment; + 'getTokenValueOfEth(uint256)': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "getTokenValueOfEth"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'getTokenValueOfEth'): FunctionFragment; encodeFunctionData( - functionFragment: "getTokenValueOfEth", + functionFragment: 'getTokenValueOfEth', values: [PromiseOrValue] ): string; decodeFunctionResult( - functionFragment: "getTokenValueOfEth", + functionFragment: 'getTokenValueOfEth', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts b/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts index cb85eb86..a922d56a 100644 --- a/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts +++ b/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,52 +70,52 @@ export type UserOperationStructOutput = [ export interface TestPaymasterAcceptAllInterface extends utils.Interface { functions: { - "addStake(uint32)": FunctionFragment; - "deposit()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "owner()": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'deposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'owner()': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "deposit" - | "entryPoint" - | "getDeposit" - | "owner" - | "postOp" - | "renounceOwnership" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "withdrawStake" - | "withdrawTo" + | 'addStake' + | 'deposit' + | 'entryPoint' + | 'getDeposit' + | 'owner' + | 'postOp' + | 'renounceOwnership' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -123,19 +123,19 @@ export interface TestPaymasterAcceptAllInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -143,47 +143,47 @@ export interface TestPaymasterAcceptAllInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "OwnershipTransferred(address,address)": EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; } export interface OwnershipTransferredEventObject { @@ -384,7 +384,7 @@ export interface TestPaymasterAcceptAll extends BaseContract { }; filters: { - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; diff --git a/src/contracts/src/aa-4337/test/TestRevertAccount.ts b/src/contracts/src/aa-4337/test/TestRevertAccount.ts index 64c640ba..55099bd0 100644 --- a/src/contracts/src/aa-4337/test/TestRevertAccount.ts +++ b/src/contracts/src/aa-4337/test/TestRevertAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,20 +65,20 @@ export type UserOperationStructOutput = [ export interface TestRevertAccountInterface extends utils.Interface { functions: { - "revertLong(uint256)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'revertLong(uint256)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( - nameOrSignatureOrTopic: "revertLong" | "validateUserOp" + nameOrSignatureOrTopic: 'revertLong' | 'validateUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "revertLong", + functionFragment: 'revertLong', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -86,9 +86,9 @@ export interface TestRevertAccountInterface extends utils.Interface { ] ): string; - decodeFunctionResult(functionFragment: "revertLong", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'revertLong', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts b/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts index 41a7d177..6c414069 100644 --- a/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts +++ b/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,48 +65,48 @@ export type UserOperationStructOutput = [ export interface TestSignatureAggregatorInterface extends utils.Interface { functions: { - "addStake(address,uint32)": FunctionFragment; - "aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])": FunctionFragment; - "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)": FunctionFragment; - "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + 'addStake(address,uint32)': FunctionFragment; + 'aggregateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[])': FunctionFragment; + 'validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)': FunctionFragment; + 'validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "addStake" - | "aggregateSignatures" - | "validateSignatures" - | "validateUserOpSignature" + | 'addStake' + | 'aggregateSignatures' + | 'validateSignatures' + | 'validateUserOpSignature' ): FunctionFragment; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', values: [UserOperationStruct[]] ): string; encodeFunctionData( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', values: [UserOperationStruct[], PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', values: [UserOperationStruct] ): string; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "aggregateSignatures", + functionFragment: 'aggregateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateSignatures", + functionFragment: 'validateSignatures', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOpSignature", + functionFragment: 'validateUserOpSignature', data: BytesLike ): Result; diff --git a/src/contracts/src/aa-4337/test/TestToken.ts b/src/contracts/src/aa-4337/test/TestToken.ts index 3ae96e30..f31c8ec2 100644 --- a/src/contracts/src/aa-4337/test/TestToken.ts +++ b/src/contracts/src/aa-4337/test/TestToken.ts @@ -12,90 +12,90 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export interface TestTokenInterface extends utils.Interface { functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; + 'allowance(address,address)': FunctionFragment; + 'approve(address,uint256)': FunctionFragment; + 'balanceOf(address)': FunctionFragment; + 'decimals()': FunctionFragment; + 'decreaseAllowance(address,uint256)': FunctionFragment; + 'increaseAllowance(address,uint256)': FunctionFragment; + 'mint(address,uint256)': FunctionFragment; + 'name()': FunctionFragment; + 'symbol()': FunctionFragment; + 'totalSupply()': FunctionFragment; + 'transfer(address,uint256)': FunctionFragment; + 'transferFrom(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "allowance" - | "approve" - | "balanceOf" - | "decimals" - | "decreaseAllowance" - | "increaseAllowance" - | "mint" - | "name" - | "symbol" - | "totalSupply" - | "transfer" - | "transferFrom" + | 'allowance' + | 'approve' + | 'balanceOf' + | 'decimals' + | 'decreaseAllowance' + | 'increaseAllowance' + | 'mint' + | 'name' + | 'symbol' + | 'totalSupply' + | 'transfer' + | 'transferFrom' ): FunctionFragment; encodeFunctionData( - functionFragment: "allowance", + functionFragment: 'allowance', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "approve", + functionFragment: 'approve', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "balanceOf", + functionFragment: 'balanceOf', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: 'decimals', values?: undefined): string; encodeFunctionData( - functionFragment: "decreaseAllowance", + functionFragment: 'decreaseAllowance', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "increaseAllowance", + functionFragment: 'increaseAllowance', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "mint", + functionFragment: 'mint', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: 'name', values?: undefined): string; + encodeFunctionData(functionFragment: 'symbol', values?: undefined): string; encodeFunctionData( - functionFragment: "totalSupply", + functionFragment: 'totalSupply', values?: undefined ): string; encodeFunctionData( - functionFragment: "transfer", + functionFragment: 'transfer', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "transferFrom", + functionFragment: 'transferFrom', values: [ PromiseOrValue, PromiseOrValue, @@ -103,38 +103,38 @@ export interface TestTokenInterface extends utils.Interface { ] ): string; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'allowance', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'approve', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'balanceOf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'decimals', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "decreaseAllowance", + functionFragment: 'decreaseAllowance', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "increaseAllowance", + functionFragment: 'increaseAllowance', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'mint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'name', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'symbol', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "totalSupply", + functionFragment: 'totalSupply', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'transfer', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "transferFrom", + functionFragment: 'transferFrom', data: BytesLike ): Result; events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; + 'Approval(address,address,uint256)': EventFragment; + 'Transfer(address,address,uint256)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Approval'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Transfer'): EventFragment; } export interface ApprovalEventObject { @@ -360,7 +360,7 @@ export interface TestToken extends BaseContract { }; filters: { - "Approval(address,address,uint256)"( + 'Approval(address,address,uint256)'( owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null @@ -371,7 +371,7 @@ export interface TestToken extends BaseContract { value?: null ): ApprovalEventFilter; - "Transfer(address,address,uint256)"( + 'Transfer(address,address,uint256)'( from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null diff --git a/src/contracts/src/aa-4337/test/TestUtil.ts b/src/contracts/src/aa-4337/test/TestUtil.ts index 671570a2..6b640e1e 100644 --- a/src/contracts/src/aa-4337/test/TestUtil.ts +++ b/src/contracts/src/aa-4337/test/TestUtil.ts @@ -10,16 +10,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -63,17 +63,17 @@ export type UserOperationStructOutput = [ export interface TestUtilInterface extends utils.Interface { functions: { - "packUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + 'packUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; }; - getFunction(nameOrSignatureOrTopic: "packUserOp"): FunctionFragment; + getFunction(nameOrSignatureOrTopic: 'packUserOp'): FunctionFragment; encodeFunctionData( - functionFragment: "packUserOp", + functionFragment: 'packUserOp', values: [UserOperationStruct] ): string; - decodeFunctionResult(functionFragment: "packUserOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'packUserOp', data: BytesLike): Result; events: {}; } diff --git a/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts b/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts index 3140edf7..35b0ece8 100644 --- a/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts +++ b/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts @@ -12,16 +12,16 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -65,31 +65,31 @@ export type UserOperationStructOutput = [ export interface TestWarmColdAccountInterface extends utils.Interface { functions: { - "state()": FunctionFragment; - "touchPaymaster(address)": FunctionFragment; - "touchStorage()": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'state()': FunctionFragment; + 'touchPaymaster(address)': FunctionFragment; + 'touchStorage()': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "state" - | "touchPaymaster" - | "touchStorage" - | "validateUserOp" + | 'state' + | 'touchPaymaster' + | 'touchStorage' + | 'validateUserOp' ): FunctionFragment; - encodeFunctionData(functionFragment: "state", values?: undefined): string; + encodeFunctionData(functionFragment: 'state', values?: undefined): string; encodeFunctionData( - functionFragment: "touchPaymaster", + functionFragment: 'touchPaymaster', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "touchStorage", + functionFragment: 'touchStorage', values?: undefined ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -97,17 +97,17 @@ export interface TestWarmColdAccountInterface extends utils.Interface { ] ): string; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'state', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "touchPaymaster", + functionFragment: 'touchPaymaster', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "touchStorage", + functionFragment: 'touchStorage', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', data: BytesLike ): Result; diff --git a/src/contracts/src/access/Guarded.ts b/src/contracts/src/access/Guarded.ts new file mode 100644 index 00000000..441d2bec --- /dev/null +++ b/src/contracts/src/access/Guarded.ts @@ -0,0 +1,135 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { + FunctionFragment, + Result, + EventFragment, +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../common'; + +export interface GuardedInterface extends utils.Interface { + functions: { + 'isGuardian(address)': FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: 'isGuardian'): FunctionFragment; + + encodeFunctionData( + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + + events: { + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; +} + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + +export interface Guarded extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: GuardedInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + }; + + estimateGas: { + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/access/Owned.ts b/src/contracts/src/access/Owned.ts new file mode 100644 index 00000000..db49bd1c --- /dev/null +++ b/src/contracts/src/access/Owned.ts @@ -0,0 +1,130 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { + FunctionFragment, + Result, + EventFragment, +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../common'; + +export interface OwnedInterface extends utils.Interface { + functions: { + 'isOwner(address)': FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: 'isOwner'): FunctionFragment; + + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + + events: { + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; +} + +export interface OwnerAddedEventObject { + newOwner: string; +} +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; + +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; + +export interface Owned extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: OwnedInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; + + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + }; + + estimateGas: { + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts b/src/contracts/src/access/index.ts similarity index 52% rename from src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts rename to src/contracts/src/access/index.ts index 7b03cddb..90aa3a4e 100644 --- a/src/contracts/factories/src/interfaces/IEtherspotPaymaster.sol/index.ts +++ b/src/contracts/src/access/index.ts @@ -1,4 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { IPaymaster__factory } from "./IPaymaster__factory"; +export type { Guarded } from "./Guarded"; +export type { Owned } from "./Owned"; diff --git a/src/contracts/src/backward_compatibility_helpers/Account.ts b/src/contracts/src/backward_compatibility_helpers/Account.ts deleted file mode 100644 index a002607b..00000000 --- a/src/contracts/src/backward_compatibility_helpers/Account.ts +++ /dev/null @@ -1,192 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export interface AccountInterface extends utils.Interface { - functions: { - "executeTransaction(address,uint256,bytes)": FunctionFragment; - "implementation()": FunctionFragment; - "registry()": FunctionFragment; - "setImplementation(address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "executeTransaction" - | "implementation" - | "registry" - | "setImplementation" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "executeTransaction", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "setImplementation", - values: [PromiseOrValue] - ): string; - - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setImplementation", - data: BytesLike - ): Result; - - events: {}; -} - -export interface Account extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AccountInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - executeTransaction( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - setImplementation( - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - executeTransaction( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - setImplementation( - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - executeTransaction( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - setImplementation( - implementation_: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - executeTransaction( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - setImplementation( - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - executeTransaction( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - setImplementation( - implementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/src/contracts/src/backward_compatibility_helpers/AccountController.ts b/src/contracts/src/backward_compatibility_helpers/AccountController.ts deleted file mode 100644 index e003ec90..00000000 --- a/src/contracts/src/backward_compatibility_helpers/AccountController.ts +++ /dev/null @@ -1,235 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export interface AccountControllerInterface extends utils.Interface { - functions: { - "accountImplementation()": FunctionFragment; - "accountRegistry()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "accountImplementation" | "accountRegistry" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "accountImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "accountRegistry", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "accountImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "accountRegistry", - data: BytesLike - ): Result; - - events: { - "AccountDeployed(address,address)": EventFragment; - "AccountImplementationUpdated(address)": EventFragment; - "AccountRegistryUpdated(address)": EventFragment; - "AccountTransactionExecuted(address,address,uint256,bytes,bytes)": EventFragment; - "AccountUpgraded(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "AccountImplementationUpdated" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountRegistryUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountTransactionExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountUpgraded"): EventFragment; -} - -export interface AccountDeployedEventObject { - account: string; - accountImplementation: string; -} -export type AccountDeployedEvent = TypedEvent< - [string, string], - AccountDeployedEventObject ->; - -export type AccountDeployedEventFilter = TypedEventFilter; - -export interface AccountImplementationUpdatedEventObject { - accountImplementation: string; -} -export type AccountImplementationUpdatedEvent = TypedEvent< - [string], - AccountImplementationUpdatedEventObject ->; - -export type AccountImplementationUpdatedEventFilter = - TypedEventFilter; - -export interface AccountRegistryUpdatedEventObject { - accountRegistry: string; -} -export type AccountRegistryUpdatedEvent = TypedEvent< - [string], - AccountRegistryUpdatedEventObject ->; - -export type AccountRegistryUpdatedEventFilter = - TypedEventFilter; - -export interface AccountTransactionExecutedEventObject { - account: string; - to: string; - value: BigNumber; - data: string; - response: string; -} -export type AccountTransactionExecutedEvent = TypedEvent< - [string, string, BigNumber, string, string], - AccountTransactionExecutedEventObject ->; - -export type AccountTransactionExecutedEventFilter = - TypedEventFilter; - -export interface AccountUpgradedEventObject { - account: string; - accountImplementation: string; -} -export type AccountUpgradedEvent = TypedEvent< - [string, string], - AccountUpgradedEventObject ->; - -export type AccountUpgradedEventFilter = TypedEventFilter; - -export interface AccountController extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AccountControllerInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accountImplementation(overrides?: CallOverrides): Promise<[string]>; - - accountRegistry(overrides?: CallOverrides): Promise<[string]>; - }; - - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - - callStatic: { - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - }; - - filters: { - "AccountDeployed(address,address)"( - account?: null, - accountImplementation?: null - ): AccountDeployedEventFilter; - AccountDeployed( - account?: null, - accountImplementation?: null - ): AccountDeployedEventFilter; - - "AccountImplementationUpdated(address)"( - accountImplementation?: null - ): AccountImplementationUpdatedEventFilter; - AccountImplementationUpdated( - accountImplementation?: null - ): AccountImplementationUpdatedEventFilter; - - "AccountRegistryUpdated(address)"( - accountRegistry?: null - ): AccountRegistryUpdatedEventFilter; - AccountRegistryUpdated( - accountRegistry?: null - ): AccountRegistryUpdatedEventFilter; - - "AccountTransactionExecuted(address,address,uint256,bytes,bytes)"( - account?: null, - to?: null, - value?: null, - data?: null, - response?: null - ): AccountTransactionExecutedEventFilter; - AccountTransactionExecuted( - account?: null, - to?: null, - value?: null, - data?: null, - response?: null - ): AccountTransactionExecutedEventFilter; - - "AccountUpgraded(address,address)"( - account?: null, - accountImplementation?: null - ): AccountUpgradedEventFilter; - AccountUpgraded( - account?: null, - accountImplementation?: null - ): AccountUpgradedEventFilter; - }; - - estimateGas: { - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - accountImplementation( - overrides?: CallOverrides - ): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - }; -} diff --git a/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts b/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts deleted file mode 100644 index 5ea8f8f9..00000000 --- a/src/contracts/src/backward_compatibility_helpers/AccountRegistryMock.ts +++ /dev/null @@ -1,211 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export interface AccountRegistryMockInterface extends utils.Interface { - functions: { - "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; - "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; - "mockAccountOwners(address,address[])": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "isValidAccountSignature(address,bytes,bytes)" - | "isValidAccountSignature(address,bytes32,bytes)" - | "mockAccountOwners" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "mockAccountOwners", - values: [PromiseOrValue, PromiseOrValue[]] - ): string; - - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "mockAccountOwners", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AccountRegistryMock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AccountRegistryMockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - mockAccountOwners( - account: PromiseOrValue, - owners: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mockAccountOwners( - account: PromiseOrValue, - owners: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mockAccountOwners( - account: PromiseOrValue, - owners: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mockAccountOwners( - account: PromiseOrValue, - owners: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mockAccountOwners( - account: PromiseOrValue, - owners: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts b/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts deleted file mode 100644 index 71911fe5..00000000 --- a/src/contracts/src/backward_compatibility_helpers/PersonalAccountRegistry.ts +++ /dev/null @@ -1,921 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export interface PersonalAccountRegistryInterface extends utils.Interface { - functions: { - "accountImplementation()": FunctionFragment; - "accountRegistry()": FunctionFragment; - "addAccountOwner(address,address)": FunctionFragment; - "computeAccountAddress(address)": FunctionFragment; - "deployAccount(address)": FunctionFragment; - "executeAccountTransaction(address,address,uint256,bytes)": FunctionFragment; - "gateway()": FunctionFragment; - "initialize(address,address)": FunctionFragment; - "isAccountDeployed(address)": FunctionFragment; - "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; - "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; - "refundAccountCall(address,address,uint256)": FunctionFragment; - "removeAccountOwner(address,address)": FunctionFragment; - "upgrade(address)": FunctionFragment; - "upgradeAccount(address)": FunctionFragment; - "verifyAccountOwner(address,address)": FunctionFragment; - "verifyAccountOwnerAtBlock(address,address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "accountImplementation" - | "accountRegistry" - | "addAccountOwner" - | "computeAccountAddress" - | "deployAccount" - | "executeAccountTransaction" - | "gateway" - | "initialize" - | "isAccountDeployed" - | "isValidAccountSignature(address,bytes,bytes)" - | "isValidAccountSignature(address,bytes32,bytes)" - | "refundAccountCall" - | "removeAccountOwner" - | "upgrade" - | "upgradeAccount" - | "verifyAccountOwner" - | "verifyAccountOwnerAtBlock" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "accountImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "accountRegistry", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addAccountOwner", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "computeAccountAddress", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deployAccount", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "executeAccountTransaction", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData(functionFragment: "gateway", values?: undefined): string; - encodeFunctionData( - functionFragment: "initialize", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isAccountDeployed", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "refundAccountCall", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "removeAccountOwner", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgrade", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeAccount", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "verifyAccountOwner", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "verifyAccountOwnerAtBlock", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - - decodeFunctionResult( - functionFragment: "accountImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "accountRegistry", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addAccountOwner", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "computeAccountAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deployAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeAccountTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "isAccountDeployed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "refundAccountCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "removeAccountOwner", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgrade", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "verifyAccountOwner", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "verifyAccountOwnerAtBlock", - data: BytesLike - ): Result; - - events: { - "AccountCallRefunded(address,address,address,uint256)": EventFragment; - "AccountDeployed(address,address)": EventFragment; - "AccountImplementationUpdated(address)": EventFragment; - "AccountOwnerAdded(address,address)": EventFragment; - "AccountOwnerRemoved(address,address)": EventFragment; - "AccountRegistryUpdated(address)": EventFragment; - "AccountTransactionExecuted(address,address,uint256,bytes,bytes)": EventFragment; - "AccountUpgraded(address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountCallRefunded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "AccountImplementationUpdated" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountOwnerAdded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountOwnerRemoved"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountRegistryUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountTransactionExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AccountUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; -} - -export interface AccountCallRefundedEventObject { - account: string; - beneficiary: string; - token: string; - value: BigNumber; -} -export type AccountCallRefundedEvent = TypedEvent< - [string, string, string, BigNumber], - AccountCallRefundedEventObject ->; - -export type AccountCallRefundedEventFilter = - TypedEventFilter; - -export interface AccountDeployedEventObject { - account: string; - accountImplementation: string; -} -export type AccountDeployedEvent = TypedEvent< - [string, string], - AccountDeployedEventObject ->; - -export type AccountDeployedEventFilter = TypedEventFilter; - -export interface AccountImplementationUpdatedEventObject { - accountImplementation: string; -} -export type AccountImplementationUpdatedEvent = TypedEvent< - [string], - AccountImplementationUpdatedEventObject ->; - -export type AccountImplementationUpdatedEventFilter = - TypedEventFilter; - -export interface AccountOwnerAddedEventObject { - account: string; - owner: string; -} -export type AccountOwnerAddedEvent = TypedEvent< - [string, string], - AccountOwnerAddedEventObject ->; - -export type AccountOwnerAddedEventFilter = - TypedEventFilter; - -export interface AccountOwnerRemovedEventObject { - account: string; - owner: string; -} -export type AccountOwnerRemovedEvent = TypedEvent< - [string, string], - AccountOwnerRemovedEventObject ->; - -export type AccountOwnerRemovedEventFilter = - TypedEventFilter; - -export interface AccountRegistryUpdatedEventObject { - accountRegistry: string; -} -export type AccountRegistryUpdatedEvent = TypedEvent< - [string], - AccountRegistryUpdatedEventObject ->; - -export type AccountRegistryUpdatedEventFilter = - TypedEventFilter; - -export interface AccountTransactionExecutedEventObject { - account: string; - to: string; - value: BigNumber; - data: string; - response: string; -} -export type AccountTransactionExecutedEvent = TypedEvent< - [string, string, BigNumber, string, string], - AccountTransactionExecutedEventObject ->; - -export type AccountTransactionExecutedEventFilter = - TypedEventFilter; - -export interface AccountUpgradedEventObject { - account: string; - accountImplementation: string; -} -export type AccountUpgradedEvent = TypedEvent< - [string, string], - AccountUpgradedEventObject ->; - -export type AccountUpgradedEventFilter = TypedEventFilter; - -export interface InitializedEventObject { - version: number; -} -export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; - -export type InitializedEventFilter = TypedEventFilter; - -export interface PersonalAccountRegistry extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: PersonalAccountRegistryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accountImplementation(overrides?: CallOverrides): Promise<[string]>; - - accountRegistry(overrides?: CallOverrides): Promise<[string]>; - - addAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - computeAccountAddress( - saltOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - deployAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeAccountTransaction( - account: PromiseOrValue, - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - gateway(overrides?: CallOverrides): Promise<[string]>; - - initialize( - accountImplementation_: PromiseOrValue, - gateway_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isAccountDeployed( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - refundAccountCall( - account: PromiseOrValue, - token: PromiseOrValue, - value: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - removeAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgrade( - accountImplementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - verifyAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - verifyAccountOwnerAtBlock( - account: PromiseOrValue, - owner: PromiseOrValue, - blockNumber: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - - addAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - computeAccountAddress( - saltOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeAccountTransaction( - account: PromiseOrValue, - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - gateway(overrides?: CallOverrides): Promise; - - initialize( - accountImplementation_: PromiseOrValue, - gateway_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isAccountDeployed( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - refundAccountCall( - account: PromiseOrValue, - token: PromiseOrValue, - value: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - removeAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgrade( - accountImplementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - verifyAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - verifyAccountOwnerAtBlock( - account: PromiseOrValue, - owner: PromiseOrValue, - blockNumber: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - callStatic: { - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - - addAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - computeAccountAddress( - saltOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployAccount( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeAccountTransaction( - account: PromiseOrValue, - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - gateway(overrides?: CallOverrides): Promise; - - initialize( - accountImplementation_: PromiseOrValue, - gateway_: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isAccountDeployed( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - refundAccountCall( - account: PromiseOrValue, - token: PromiseOrValue, - value: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - removeAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - upgrade( - accountImplementation_: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - upgradeAccount( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - verifyAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - verifyAccountOwnerAtBlock( - account: PromiseOrValue, - owner: PromiseOrValue, - blockNumber: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AccountCallRefunded(address,address,address,uint256)"( - account?: null, - beneficiary?: null, - token?: null, - value?: null - ): AccountCallRefundedEventFilter; - AccountCallRefunded( - account?: null, - beneficiary?: null, - token?: null, - value?: null - ): AccountCallRefundedEventFilter; - - "AccountDeployed(address,address)"( - account?: null, - accountImplementation?: null - ): AccountDeployedEventFilter; - AccountDeployed( - account?: null, - accountImplementation?: null - ): AccountDeployedEventFilter; - - "AccountImplementationUpdated(address)"( - accountImplementation?: null - ): AccountImplementationUpdatedEventFilter; - AccountImplementationUpdated( - accountImplementation?: null - ): AccountImplementationUpdatedEventFilter; - - "AccountOwnerAdded(address,address)"( - account?: null, - owner?: null - ): AccountOwnerAddedEventFilter; - AccountOwnerAdded( - account?: null, - owner?: null - ): AccountOwnerAddedEventFilter; - - "AccountOwnerRemoved(address,address)"( - account?: null, - owner?: null - ): AccountOwnerRemovedEventFilter; - AccountOwnerRemoved( - account?: null, - owner?: null - ): AccountOwnerRemovedEventFilter; - - "AccountRegistryUpdated(address)"( - accountRegistry?: null - ): AccountRegistryUpdatedEventFilter; - AccountRegistryUpdated( - accountRegistry?: null - ): AccountRegistryUpdatedEventFilter; - - "AccountTransactionExecuted(address,address,uint256,bytes,bytes)"( - account?: null, - to?: null, - value?: null, - data?: null, - response?: null - ): AccountTransactionExecutedEventFilter; - AccountTransactionExecuted( - account?: null, - to?: null, - value?: null, - data?: null, - response?: null - ): AccountTransactionExecutedEventFilter; - - "AccountUpgraded(address,address)"( - account?: null, - accountImplementation?: null - ): AccountUpgradedEventFilter; - AccountUpgraded( - account?: null, - accountImplementation?: null - ): AccountUpgradedEventFilter; - - "Initialized(uint8)"(version?: null): InitializedEventFilter; - Initialized(version?: null): InitializedEventFilter; - }; - - estimateGas: { - accountImplementation(overrides?: CallOverrides): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - - addAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - computeAccountAddress( - saltOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeAccountTransaction( - account: PromiseOrValue, - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - gateway(overrides?: CallOverrides): Promise; - - initialize( - accountImplementation_: PromiseOrValue, - gateway_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isAccountDeployed( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - refundAccountCall( - account: PromiseOrValue, - token: PromiseOrValue, - value: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - removeAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgrade( - accountImplementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - verifyAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - verifyAccountOwnerAtBlock( - account: PromiseOrValue, - owner: PromiseOrValue, - blockNumber: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - accountImplementation( - overrides?: CallOverrides - ): Promise; - - accountRegistry(overrides?: CallOverrides): Promise; - - addAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - computeAccountAddress( - saltOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeAccountTransaction( - account: PromiseOrValue, - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - gateway(overrides?: CallOverrides): Promise; - - initialize( - accountImplementation_: PromiseOrValue, - gateway_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isAccountDeployed( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - refundAccountCall( - account: PromiseOrValue, - token: PromiseOrValue, - value: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - removeAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgrade( - accountImplementation_: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeAccount( - account: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - verifyAccountOwner( - account: PromiseOrValue, - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - verifyAccountOwnerAtBlock( - account: PromiseOrValue, - owner: PromiseOrValue, - blockNumber: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/src/backward_compatibility_helpers/index.ts b/src/contracts/src/backward_compatibility_helpers/index.ts deleted file mode 100644 index 64753414..00000000 --- a/src/contracts/src/backward_compatibility_helpers/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { Account } from "./Account"; -export type { AccountController } from "./AccountController"; -export type { AccountRegistryMock } from "./AccountRegistryMock"; -export type { GatewayRecipient } from "./GatewayRecipient"; -export type { PersonalAccountRegistry } from "./PersonalAccountRegistry"; diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts b/src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts new file mode 100644 index 00000000..5d24598d --- /dev/null +++ b/src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts @@ -0,0 +1,108 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../../common'; + +export interface IERC1271WalletInterface extends utils.Interface { + functions: { + 'isValidSignature(bytes32,bytes)': FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: 'isValidSignature'): FunctionFragment; + + encodeFunctionData( + functionFragment: 'isValidSignature', + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: 'isValidSignature', + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC1271Wallet extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC1271WalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { magicValue: string }>; + }; + + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts b/src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts new file mode 100644 index 00000000..4352ad0e --- /dev/null +++ b/src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts @@ -0,0 +1,223 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../../common'; + +export interface UniversalSigValidatorInterface extends utils.Interface { + functions: { + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + ): FunctionFragment; + + encodeFunctionData( + functionFragment: 'isValidSig', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'isValidSigImpl', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'isValidSigWithSideEffects', + data: BytesLike + ): Result; + + events: {}; +} + +export interface UniversalSigValidator extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: UniversalSigValidatorInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts b/src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts new file mode 100644 index 00000000..b7f06c08 --- /dev/null +++ b/src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts @@ -0,0 +1,56 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from 'ethers'; + +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../../common'; + +export interface ValidateSigOffchainInterface extends utils.Interface { + functions: {}; + + events: {}; +} + +export interface ValidateSigOffchain extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ValidateSigOffchainInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: {}; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts b/src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts new file mode 100644 index 00000000..49d339e9 --- /dev/null +++ b/src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC1271Wallet } from "./IERC1271Wallet"; +export type { UniversalSigValidator } from "./UniversalSigValidator"; +export type { ValidateSigOffchain } from "./ValidateSigOffchain"; diff --git a/src/contracts/src/helpers/index.ts b/src/contracts/src/helpers/index.ts new file mode 100644 index 00000000..523206a6 --- /dev/null +++ b/src/contracts/src/helpers/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as universalSignatureValidatorSol from "./UniversalSignatureValidator.sol"; +export type { universalSignatureValidatorSol }; diff --git a/src/contracts/src/index.ts b/src/contracts/src/index.ts index 86bafa2f..c8573480 100644 --- a/src/contracts/src/index.ts +++ b/src/contracts/src/index.ts @@ -3,15 +3,13 @@ /* eslint-disable */ import type * as aa4337 from "./aa-4337"; export type { aa4337 }; -import type * as backwardCompatibilityHelpers from "./backward_compatibility_helpers"; -export type { backwardCompatibilityHelpers }; +import type * as access from "./access"; +export type { access }; +import type * as helpers from "./helpers"; +export type { helpers }; import type * as interfaces from "./interfaces"; export type { interfaces }; -import type * as libs from "./libs"; -export type { libs }; import type * as paymaster from "./paymaster"; export type { paymaster }; -import type * as test from "./test"; -export type { test }; import type * as wallet from "./wallet"; export type { wallet }; diff --git a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts b/src/contracts/src/interfaces/IEtherspotPaymaster.ts similarity index 76% rename from src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts rename to src/contracts/src/interfaces/IEtherspotPaymaster.ts index 0a403237..3383edab 100644 --- a/src/contracts/src/interfaces/IEtherspotPaymaster.sol/IPaymaster.ts +++ b/src/contracts/src/interfaces/IEtherspotPaymaster.ts @@ -13,16 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { + FunctionFragment, + Result, + EventFragment, +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -64,38 +68,38 @@ export type UserOperationStructOutput = [ signature: string; }; -export interface IPaymasterInterface extends utils.Interface { +export interface IEtherspotPaymasterInterface extends utils.Interface { functions: { - "checkSponsorFunds(address)": FunctionFragment; - "depositFunds()": FunctionFragment; - "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + 'checkSponsorFunds(address)': FunctionFragment; + 'depositFunds()': FunctionFragment; + 'getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "checkSponsorFunds" - | "depositFunds" - | "getHash" - | "postOp" - | "validatePaymasterUserOp" + | 'checkSponsorFunds' + | 'depositFunds' + | 'getHash' + | 'postOp' + | 'validatePaymasterUserOp' ): FunctionFragment; encodeFunctionData( - functionFragment: "checkSponsorFunds", + functionFragment: 'checkSponsorFunds', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "depositFunds", + functionFragment: 'depositFunds', values?: undefined ): string; encodeFunctionData( - functionFragment: "getHash", + functionFragment: 'getHash', values: [UserOperationStruct] ): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -103,7 +107,7 @@ export interface IPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -112,29 +116,47 @@ export interface IPaymasterInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "checkSponsorFunds", + functionFragment: 'checkSponsorFunds', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "depositFunds", + functionFragment: 'depositFunds', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getHash', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; - events: {}; + events: { + 'SponsorTransaction(bool,address,address,bytes)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'SponsorTransaction'): EventFragment; +} + +export interface SponsorTransactionEventObject { + success: boolean; + paymaster: string; + sender: string; + userOpHash: string; } +export type SponsorTransactionEvent = TypedEvent< + [boolean, string, string, string], + SponsorTransactionEventObject +>; -export interface IPaymaster extends BaseContract { +export type SponsorTransactionEventFilter = + TypedEventFilter; + +export interface IEtherspotPaymaster extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: IPaymasterInterface; + interface: IEtherspotPaymasterInterface; queryFilter( event: TypedEventFilter, @@ -243,7 +265,20 @@ export interface IPaymaster extends BaseContract { >; }; - filters: {}; + filters: { + 'SponsorTransaction(bool,address,address,bytes)'( + success?: null, + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorTransactionEventFilter; + SponsorTransaction( + success?: null, + paymaster?: null, + sender?: null, + userOpHash?: null + ): SponsorTransactionEventFilter; + }; estimateGas: { checkSponsorFunds( diff --git a/src/contracts/src/interfaces/IEtherspotWallet.ts b/src/contracts/src/interfaces/IEtherspotWallet.ts new file mode 100644 index 00000000..65315958 --- /dev/null +++ b/src/contracts/src/interfaces/IEtherspotWallet.ts @@ -0,0 +1,417 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { + FunctionFragment, + Result, + EventFragment, +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../common'; + +export interface IEtherspotWalletInterface extends utils.Interface { + functions: { + 'addDeposit()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'nonce()': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'addDeposit' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getDeposit' + | 'isOwner' + | 'nonce' + | 'updateEntryPoint' + ): FunctionFragment; + + encodeFunctionData( + functionFragment: 'addDeposit', + values?: undefined + ): string; + encodeFunctionData( + functionFragment: 'entryPoint', + values?: undefined + ): string; + encodeFunctionData( + functionFragment: 'execute', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'executeBatch', + values: [PromiseOrValue[], PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: 'getDeposit', + values?: undefined + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; + encodeFunctionData( + functionFragment: 'updateEntryPoint', + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'executeBatch', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'updateEntryPoint', + data: BytesLike + ): Result; + + events: { + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'OwnerAdded(address,uint256)': EventFragment; + 'OwnerRemoved(address,uint256)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; +} + +export interface EntryPointChangedEventObject { + oldEntryPoint: string; + newEntryPoint: string; +} +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletInitializedEventObject { + entryPoint: string; + owner: string; +} +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string], + EtherspotWalletInitializedEventObject +>; + +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; + +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface OwnerAddedEventObject { + newOwner: string; + blockFrom: BigNumber; +} +export type OwnerAddedEvent = TypedEvent< + [string, BigNumber], + OwnerAddedEventObject +>; + +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; + blockFrom: BigNumber; +} +export type OwnerRemovedEvent = TypedEvent< + [string, BigNumber], + OwnerRemovedEventObject +>; + +export type OwnerRemovedEventFilter = TypedEventFilter; + +export interface IEtherspotWallet extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IEtherspotWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + isOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + isOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + addDeposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + isOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + 'EntryPointChanged(address,address)'( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + 'EtherspotWalletInitialized(address,address)'( + entryPoint?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + EtherspotWalletInitialized( + entryPoint?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): EtherspotWalletInitializedEventFilter; + + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'OwnerAdded(address,uint256)'( + newOwner?: null, + blockFrom?: null + ): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null, blockFrom?: null): OwnerAddedEventFilter; + + 'OwnerRemoved(address,uint256)'( + removedOwner?: null, + blockFrom?: null + ): OwnerRemovedEventFilter; + OwnerRemoved( + removedOwner?: null, + blockFrom?: null + ): OwnerRemovedEventFilter; + }; + + estimateGas: { + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + isOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + isOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/src/interfaces/IWhitelist.ts b/src/contracts/src/interfaces/IWhitelist.ts index 9eb860e4..bf23ad1b 100644 --- a/src/contracts/src/interfaces/IWhitelist.ts +++ b/src/contracts/src/interfaces/IWhitelist.ts @@ -11,62 +11,62 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from '../../common'; export interface IWhitelistInterface extends utils.Interface { functions: { - "add(address)": FunctionFragment; - "addBatch(address[])": FunctionFragment; - "check(address,address)": FunctionFragment; - "remove(address)": FunctionFragment; - "removeBatch(address[])": FunctionFragment; + 'add(address)': FunctionFragment; + 'addBatch(address[])': FunctionFragment; + 'check(address,address)': FunctionFragment; + 'remove(address)': FunctionFragment; + 'removeBatch(address[])': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "add" - | "addBatch" - | "check" - | "remove" - | "removeBatch" + | 'add' + | 'addBatch' + | 'check' + | 'remove' + | 'removeBatch' ): FunctionFragment; encodeFunctionData( - functionFragment: "add", + functionFragment: 'add', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "addBatch", + functionFragment: 'addBatch', values: [PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "check", + functionFragment: 'check', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "remove", + functionFragment: 'remove', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', values: [PromiseOrValue[]] ): string; - decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'add', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addBatch', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'check', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'remove', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', data: BytesLike ): Result; diff --git a/src/contracts/src/interfaces/index.ts b/src/contracts/src/interfaces/index.ts index 24b5ed02..96896f92 100644 --- a/src/contracts/src/interfaces/index.ts +++ b/src/contracts/src/interfaces/index.ts @@ -1,6 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as iEtherspotPaymasterSol from "./IEtherspotPaymaster.sol"; -export type { iEtherspotPaymasterSol }; +export type { IEtherspotPaymaster } from "./IEtherspotPaymaster"; +export type { IEtherspotWallet } from "./IEtherspotWallet"; export type { IWhitelist } from "./IWhitelist"; diff --git a/src/contracts/src/libs/ValidationConstants.ts b/src/contracts/src/libs/ValidationConstants.ts deleted file mode 100644 index df4cd2b9..00000000 --- a/src/contracts/src/libs/ValidationConstants.ts +++ /dev/null @@ -1,201 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export interface ValidationConstantsInterface extends utils.Interface { - functions: { - "ERC1271_INVALID_SIGNATURE()": FunctionFragment; - "ERC1271_VALID_MESSAGE_HASH_SIGNATURE()": FunctionFragment; - "ERC1271_VALID_MESSAGE_SIGNATURE()": FunctionFragment; - "ERC1820_ACCEPT_MAGIC()": FunctionFragment; - "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "ERC1271_INVALID_SIGNATURE" - | "ERC1271_VALID_MESSAGE_HASH_SIGNATURE" - | "ERC1271_VALID_MESSAGE_SIGNATURE" - | "ERC1820_ACCEPT_MAGIC" - | "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "ERC1271_INVALID_SIGNATURE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ERC1271_VALID_MESSAGE_SIGNATURE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ERC1820_ACCEPT_MAGIC", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "ERC1271_INVALID_SIGNATURE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ERC1271_VALID_MESSAGE_HASH_SIGNATURE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ERC1271_VALID_MESSAGE_SIGNATURE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ERC1820_ACCEPT_MAGIC", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ERC777_TOKENS_RECIPIENT_INTERFACE_HASH", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ValidationConstants extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ValidationConstantsInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise<[string]>; - - ERC1271_VALID_MESSAGE_HASH_SIGNATURE( - overrides?: CallOverrides - ): Promise<[string]>; - - ERC1271_VALID_MESSAGE_SIGNATURE( - overrides?: CallOverrides - ): Promise<[string]>; - - ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise<[string]>; - - ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( - overrides?: CallOverrides - ): Promise<[string]>; - }; - - ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; - - ERC1271_VALID_MESSAGE_HASH_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1271_VALID_MESSAGE_SIGNATURE(overrides?: CallOverrides): Promise; - - ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; - - ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( - overrides?: CallOverrides - ): Promise; - - callStatic: { - ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; - - ERC1271_VALID_MESSAGE_HASH_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1271_VALID_MESSAGE_SIGNATURE(overrides?: CallOverrides): Promise; - - ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; - - ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - ERC1271_INVALID_SIGNATURE(overrides?: CallOverrides): Promise; - - ERC1271_VALID_MESSAGE_HASH_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1271_VALID_MESSAGE_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1820_ACCEPT_MAGIC(overrides?: CallOverrides): Promise; - - ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - ERC1271_INVALID_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1271_VALID_MESSAGE_HASH_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1271_VALID_MESSAGE_SIGNATURE( - overrides?: CallOverrides - ): Promise; - - ERC1820_ACCEPT_MAGIC( - overrides?: CallOverrides - ): Promise; - - ERC777_TOKENS_RECIPIENT_INTERFACE_HASH( - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/src/libs/index.ts b/src/contracts/src/libs/index.ts deleted file mode 100644 index bb49b178..00000000 --- a/src/contracts/src/libs/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ValidationConstants } from "./ValidationConstants"; diff --git a/src/contracts/src/paymaster/EtherspotPaymaster.ts b/src/contracts/src/paymaster/EtherspotPaymaster.ts index c84d63c8..a10999ee 100644 --- a/src/contracts/src/paymaster/EtherspotPaymaster.ts +++ b/src/contracts/src/paymaster/EtherspotPaymaster.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from '../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,108 +70,108 @@ export type UserOperationStructOutput = [ export interface EtherspotPaymasterInterface extends utils.Interface { functions: { - "add(address)": FunctionFragment; - "addBatch(address[])": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "check(address,address)": FunctionFragment; - "checkSponsorFunds(address)": FunctionFragment; - "deposit()": FunctionFragment; - "depositFunds()": FunctionFragment; - "entryPoint()": FunctionFragment; - "getDeposit()": FunctionFragment; - "getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)": FunctionFragment; - "owner()": FunctionFragment; - "parsePaymasterAndData(bytes)": FunctionFragment; - "postOp(uint8,bytes,uint256)": FunctionFragment; - "remove(address)": FunctionFragment; - "removeBatch(address[])": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "senderNonce(address)": FunctionFragment; - "sponsorFunds(address)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake()": FunctionFragment; - "validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "whitelist(address,address)": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; + 'add(address)': FunctionFragment; + 'addBatch(address[])': FunctionFragment; + 'addStake(uint32)': FunctionFragment; + 'check(address,address)': FunctionFragment; + 'checkSponsorFunds(address)': FunctionFragment; + 'deposit()': FunctionFragment; + 'depositFunds()': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'getHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint48,uint48)': FunctionFragment; + 'owner()': FunctionFragment; + 'parsePaymasterAndData(bytes)': FunctionFragment; + 'postOp(uint8,bytes,uint256)': FunctionFragment; + 'remove(address)': FunctionFragment; + 'removeBatch(address[])': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'senderNonce(address)': FunctionFragment; + 'sponsorFunds(address)': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'unlockStake()': FunctionFragment; + 'validatePaymasterUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'whitelist(address,address)': FunctionFragment; + 'withdrawStake(address)': FunctionFragment; + 'withdrawTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "add" - | "addBatch" - | "addStake" - | "check" - | "checkSponsorFunds" - | "deposit" - | "depositFunds" - | "entryPoint" - | "getDeposit" - | "getHash" - | "owner" - | "parsePaymasterAndData" - | "postOp" - | "remove" - | "removeBatch" - | "renounceOwnership" - | "senderNonce" - | "sponsorFunds" - | "transferOwnership" - | "unlockStake" - | "validatePaymasterUserOp" - | "whitelist" - | "withdrawStake" - | "withdrawTo" + | 'add' + | 'addBatch' + | 'addStake' + | 'check' + | 'checkSponsorFunds' + | 'deposit' + | 'depositFunds' + | 'entryPoint' + | 'getDeposit' + | 'getHash' + | 'owner' + | 'parsePaymasterAndData' + | 'postOp' + | 'remove' + | 'removeBatch' + | 'renounceOwnership' + | 'senderNonce' + | 'sponsorFunds' + | 'transferOwnership' + | 'unlockStake' + | 'validatePaymasterUserOp' + | 'whitelist' + | 'withdrawStake' + | 'withdrawTo' ): FunctionFragment; encodeFunctionData( - functionFragment: "add", + functionFragment: 'add', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "addBatch", + functionFragment: 'addBatch', values: [PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "addStake", + functionFragment: 'addStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "check", + functionFragment: 'check', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "checkSponsorFunds", + functionFragment: 'checkSponsorFunds', values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: 'deposit', values?: undefined): string; encodeFunctionData( - functionFragment: "depositFunds", + functionFragment: 'depositFunds', values?: undefined ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "getHash", + functionFragment: 'getHash', values: [ UserOperationStruct, PromiseOrValue, PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "parsePaymasterAndData", + functionFragment: 'parsePaymasterAndData', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "postOp", + functionFragment: 'postOp', values: [ PromiseOrValue, PromiseOrValue, @@ -179,35 +179,35 @@ export interface EtherspotPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "remove", + functionFragment: 'remove', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', values: [PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "senderNonce", + functionFragment: 'senderNonce', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "sponsorFunds", + functionFragment: 'sponsorFunds', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', values?: undefined ): string; encodeFunctionData( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -215,95 +215,95 @@ export interface EtherspotPaymasterInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "whitelist", + functionFragment: 'whitelist', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdrawTo", + functionFragment: 'withdrawTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'add', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addBatch', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addStake', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'check', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "checkSponsorFunds", + functionFragment: 'checkSponsorFunds', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "depositFunds", + functionFragment: 'depositFunds', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getHash", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getHash', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "parsePaymasterAndData", + functionFragment: 'parsePaymasterAndData', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "postOp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'postOp', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'remove', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "senderNonce", + functionFragment: 'senderNonce', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "sponsorFunds", + functionFragment: 'sponsorFunds', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "unlockStake", + functionFragment: 'unlockStake', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validatePaymasterUserOp", + functionFragment: 'validatePaymasterUserOp', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'whitelist', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "withdrawStake", + functionFragment: 'withdrawStake', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawTo', data: BytesLike): Result; events: { - "AddedBatchToWhitelist(address,address[])": EventFragment; - "AddedToWhitelist(address,address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "RemovedBatchFromWhitelist(address,address[])": EventFragment; - "RemovedFromWhitelist(address,address)": EventFragment; - "SponsorSuccessful(address,address,bytes)": EventFragment; - "SponsorUnsuccessful(address,address,bytes)": EventFragment; - "WhitelistInitialized(address,string)": EventFragment; + 'AddedBatchToWhitelist(address,address[])': EventFragment; + 'AddedToWhitelist(address,address)': EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; + 'RemovedBatchFromWhitelist(address,address[])': EventFragment; + 'RemovedFromWhitelist(address,address)': EventFragment; + 'SponsorSuccessful(address,address,bytes)': EventFragment; + 'SponsorUnsuccessful(address,address,bytes)': EventFragment; + 'WhitelistInitialized(address,string)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AddedBatchToWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AddedToWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedBatchFromWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedFromWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SponsorSuccessful"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SponsorUnsuccessful"): EventFragment; - getEvent(nameOrSignatureOrTopic: "WhitelistInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AddedBatchToWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AddedToWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RemovedBatchFromWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RemovedFromWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'SponsorSuccessful'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'SponsorUnsuccessful'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'WhitelistInitialized'): EventFragment; } export interface AddedBatchToWhitelistEventObject { @@ -795,7 +795,7 @@ export interface EtherspotPaymaster extends BaseContract { }; filters: { - "AddedBatchToWhitelist(address,address[])"( + 'AddedBatchToWhitelist(address,address[])'( paymaster?: PromiseOrValue | null, accounts?: PromiseOrValue[] | null ): AddedBatchToWhitelistEventFilter; @@ -804,7 +804,7 @@ export interface EtherspotPaymaster extends BaseContract { accounts?: PromiseOrValue[] | null ): AddedBatchToWhitelistEventFilter; - "AddedToWhitelist(address,address)"( + 'AddedToWhitelist(address,address)'( paymaster?: PromiseOrValue | null, account?: PromiseOrValue | null ): AddedToWhitelistEventFilter; @@ -813,7 +813,7 @@ export interface EtherspotPaymaster extends BaseContract { account?: PromiseOrValue | null ): AddedToWhitelistEventFilter; - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; @@ -822,7 +822,7 @@ export interface EtherspotPaymaster extends BaseContract { newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; - "RemovedBatchFromWhitelist(address,address[])"( + 'RemovedBatchFromWhitelist(address,address[])'( paymaster?: PromiseOrValue | null, accounts?: PromiseOrValue[] | null ): RemovedBatchFromWhitelistEventFilter; @@ -831,7 +831,7 @@ export interface EtherspotPaymaster extends BaseContract { accounts?: PromiseOrValue[] | null ): RemovedBatchFromWhitelistEventFilter; - "RemovedFromWhitelist(address,address)"( + 'RemovedFromWhitelist(address,address)'( paymaster?: PromiseOrValue | null, account?: PromiseOrValue | null ): RemovedFromWhitelistEventFilter; @@ -840,7 +840,7 @@ export interface EtherspotPaymaster extends BaseContract { account?: PromiseOrValue | null ): RemovedFromWhitelistEventFilter; - "SponsorSuccessful(address,address,bytes)"( + 'SponsorSuccessful(address,address,bytes)'( paymaster?: null, sender?: null, userOpHash?: null @@ -851,7 +851,7 @@ export interface EtherspotPaymaster extends BaseContract { userOpHash?: null ): SponsorSuccessfulEventFilter; - "SponsorUnsuccessful(address,address,bytes)"( + 'SponsorUnsuccessful(address,address,bytes)'( paymaster?: null, sender?: null, userOpHash?: null @@ -862,7 +862,7 @@ export interface EtherspotPaymaster extends BaseContract { userOpHash?: null ): SponsorUnsuccessfulEventFilter; - "WhitelistInitialized(address,string)"( + 'WhitelistInitialized(address,string)'( owner?: null, version?: null ): WhitelistInitializedEventFilter; diff --git a/src/contracts/src/paymaster/Whitelist.ts b/src/contracts/src/paymaster/Whitelist.ts index 6b832369..c36b6962 100644 --- a/src/contracts/src/paymaster/Whitelist.ts +++ b/src/contracts/src/paymaster/Whitelist.ts @@ -11,115 +11,115 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from '../../common'; export interface WhitelistInterface extends utils.Interface { functions: { - "add(address)": FunctionFragment; - "addBatch(address[])": FunctionFragment; - "check(address,address)": FunctionFragment; - "owner()": FunctionFragment; - "remove(address)": FunctionFragment; - "removeBatch(address[])": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "whitelist(address,address)": FunctionFragment; + 'add(address)': FunctionFragment; + 'addBatch(address[])': FunctionFragment; + 'check(address,address)': FunctionFragment; + 'owner()': FunctionFragment; + 'remove(address)': FunctionFragment; + 'removeBatch(address[])': FunctionFragment; + 'renounceOwnership()': FunctionFragment; + 'transferOwnership(address)': FunctionFragment; + 'whitelist(address,address)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "add" - | "addBatch" - | "check" - | "owner" - | "remove" - | "removeBatch" - | "renounceOwnership" - | "transferOwnership" - | "whitelist" + | 'add' + | 'addBatch' + | 'check' + | 'owner' + | 'remove' + | 'removeBatch' + | 'renounceOwnership' + | 'transferOwnership' + | 'whitelist' ): FunctionFragment; encodeFunctionData( - functionFragment: "add", + functionFragment: 'add', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "addBatch", + functionFragment: 'addBatch', values: [PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "check", + functionFragment: 'check', values: [PromiseOrValue, PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: 'owner', values?: undefined): string; encodeFunctionData( - functionFragment: "remove", + functionFragment: 'remove', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', values: [PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', values?: undefined ): string; encodeFunctionData( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "whitelist", + functionFragment: 'whitelist', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "add", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addBatch", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "check", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "remove", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'add', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addBatch', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'check', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'remove', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "removeBatch", + functionFragment: 'removeBatch', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "renounceOwnership", + functionFragment: 'renounceOwnership', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "transferOwnership", + functionFragment: 'transferOwnership', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "whitelist", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'whitelist', data: BytesLike): Result; events: { - "AddedBatchToWhitelist(address,address[])": EventFragment; - "AddedToWhitelist(address,address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "RemovedBatchFromWhitelist(address,address[])": EventFragment; - "RemovedFromWhitelist(address,address)": EventFragment; - "WhitelistInitialized(address,string)": EventFragment; + 'AddedBatchToWhitelist(address,address[])': EventFragment; + 'AddedToWhitelist(address,address)': EventFragment; + 'OwnershipTransferred(address,address)': EventFragment; + 'RemovedBatchFromWhitelist(address,address[])': EventFragment; + 'RemovedFromWhitelist(address,address)': EventFragment; + 'WhitelistInitialized(address,string)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AddedBatchToWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AddedToWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedBatchFromWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RemovedFromWhitelist"): EventFragment; - getEvent(nameOrSignatureOrTopic: "WhitelistInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AddedBatchToWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AddedToWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RemovedBatchFromWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RemovedFromWhitelist'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'WhitelistInitialized'): EventFragment; } export interface AddedBatchToWhitelistEventObject { @@ -352,7 +352,7 @@ export interface Whitelist extends BaseContract { }; filters: { - "AddedBatchToWhitelist(address,address[])"( + 'AddedBatchToWhitelist(address,address[])'( paymaster?: PromiseOrValue | null, accounts?: PromiseOrValue[] | null ): AddedBatchToWhitelistEventFilter; @@ -361,7 +361,7 @@ export interface Whitelist extends BaseContract { accounts?: PromiseOrValue[] | null ): AddedBatchToWhitelistEventFilter; - "AddedToWhitelist(address,address)"( + 'AddedToWhitelist(address,address)'( paymaster?: PromiseOrValue | null, account?: PromiseOrValue | null ): AddedToWhitelistEventFilter; @@ -370,7 +370,7 @@ export interface Whitelist extends BaseContract { account?: PromiseOrValue | null ): AddedToWhitelistEventFilter; - "OwnershipTransferred(address,address)"( + 'OwnershipTransferred(address,address)'( previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; @@ -379,7 +379,7 @@ export interface Whitelist extends BaseContract { newOwner?: PromiseOrValue | null ): OwnershipTransferredEventFilter; - "RemovedBatchFromWhitelist(address,address[])"( + 'RemovedBatchFromWhitelist(address,address[])'( paymaster?: PromiseOrValue | null, accounts?: PromiseOrValue[] | null ): RemovedBatchFromWhitelistEventFilter; @@ -388,7 +388,7 @@ export interface Whitelist extends BaseContract { accounts?: PromiseOrValue[] | null ): RemovedBatchFromWhitelistEventFilter; - "RemovedFromWhitelist(address,address)"( + 'RemovedFromWhitelist(address,address)'( paymaster?: PromiseOrValue | null, account?: PromiseOrValue | null ): RemovedFromWhitelistEventFilter; @@ -397,7 +397,7 @@ export interface Whitelist extends BaseContract { account?: PromiseOrValue | null ): RemovedFromWhitelistEventFilter; - "WhitelistInitialized(address,string)"( + 'WhitelistInitialized(address,string)'( owner?: null, version?: null ): WhitelistInitializedEventFilter; diff --git a/src/contracts/src/test/TestEtherspotWallet.ts b/src/contracts/src/test/TestEtherspotWallet.ts deleted file mode 100644 index ab4e275a..00000000 --- a/src/contracts/src/test/TestEtherspotWallet.ts +++ /dev/null @@ -1,1087 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface TestEtherspotWalletInterface extends utils.Interface { - functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getDeposit" - | "initialize" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "addDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "entryPoint", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "executeBatch", - values: [PromiseOrValue[], PromiseOrValue[]] - ): string; - encodeFunctionData( - functionFragment: "getDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; - encodeFunctionData( - functionFragment: "onERC1155Received", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "onERC721Received", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "proxiableUUID", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokensReceived", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "updateEntryPoint", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "updateRegistry", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "withdrawDepositTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeBatch", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "onERC1155Received", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "onERC721Received", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proxiableUUID", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokensReceived", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateEntryPoint", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateRegistry", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeToAndCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawDepositTo", - data: BytesLike - ): Result; - - events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export interface AdminChangedEventObject { - previousAdmin: string; - newAdmin: string; -} -export type AdminChangedEvent = TypedEvent< - [string, string], - AdminChangedEventObject ->; - -export type AdminChangedEventFilter = TypedEventFilter; - -export interface BeaconUpgradedEventObject { - beacon: string; -} -export type BeaconUpgradedEvent = TypedEvent< - [string], - BeaconUpgradedEventObject ->; - -export type BeaconUpgradedEventFilter = TypedEventFilter; - -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - -export interface EntryPointChangedEventObject { - oldEntryPoint: string; - newEntryPoint: string; -} -export type EntryPointChangedEvent = TypedEvent< - [string, string], - EntryPointChangedEventObject ->; - -export type EntryPointChangedEventFilter = - TypedEventFilter; - -export interface EtherspotWalletInitializedEventObject { - entryPoint: string; - registry: string; - owner: string; -} -export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], - EtherspotWalletInitializedEventObject ->; - -export type EtherspotWalletInitializedEventFilter = - TypedEventFilter; - -export interface InitializedEventObject { - version: number; -} -export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; - -export type InitializedEventFilter = TypedEventFilter; - -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; -} -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; - -export type RegistryChangedEventFilter = TypedEventFilter; - -export interface UpgradedEventObject { - implementation: string; -} -export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; - -export type UpgradedEventFilter = TypedEventFilter; - -export interface TestEtherspotWallet extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: TestEtherspotWalletInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - entryPoint(overrides?: CallOverrides): Promise<[string]>; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - - initialize( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - nonce(overrides?: CallOverrides): Promise<[BigNumber]>; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - _registry(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - _registry(overrides?: CallOverrides): Promise; - - addDeposit(overrides?: CallOverrides): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AdminChanged(address,address)"( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - AdminChanged( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - - "BeaconUpgraded(address)"( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - BeaconUpgraded( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( - oldEntryPoint?: null, - newEntryPoint?: null - ): EntryPointChangedEventFilter; - EntryPointChanged( - oldEntryPoint?: null, - newEntryPoint?: null - ): EntryPointChangedEventFilter; - - "EtherspotWalletInitialized(address,address,address)"( - entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): EtherspotWalletInitializedEventFilter; - EtherspotWalletInitialized( - entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): EtherspotWalletInitializedEventFilter; - - "Initialized(uint8)"(version?: null): InitializedEventFilter; - Initialized(version?: null): InitializedEventFilter; - - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - - "Upgraded(address)"( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; - Upgraded( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; - }; - - estimateGas: { - _registry(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - initialize( - anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, - anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - proxiableUUID(overrides?: CallOverrides): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - upgradeToAndCall( - newImplementation: PromiseOrValue, - data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/src/contracts/src/test/index.ts b/src/contracts/src/test/index.ts deleted file mode 100644 index 8f0b81fd..00000000 --- a/src/contracts/src/test/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { TestEtherspotWallet } from "./TestEtherspotWallet"; diff --git a/src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts b/src/contracts/src/wallet/AccountFactory.ts similarity index 70% rename from src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts rename to src/contracts/src/wallet/AccountFactory.ts index b14cf949..9244c7d6 100644 --- a/src/contracts/src/aa-4337/samples/SimpleAccountFactory.ts +++ b/src/contracts/src/wallet/AccountFactory.ts @@ -12,63 +12,71 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../../common"; +} from '../../common'; -export interface SimpleAccountFactoryInterface extends utils.Interface { +export interface AccountFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,uint256)": FunctionFragment; - "getAddress(address,uint256)": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,address,uint256)': FunctionFragment; + 'getAddress(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'createAccount', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; encodeFunctionData( - functionFragment: "getAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'getAddress', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } -export interface SimpleAccountFactory extends BaseContract { +export interface AccountFactory extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; deployed(): Promise; - interface: SimpleAccountFactoryInterface; + interface: AccountFactoryInterface; queryFilter( event: TypedEventFilter, @@ -93,12 +101,14 @@ export interface SimpleAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise<[string]>; createAccount( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -108,12 +118,14 @@ export interface SimpleAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -123,12 +135,14 @@ export interface SimpleAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides ): Promise; getAddress( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -141,12 +155,14 @@ export interface SimpleAccountFactory extends BaseContract { accountImplementation(overrides?: CallOverrides): Promise; createAccount( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -159,12 +175,14 @@ export interface SimpleAccountFactory extends BaseContract { ): Promise; createAccount( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getAddress( + _entryPoint: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides diff --git a/src/contracts/src/wallet/EtherspotWallet.ts b/src/contracts/src/wallet/EtherspotWallet.ts index 74d4ab6b..4b8bc342 100644 --- a/src/contracts/src/wallet/EtherspotWallet.ts +++ b/src/contracts/src/wallet/EtherspotWallet.ts @@ -13,20 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; +} from 'ethers'; import type { FunctionFragment, Result, EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from '../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -70,73 +70,84 @@ export type UserOperationStructOutput = [ export interface EtherspotWalletInterface extends utils.Interface { functions: { - "_registry()": FunctionFragment; - "addDeposit()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],bytes[])": FunctionFragment; - "getDeposit()": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "owner()": FunctionFragment; - "proxiableUUID()": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - "updateEntryPoint(address)": FunctionFragment; - "updateRegistry(address)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; + 'addDeposit()': FunctionFragment; + 'addGuardian(address)': FunctionFragment; + 'addOwner(address)': FunctionFragment; + 'entryPoint()': FunctionFragment; + 'execute(address,uint256,bytes)': FunctionFragment; + 'executeBatch(address[],bytes[])': FunctionFragment; + 'getDeposit()': FunctionFragment; + 'initialize(address,address)': FunctionFragment; + 'isGuardian(address)': FunctionFragment; + 'isOwner(address)': FunctionFragment; + 'isValidSig(address,bytes32,bytes)': FunctionFragment; + 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; + 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; + 'nonce()': FunctionFragment; + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; + 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; + 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; + 'proxiableUUID()': FunctionFragment; + 'removeGuardian(address)': FunctionFragment; + 'removeOwner(address)': FunctionFragment; + 'supportsInterface(bytes4)': FunctionFragment; + 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; + 'updateEntryPoint(address)': FunctionFragment; + 'upgradeTo(address)': FunctionFragment; + 'upgradeToAndCall(address,bytes)': FunctionFragment; + 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; + 'withdrawDepositTo(address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "_registry" - | "addDeposit" - | "canImplementInterfaceForAddress" - | "entryPoint" - | "execute" - | "executeBatch" - | "getDeposit" - | "initialize" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "nonce" - | "onERC1155Received" - | "onERC721Received" - | "owner" - | "proxiableUUID" - | "registry" - | "tokensReceived" - | "updateEntryPoint" - | "updateRegistry" - | "upgradeTo" - | "upgradeToAndCall" - | "validateUserOp" - | "withdrawDepositTo" + | 'addDeposit' + | 'addGuardian' + | 'addOwner' + | 'entryPoint' + | 'execute' + | 'executeBatch' + | 'getDeposit' + | 'initialize' + | 'isGuardian' + | 'isOwner' + | 'isValidSig' + | 'isValidSigImpl' + | 'isValidSigWithSideEffects' + | 'nonce' + | 'onERC1155BatchReceived' + | 'onERC1155Received' + | 'onERC721Received' + | 'proxiableUUID' + | 'removeGuardian' + | 'removeOwner' + | 'supportsInterface' + | 'tokensReceived' + | 'updateEntryPoint' + | 'upgradeTo' + | 'upgradeToAndCall' + | 'validateUserOp' + | 'withdrawDepositTo' ): FunctionFragment; - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; encodeFunctionData( - functionFragment: "addDeposit", + functionFragment: 'addDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'addGuardian', + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "entryPoint", + functionFragment: 'addOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'entryPoint', values?: undefined ): string; encodeFunctionData( - functionFragment: "execute", + functionFragment: 'execute', values: [ PromiseOrValue, PromiseOrValue, @@ -144,32 +155,63 @@ export interface EtherspotWalletInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', values: [PromiseOrValue[], PromiseOrValue[]] ): string; encodeFunctionData( - functionFragment: "getDeposit", + functionFragment: 'getDeposit', values?: undefined ): string; encodeFunctionData( - functionFragment: "initialize", + functionFragment: 'initialize', + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'isValidSig', values: [ PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: 'isValidSigImpl', + values: [ PromiseOrValue, - PromiseOrValue + PromiseOrValue, + PromiseOrValue, + PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'isValidSigWithSideEffects', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] ): string; + encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] + functionFragment: 'onERC1155BatchReceived', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; encodeFunctionData( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155Received', values: [ PromiseOrValue, PromiseOrValue, @@ -179,7 +221,7 @@ export interface EtherspotWalletInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "onERC721Received", + functionFragment: 'onERC721Received', values: [ PromiseOrValue, PromiseOrValue, @@ -187,14 +229,24 @@ export interface EtherspotWalletInterface extends utils.Interface { PromiseOrValue ] ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( - functionFragment: "proxiableUUID", + functionFragment: 'proxiableUUID', values?: undefined ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; encodeFunctionData( - functionFragment: "tokensReceived", + functionFragment: 'removeGuardian', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'removeOwner', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'supportsInterface', + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: 'tokensReceived', values: [ PromiseOrValue, PromiseOrValue, @@ -205,23 +257,19 @@ export interface EtherspotWalletInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "updateEntryPoint", + functionFragment: 'updateEntryPoint', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "updateRegistry", + functionFragment: 'upgradeTo', values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "upgradeTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", + functionFragment: 'upgradeToAndCall', values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "validateUserOp", + functionFragment: 'validateUserOp', values: [ UserOperationStruct, PromiseOrValue, @@ -229,92 +277,111 @@ export interface EtherspotWalletInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawDepositTo", + functionFragment: 'withdrawDepositTo', values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", + functionFragment: 'addGuardian', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "executeBatch", + functionFragment: 'executeBatch', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", + functionFragment: 'isValidSigImpl', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", + functionFragment: 'isValidSigWithSideEffects', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; decodeFunctionResult( - functionFragment: "onERC1155Received", + functionFragment: 'onERC1155BatchReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "onERC721Received", + functionFragment: 'onERC1155Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "proxiableUUID", + functionFragment: 'onERC721Received', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "tokensReceived", + functionFragment: 'proxiableUUID', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateEntryPoint", + functionFragment: 'removeGuardian', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "updateRegistry", + functionFragment: 'removeOwner', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "upgradeToAndCall", + functionFragment: 'supportsInterface', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "validateUserOp", + functionFragment: 'tokensReceived', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "withdrawDepositTo", + functionFragment: 'updateEntryPoint', + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; + decodeFunctionResult( + functionFragment: 'upgradeToAndCall', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'validateUserOp', + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: 'withdrawDepositTo', data: BytesLike ): Result; events: { - "AdminChanged(address,address)": EventFragment; - "BeaconUpgraded(address)": EventFragment; - "ERC777Received(address,address,uint256)": EventFragment; - "EntryPointChanged(address,address)": EventFragment; - "EtherspotWalletInitialized(address,address,address)": EventFragment; - "Initialized(uint8)": EventFragment; - "RegistryChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; + 'AdminChanged(address,address)': EventFragment; + 'BeaconUpgraded(address)': EventFragment; + 'EntryPointChanged(address,address)': EventFragment; + 'EtherspotWalletInitialized(address,address)': EventFragment; + 'EtherspotWalletReceived(address,uint256)': EventFragment; + 'GuardianAdded(address)': EventFragment; + 'GuardianRemoved(address)': EventFragment; + 'Initialized(uint8)': EventFragment; + 'OwnerAdded(address)': EventFragment; + 'OwnerRemoved(address)': EventFragment; + 'Upgraded(address)': EventFragment; }; - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RegistryChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; } export interface AdminChangedEventObject { @@ -338,18 +405,6 @@ export type BeaconUpgradedEvent = TypedEvent< export type BeaconUpgradedEventFilter = TypedEventFilter; -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; @@ -364,17 +419,45 @@ export type EntryPointChangedEventFilter = export interface EtherspotWalletInitializedEventObject { entryPoint: string; - registry: string; owner: string; } export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string, string], + [string, string], EtherspotWalletInitializedEventObject >; export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export interface EtherspotWalletReceivedEventObject { + from: string; + amount: BigNumber; +} +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; + +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; + +export interface GuardianAddedEventObject { + newGuardian: string; +} +export type GuardianAddedEvent = TypedEvent<[string], GuardianAddedEventObject>; + +export type GuardianAddedEventFilter = TypedEventFilter; + +export interface GuardianRemovedEventObject { + removedGuardian: string; +} +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; + +export type GuardianRemovedEventFilter = TypedEventFilter; + export interface InitializedEventObject { version: number; } @@ -382,16 +465,19 @@ export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; export type InitializedEventFilter = TypedEventFilter; -export interface RegistryChangedEventObject { - oldRegistry: string; - newRegistry: string; +export interface OwnerAddedEventObject { + newOwner: string; } -export type RegistryChangedEvent = TypedEvent< - [string, string], - RegistryChangedEventObject ->; +export type OwnerAddedEvent = TypedEvent<[string], OwnerAddedEventObject>; -export type RegistryChangedEventFilter = TypedEventFilter; +export type OwnerAddedEventFilter = TypedEventFilter; + +export interface OwnerRemovedEventObject { + removedOwner: string; +} +export type OwnerRemovedEvent = TypedEvent<[string], OwnerRemovedEventObject>; + +export type OwnerRemovedEventFilter = TypedEventFilter; export interface UpgradedEventObject { implementation: string; @@ -427,17 +513,19 @@ export interface EtherspotWallet extends BaseContract { removeListener: OnEvent; functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -458,25 +546,53 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise<[boolean]>; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -494,32 +610,38 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - owner(overrides?: CallOverrides): Promise<[string]>; - proxiableUUID(overrides?: CallOverrides): Promise<[string]>; - registry(overrides?: CallOverrides): Promise<[string]>; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -545,17 +667,19 @@ export interface EtherspotWallet extends BaseContract { ): Promise; }; - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -576,25 +700,53 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -612,32 +764,38 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; + overrides?: CallOverrides + ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -663,15 +821,17 @@ export interface EtherspotWallet extends BaseContract { ): Promise; callStatic: { - _registry(overrides?: CallOverrides): Promise; - addDeposit(overrides?: CallOverrides): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, + addGuardian( + _newGuardian: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -692,25 +852,53 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; + + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -728,17 +916,28 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, overrides?: CallOverrides @@ -749,11 +948,6 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: CallOverrides @@ -780,7 +974,7 @@ export interface EtherspotWallet extends BaseContract { }; filters: { - "AdminChanged(address,address)"( + 'AdminChanged(address,address)'( previousAdmin?: null, newAdmin?: null ): AdminChangedEventFilter; @@ -789,25 +983,14 @@ export interface EtherspotWallet extends BaseContract { newAdmin?: null ): AdminChangedEventFilter; - "BeaconUpgraded(address)"( + 'BeaconUpgraded(address)'( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; BeaconUpgraded( beacon?: PromiseOrValue | null ): BeaconUpgradedEventFilter; - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - - "EntryPointChanged(address,address)"( + 'EntryPointChanged(address,address)'( oldEntryPoint?: null, newEntryPoint?: null ): EntryPointChangedEventFilter; @@ -816,30 +999,42 @@ export interface EtherspotWallet extends BaseContract { newEntryPoint?: null ): EntryPointChangedEventFilter; - "EtherspotWalletInitialized(address,address,address)"( + 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - registry?: PromiseOrValue | null, owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - "Initialized(uint8)"(version?: null): InitializedEventFilter; + 'EtherspotWalletReceived(address,uint256)'( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + EtherspotWalletReceived( + from?: PromiseOrValue | null, + amount?: PromiseOrValue | null + ): EtherspotWalletReceivedEventFilter; + + 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; + + 'GuardianRemoved(address)'( + removedGuardian?: null + ): GuardianRemovedEventFilter; + GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; + + 'Initialized(uint8)'(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - "RegistryChanged(address,address)"( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; - RegistryChanged( - oldRegistry?: null, - newRegistry?: null - ): RegistryChangedEventFilter; + 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + OwnerAdded(newOwner?: null): OwnerAddedEventFilter; - "Upgraded(address)"( + 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; + + 'Upgraded(address)'( implementation?: PromiseOrValue | null ): UpgradedEventFilter; Upgraded( @@ -848,16 +1043,18 @@ export interface EtherspotWallet extends BaseContract { }; estimateGas: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -879,25 +1076,53 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -915,20 +1140,31 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -936,11 +1172,6 @@ export interface EtherspotWallet extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -967,16 +1198,18 @@ export interface EtherspotWallet extends BaseContract { }; populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - addDeposit( overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -998,25 +1231,53 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, - anRegistry: PromiseOrValue, anOwner: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, + isGuardian( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, + isOwner( + _address: PromiseOrValue, overrides?: CallOverrides ): Promise; + isValidSig( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigImpl( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + allowSideEffects: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSigWithSideEffects( + _signer: PromiseOrValue, + _hash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + nonce(overrides?: CallOverrides): Promise; + onERC1155BatchReceived( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue[], + arg3: PromiseOrValue[], + arg4: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + onERC1155Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -1034,20 +1295,31 @@ export interface EtherspotWallet extends BaseContract { overrides?: CallOverrides ): Promise; - owner(overrides?: CallOverrides): Promise; - proxiableUUID(overrides?: CallOverrides): Promise; - registry(overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeOwner( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, + arg1: PromiseOrValue, + arg2: PromiseOrValue, + arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: CallOverrides ): Promise; updateEntryPoint( @@ -1055,11 +1327,6 @@ export interface EtherspotWallet extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - updateRegistry( - _newRegistry: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - upgradeTo( newImplementation: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } diff --git a/src/contracts/src/wallet/EtherspotWalletFactory.ts b/src/contracts/src/wallet/EtherspotWalletFactory.ts index 57ed3541..7afa2dbe 100644 --- a/src/contracts/src/wallet/EtherspotWalletFactory.ts +++ b/src/contracts/src/wallet/EtherspotWalletFactory.ts @@ -12,48 +12,46 @@ import type { PopulatedTransaction, Signer, utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; +} from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue, -} from "../../common"; +} from '../../common'; export interface EtherspotWalletFactoryInterface extends utils.Interface { functions: { - "accountImplementation()": FunctionFragment; - "createAccount(address,address,address,uint256)": FunctionFragment; - "getAddress(address,address,address,uint256)": FunctionFragment; + 'accountImplementation()': FunctionFragment; + 'createAccount(address,address,uint256)': FunctionFragment; + 'getAddress(address,address,uint256)': FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "accountImplementation" - | "createAccount" - | "getAddress" + | 'accountImplementation' + | 'createAccount' + | 'getAddress' ): FunctionFragment; encodeFunctionData( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', values?: undefined ): string; encodeFunctionData( - functionFragment: "createAccount", + functionFragment: 'createAccount', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue ] ): string; encodeFunctionData( - functionFragment: "getAddress", + functionFragment: 'getAddress', values: [ - PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue @@ -61,14 +59,14 @@ export interface EtherspotWalletFactoryInterface extends utils.Interface { ): string; decodeFunctionResult( - functionFragment: "accountImplementation", + functionFragment: 'accountImplementation', data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "createAccount", + functionFragment: 'createAccount', data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddress', data: BytesLike): Result; events: {}; } @@ -104,7 +102,6 @@ export interface EtherspotWalletFactory extends BaseContract { createAccount( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -112,7 +109,6 @@ export interface EtherspotWalletFactory extends BaseContract { getAddress( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -123,7 +119,6 @@ export interface EtherspotWalletFactory extends BaseContract { createAccount( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -131,7 +126,6 @@ export interface EtherspotWalletFactory extends BaseContract { getAddress( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -142,7 +136,6 @@ export interface EtherspotWalletFactory extends BaseContract { createAccount( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -150,7 +143,6 @@ export interface EtherspotWalletFactory extends BaseContract { getAddress( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -164,7 +156,6 @@ export interface EtherspotWalletFactory extends BaseContract { createAccount( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -172,7 +163,6 @@ export interface EtherspotWalletFactory extends BaseContract { getAddress( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides @@ -186,7 +176,6 @@ export interface EtherspotWalletFactory extends BaseContract { createAccount( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } @@ -194,7 +183,6 @@ export interface EtherspotWalletFactory extends BaseContract { getAddress( _entryPoint: PromiseOrValue, - _registry: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides diff --git a/src/contracts/src/wallet/helpers/AccountRegistry.ts b/src/contracts/src/wallet/helpers/AccountRegistry.ts deleted file mode 100644 index de8173a6..00000000 --- a/src/contracts/src/wallet/helpers/AccountRegistry.ts +++ /dev/null @@ -1,169 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../../common"; - -export interface AccountRegistryInterface extends utils.Interface { - functions: { - "isValidAccountSignature(address,bytes,bytes)": FunctionFragment; - "isValidAccountSignature(address,bytes32,bytes)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "isValidAccountSignature(address,bytes,bytes)" - | "isValidAccountSignature(address,bytes32,bytes)" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidAccountSignature(address,bytes32,bytes)", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AccountRegistry extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AccountRegistryInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - callStatic: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - "isValidAccountSignature(address,bytes,bytes)"( - account: PromiseOrValue, - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidAccountSignature(address,bytes32,bytes)"( - account: PromiseOrValue, - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/src/contracts/src/wallet/helpers/WalletCompatability.ts b/src/contracts/src/wallet/helpers/WalletCompatability.ts deleted file mode 100644 index 3ddace95..00000000 --- a/src/contracts/src/wallet/helpers/WalletCompatability.ts +++ /dev/null @@ -1,436 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../../common"; - -export interface WalletCompatabilityInterface extends utils.Interface { - functions: { - "_registry()": FunctionFragment; - "canImplementInterfaceForAddress(bytes32,address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignature(bytes,bytes)": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - "registry()": FunctionFragment; - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "_registry" - | "canImplementInterfaceForAddress" - | "isValidSignature(bytes32,bytes)" - | "isValidSignature(bytes,bytes)" - | "onERC1155Received" - | "onERC721Received" - | "registry" - | "tokensReceived" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "_registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "canImplementInterfaceForAddress", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature(bytes32,bytes)", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature(bytes,bytes)", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "onERC1155Received", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "onERC721Received", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData(functionFragment: "registry", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokensReceived", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - - decodeFunctionResult(functionFragment: "_registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "canImplementInterfaceForAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature(bytes32,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature(bytes,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "onERC1155Received", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "onERC721Received", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "registry", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "tokensReceived", - data: BytesLike - ): Result; - - events: { - "ERC777Received(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ERC777Received"): EventFragment; -} - -export interface ERC777ReceivedEventObject { - from: string; - to: string; - amount: BigNumber; -} -export type ERC777ReceivedEvent = TypedEvent< - [string, string, BigNumber], - ERC777ReceivedEventObject ->; - -export type ERC777ReceivedEventFilter = TypedEventFilter; - -export interface WalletCompatability extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: WalletCompatabilityInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - _registry(overrides?: CallOverrides): Promise<[string]>; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - registry(overrides?: CallOverrides): Promise<[string]>; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - _registry(overrides?: CallOverrides): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - _registry(overrides?: CallOverrides): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "ERC777Received(address,address,uint256)"( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - ERC777Received( - from?: null, - to?: null, - amount?: null - ): ERC777ReceivedEventFilter; - }; - - estimateGas: { - _registry(overrides?: CallOverrides): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - _registry(overrides?: CallOverrides): Promise; - - canImplementInterfaceForAddress( - interfaceHash: PromiseOrValue, - addr: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes32,bytes)"( - messageHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "isValidSignature(bytes,bytes)"( - message: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC1155Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - arg4: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - onERC721Received( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - arg2: PromiseOrValue, - arg3: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registry(overrides?: CallOverrides): Promise; - - tokensReceived( - arg0: PromiseOrValue, - _from: PromiseOrValue, - _to: PromiseOrValue, - _amount: PromiseOrValue, - arg4: PromiseOrValue, - arg5: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/src/contracts/src/wallet/helpers/index.ts b/src/contracts/src/wallet/helpers/index.ts deleted file mode 100644 index 384818c5..00000000 --- a/src/contracts/src/wallet/helpers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AccountRegistry } from "./AccountRegistry"; -export type { WalletCompatability } from "./WalletCompatability"; diff --git a/src/contracts/src/wallet/index.ts b/src/contracts/src/wallet/index.ts index 2bc9eebc..bd4c2a0d 100644 --- a/src/contracts/src/wallet/index.ts +++ b/src/contracts/src/wallet/index.ts @@ -1,7 +1,6 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type * as helpers from "./helpers"; -export type { helpers }; +export type { AccountFactory } from "./AccountFactory"; export type { EtherspotWallet } from "./EtherspotWallet"; export type { EtherspotWalletFactory } from "./EtherspotWalletFactory"; diff --git a/src/sdk.ts b/src/sdk.ts index cbbff475..ccc66ef8 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,38 +1,22 @@ -import { Wallet, providers } from 'ethers'; -import { EtherspotWalletAPI, HttpRpcClient, PersonalAccountRegistryAPI } from './base'; +import { BigNumberish, Wallet, providers } from 'ethers'; +import { EtherspotWalletAPI, HttpRpcClient } from './base'; import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { getGasFee } from './common'; -import { BytesLike, hexConcat } from 'ethers/lib/utils'; -import { PersonalAccountRegistry } from './contracts'; export class LiteSdk { private EtherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; - private PersonalAccountRegistry: PersonalAccountRegistryAPI; - constructor( - private wallet: Wallet, - bundlerRpc: string, - chainId: number, - entryPoint: string, - registry: string, - accountFactory: string, - ) { + constructor(private wallet: Wallet, bundlerRpc: string, chainId: number, entryPoint: string, accountFactory: string) { this.EtherspotWallet = new EtherspotWalletAPI({ provider: wallet.provider, owner: wallet, index: 0, entryPointAddress: entryPoint, - registryAddress: registry, factoryAddress: accountFactory, }); this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); - this.PersonalAccountRegistry = new PersonalAccountRegistryAPI({ - provider: wallet.provider, - factoryAddress: registry, - owner: wallet, - }); } async getCounterFactualAddress(): Promise { @@ -56,7 +40,9 @@ export class LiteSdk { } async sign(tx: TransactionDetailsForUserOp) { + console.log('sdk.ts:: sign(): tx:', tx); const gas = await this.getGasFee(); + return this.EtherspotWallet.createSignedUserOp({ ...tx, ...gas, @@ -85,11 +71,7 @@ export class LiteSdk { return this.EtherspotWallet.epView; } - get regView() { - return this.EtherspotWallet.regView; - } - - async getAccountInitCodePAR(): Promise { - return this.PersonalAccountRegistry.getAccountInitCode(); + async encodeExecute(target: string, value: BigNumberish, data: string): Promise { + return this.EtherspotWallet.encodeExecute(target, value, data); } } From 85ddfaaf139dfac2b5078f68800f10687c5f67dc Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Fri, 21 Apr 2023 13:58:31 +0100 Subject: [PATCH 06/20] Added examples for sdk testing --- example.env | 4 + examples/01-get-address.ts | 29 +- examples/02-transfer-funds.ts | 56 +- examples/03-transfer-erc20.ts | 72 +- examples/04-batch-transfer.ts | 84 +- examples/05-batch-erc20-transfer.ts | 97 +- examples/06-swap-tokens.ts | 99 + examples/config.ts | 49 + package-lock.json | 8249 +++++++++++++---- package.json | 2 + src/base/BLSAccountAPI.ts | 5 + src/base/BaseAccountAPI.ts | 19 +- src/base/EtherspotWalletAPI.ts | 7 +- src/base/TransactionDetailsForUserOp.ts | 19 +- src/base/VerifyingPaymasterAPI.ts | 2 +- src/base/index.ts | 1 + src/contracts/src/wallet/EtherspotWallet.ts | 624 +- src/helpers/{ => abi}/ERC20_ABI.ts | 2 + src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts | 232 + src/sdk.ts | 176 +- tsconfig.json | 3 +- 21 files changed, 7552 insertions(+), 2279 deletions(-) create mode 100644 example.env create mode 100644 examples/06-swap-tokens.ts create mode 100644 examples/config.ts rename src/helpers/{ => abi}/ERC20_ABI.ts (72%) create mode 100644 src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts diff --git a/example.env b/example.env new file mode 100644 index 00000000..52062904 --- /dev/null +++ b/example.env @@ -0,0 +1,4 @@ +WALLET_PUBLIC_KEY= +WALLET_PRIVATE_KEY= + +RPC_PROVIDER_URL= \ No newline at end of file diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 7254dc05..e82c1e78 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,25 +1,24 @@ -import { Wallet, providers } from 'ethers'; import { LiteSdk } from '../src'; +import { NetworkNames, getNetworkConfig } from './config'; -const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; -const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; -const PROVIDER_URL: string = ''; -const PRIVATE_KEY: string = ''; +// add/change to correct network +const config = getNetworkConfig(NetworkNames.Mumbai); async function main() { // initializating sdk... - const provider = new providers.JsonRpcProvider(PROVIDER_URL); - const wallet = new Wallet(PRIVATE_KEY, provider); - // const wallet = Wallet.createRandom(); const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - WALLET_FACTORY_ADDRESS, // etherspot wallet factory + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + undefined, ); - const address = await sdk.getCounterFactualAddress(); - console.log(`EtherspotWallet address: ${address}`); + + // get EtherspotWallet address... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); } main() diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 6895d1a8..864189ee 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,54 +1,50 @@ -import { BigNumber, Wallet, ethers, providers } from 'ethers'; +import { BigNumberish } from 'ethers'; import { LiteSdk } from '../src'; +import { NetworkNames, getNetworkConfig } from './config'; -// mumbai contract addresses -const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; -const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; -const PROVIDER_URL: string = ''; -const PRIVATE_KEY: string = ''; +// add/change these values +const config = getNetworkConfig(NetworkNames.Mumbai); +const recipient: string = ''; // recipient wallet address +const value: string = ''; // transfer value async function main() { // initializating sdk... - const provider = new providers.JsonRpcProvider(PROVIDER_URL); - const wallet = new Wallet(PRIVATE_KEY, provider); const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - WALLET_FACTORY_ADDRESS, // etherspot wallet factory + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + undefined, ); - // get address of EtherspotWallet - const address = await sdk.getCounterFactualAddress(); - console.log('EtherspotWallet deployed at:', address); + // get address of EtherspotWallet... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // check initial balance of EtherspotWallet - const balance = await provider.getBalance(address); - console.log('EtherspotWallet balance:', balance.toString()); + // transfer some native tokens to the EtherspotWallet (if required)... + const prefunded: string = await sdk.prefundIfRequired((+value + 0.01).toString()); + console.log('\x1b[33m%s\x1b[0m', prefunded); - // // send some funds to EtherspotWallet to prefund - // await wallet.sendTransaction({ - // to: address, // EtherspotWallet address - // data: '0x', // no data - // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC - // gasLimit: ethers.utils.hexlify(50000), - // gasPrice: await provider.getGasPrice(), - // }); + // parse transfer value to correct format + const parseValue: BigNumberish = sdk.formatAmount(value); // creating and signing userOp... const userOp = await sdk.sign({ - target: '', // recipient - value: ethers.utils.parseEther('0.0001'), // amount of native asset to send, + target: recipient, // recipient + value: parseValue, // amount of native asset to send, data: '0x', // calldata is empty since we just want to transfer ether }); // sending to the bundler... const uoHash = await sdk.send(userOp); + console.log(`UserOpHash: ${uoHash}`); + // get transaction hash... console.log('Waiting for transaction...'); const txHash = await sdk.getUserOpReceipt(uoHash); - console.log(`Transaction hash: ${txHash}`); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } main() diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index 0e65d402..51917a5c 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -1,61 +1,61 @@ -import { Wallet, ethers, providers } from 'ethers'; +import { LiteSdk } from '../src'; import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { ERC20_ABI } from '../src/helpers/ERC20_ABI'; -import { getGasFee } from '../src/common'; import { printOp } from '../src/common/OperationUtils'; -import { LiteSdk } from '../src'; +import { NetworkNames, getNetworkConfig } from './config'; -// mumbai contract addresses -const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; -const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; -const PROVIDER_URL: string = ''; -const PRIVATE_KEY: string = ''; +// add/change these values +const config = getNetworkConfig(NetworkNames.Mumbai); +const erc20TokenAddress: string = ''; // ERC20 token address +const recipient: string = ''; // receipient wallet address +const value: string = ''; // transfer value async function main() { - const tkn = '0x15805373121c549ACDDB43333c677CD5492BC5Bf'; // erc20 token address - const receiver = '0xf24133e601B4d0201510Fcfb975a419C5d2759Be'; - const amount = '0.01'; - const paymaster = false; // use paymaster? - const provider = new ethers.providers.JsonRpcProvider(PROVIDER_URL); - const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; - const wallet = new Wallet(PRIVATE_KEY, provider); + // logic for paymaster implementation + const paymasterAPI = config.paymaster.use + ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) + : undefined; + // initializating sdk... const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - WALLET_FACTORY_ADDRESS, // etherspot wallet factory + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + paymasterAPI, ); - // get address of EtherspotWallet - const address = await sdk.getCounterFactualAddress(); - console.log('EtherspotWallet deployed at:', address); + // get address of EtherspotWallet... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - const token = ethers.utils.getAddress(tkn); - const to = ethers.utils.getAddress(receiver); - const erc20 = new ethers.Contract(token, ERC20_ABI, wallet); - - // transfer some of the ERC20 token to the EtherspotWallet - // await erc20.transfer(address, ethers.utils.parseEther('5')); - console.log(`DummyToken balance of EtherspotWallet: ${await erc20.balanceOf(address)}`); + // transfer some of the ERC20 token to the EtherspotWallet (if required)... + const prefunded: string = await sdk.prefundIfRequired((+value + 0.01).toString(), erc20TokenAddress); + console.log('\x1b[33m%s\x1b[0m', prefunded); + // connect to the ERC20 token contract... + const erc20 = await sdk.getERC20Instance(erc20TokenAddress); const [symbol, decimals] = await Promise.all([erc20.symbol(), erc20.decimals()]); - const amt = ethers.utils.parseUnits(amount, decimals); - console.log(`Transferring ${amount} ${symbol}...`); + // parse transfer value to correct format + const parseAmount = sdk.formatAmount(value, decimals); + console.log(`Transferring ${value} ${symbol}...`); + + // creating and signing userOp... const op = await sdk.sign({ target: erc20.address, - data: erc20.interface.encodeFunctionData('transfer', [to, amt]), - ...(await getGasFee(provider)), + data: erc20.interface.encodeFunctionData('transfer', [recipient, parseAmount]), }); console.log(`Signed UserOperation: ${await printOp(op)}`); + // sending to the bundler... const uoHash = await sdk.send(op); console.log(`UserOpHash: ${uoHash}`); + // get transaction hash... console.log('Waiting for transaction...'); const txHash = await sdk.getUserOpReceipt(uoHash); - console.log(`Transaction hash: ${txHash}`); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } main() diff --git a/examples/04-batch-transfer.ts b/examples/04-batch-transfer.ts index 0c22baa8..014a774d 100644 --- a/examples/04-batch-transfer.ts +++ b/examples/04-batch-transfer.ts @@ -1,74 +1,58 @@ -import { Wallet, ethers, providers } from 'ethers'; +import { LiteSdk } from '../src'; import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { getGasFee } from '../src/common/getGasFee'; import { printOp } from '../src/common/OperationUtils'; -import { LiteSdk } from '../src'; +import { NetworkNames, getNetworkConfig } from './config'; -// mumbai contract addresses -const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; -const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; -const PROVIDER_URL: string = ''; -const PRIVATE_KEY: string = ''; +// add/change these values +const config = getNetworkConfig(NetworkNames.Mumbai); +const recipients: Array = ['', '', '']; // recipient wallet addresses +const values: Array = ['', '', '']; // transfer values export default async function main() { - const t = [ - '0xf24133e601B4d0201510Fcfb975a419C5d2759Be', - '0xb52A8943B3Fe1ee3583bd98C8c88feBD99D41856', - '0x4Ab8aB3038056f20dB3159cBd4Ef1f607f1951C2', - ]; // recipient address array - const amount = '0.01'; // transfer amount - const paymaster = false; // use paymaster? - const provider = new ethers.providers.JsonRpcProvider(PROVIDER_URL); // logic for paymaster implementation - const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; - const wallet = new Wallet(PRIVATE_KEY, provider); + const paymasterAPI = config.paymaster.use + ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) + : undefined; + // initializating sdk... const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - WALLET_FACTORY_ADDRESS, // etherspot wallet factory + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + paymasterAPI, ); - const sender = await sdk.getCounterFactualAddress(); - - const balance = await provider.getBalance(sender); - console.log('EtherspotWallet balance:', balance.toString()); + // get address of EtherspotWallet... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // // send some funds to EtherspotWallet to prefund - // await wallet.sendTransaction({ - // to: sender, // EtherspotWallet address - // data: '0x', // no data - // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC - // gasLimit: ethers.utils.hexlify(50000), - // gasPrice: await provider.getGasPrice(), - // }); + // transfer some native tokens to the EtherspotWallet (if required)... + const totalValue: number = values.reduce((acc: number, curr: string) => { + return acc + parseFloat(curr); + }, 0); + const prefunded: string = await sdk.prefundIfRequired((+totalValue + 0.01).toString()); + console.log('\x1b[33m%s\x1b[0m', prefunded); - const ac = await sdk.getAccountContract(); - const value = ethers.utils.parseEther(amount); - - let dest: Array = []; - let data: Array = []; - t.map((addr) => addr.trim()).forEach(async (addr) => { - dest = [...dest, sender]; - console.log(`dest: ${dest}`); - data = [...data, await sdk.encodeExecute(ethers.utils.getAddress(addr), value, '0x')]; - }); - console.log(`Batch transferring ${amount} MATIC to ${dest.length} receipients... `); + // generating transaction data... + const { dest, data } = await sdk.generateBatchExecutesData(address, recipients, values); + // creating and signing userOp... const op = await sdk.sign({ - target: '', - data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), - ...(await getGasFee(provider)), + target: address, + data: await sdk.encodeBatch(dest, data), }); console.log(`Signed UserOp: ${await printOp(op)}`); + // sending to the bundler... const uoHash = await sdk.send(op); console.log(`UserOpHash: ${uoHash}`); + // get transaction hash... console.log('Waiting for transaction...'); const txHash = await sdk.getUserOpReceipt(uoHash); - console.log(`Transaction hash: ${txHash}`); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } main() diff --git a/examples/05-batch-erc20-transfer.ts b/examples/05-batch-erc20-transfer.ts index 15119ea7..a990d04e 100644 --- a/examples/05-batch-erc20-transfer.ts +++ b/examples/05-batch-erc20-transfer.ts @@ -1,87 +1,58 @@ -import { Wallet, ethers, providers } from 'ethers'; +import { LiteSdk } from '../src'; import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { getGasFee } from '../src/common'; -import { ERC20_ABI } from '../src/helpers/ERC20_ABI'; import { printOp } from '../src/common/OperationUtils'; -import { LiteSdk } from '../src'; - -// mumbai contract addresses -const ENTRYPOINT_ADDRESS: string = '0x0576a174D229E3cFA37253523E645A78A0C91B57'; -const WALLET_FACTORY_ADDRESS: string = '0x3cf07383654c2569867F02098774eddEEea86573'; -const PROVIDER_URL: string = ''; -const PRIVATE_KEY: string = ''; +import { NetworkNames, getNetworkConfig } from './config'; -const token = '0x15805373121c549ACDDB43333c677CD5492BC5Bf'; // erc20 token address -const t = [ - '0xf24133e601B4d0201510Fcfb975a419C5d2759Be', - '0xb52A8943B3Fe1ee3583bd98C8c88feBD99D41856', - '0x4Ab8aB3038056f20dB3159cBd4Ef1f607f1951C2', -]; // recipient address array -const amount = '0.01'; // transfer amount -const paymaster = false; // use paymaster? +// add/change these values +const config = getNetworkConfig(NetworkNames.Mumbai); +const erc20TokenAddress: string = ''; // ERC20 token address +const recipients: Array = ['', '', '']; // recipient wallet addresses +const values: Array = ['', '', '']; // transfer values async function main() { - // initializating sdk... - const provider = new providers.JsonRpcProvider(PROVIDER_URL); // logic for paymaster implementation - const paymasterAPI = paymaster ? getVerifyingPaymaster(process.env.PAYMASTER_URL, ENTRYPOINT_ADDRESS) : undefined; - const wallet = new Wallet(PRIVATE_KEY, provider); + const paymasterAPI = config.paymaster.use + ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) + : undefined; + // initializating sdk... const sdk = new LiteSdk( - wallet, // wallet - 'https://mumbai-bundler.etherspot.io', // bundler rpc - 80001, // chain id - ENTRYPOINT_ADDRESS, // entry point - WALLET_FACTORY_ADDRESS, // etherspot wallet factory + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + paymasterAPI, ); - const sender = await sdk.getCounterFactualAddress(); - - // check initial balance of EtherspotWallet - const balance = await provider.getBalance(sender); - console.log('EtherspotWallet balance:', balance.toString()); + // get address of EtherspotWallet... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // send some funds to EtherspotWallet to prefund - // await wallet.sendTransaction({ - // to: sender, // EtherspotWallet address - // data: '0x', // no data - // value: ethers.utils.parseEther('0.01'), // 0.1 MATIC - // gasLimit: ethers.utils.hexlify(50000), - // gasPrice: await provider.getGasPrice(), - // }); - - const tkn = ethers.utils.getAddress(token); - const erc20 = new ethers.Contract(tkn, ERC20_ABI, provider); - - // await erc20.transfer(sender, ethers.utils.parseEther('5')); - - const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); - const amt = ethers.utils.parseUnits(amount, dec); - - let dest: Array = []; - let data: Array = []; - t.map((addr) => addr.trim()).forEach((addr) => { - dest = [...dest, erc20.address]; - data = [...data, erc20.interface.encodeFunctionData('transfer', [ethers.utils.getAddress(addr), amt])]; - }); - console.log(dest); - console.log(data); - console.log(`Batch transferring ${amount} ${sym} to ${dest.length} receipients... `); + // transfer some of the ERC20 token to the EtherspotWallet (if required)... + const totalValue: number = values.reduce((acc: number, curr: string) => { + return acc + parseFloat(curr); + }, 0); + const prefunded: string = await sdk.prefundIfRequired((+totalValue + 0.01).toString(), erc20TokenAddress); + console.log('\x1b[33m%s\x1b[0m', prefunded); - const ac = await sdk.getAccountContract(); + const { dest, data } = await sdk.generateERC20BatchTransfersData(erc20TokenAddress, recipients, values); + // creating and signing userOp... const op = await sdk.sign({ - target: '', - data: ac.interface.encodeFunctionData('executeBatch', [dest, data]), - ...(await getGasFee(provider)), + target: address, + data: await sdk.encodeBatch(dest, data), }); console.log(`Signed UserOp: ${await printOp(op)}`); + // sending to the bundler... const userOpHash = await sdk.send(op); console.log(`UserOperation hash: ${userOpHash}`); + // get transaction hash... console.log('Waiting for transaction...'); const txHash = await sdk.getUserOpReceipt(userOpHash); - console.log(`Transaction hash: ${txHash}`); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } main() diff --git a/examples/06-swap-tokens.ts b/examples/06-swap-tokens.ts new file mode 100644 index 00000000..beeb2cf9 --- /dev/null +++ b/examples/06-swap-tokens.ts @@ -0,0 +1,99 @@ +import { LiteSdk } from '../src'; +import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; +import { printOp } from '../src/common/OperationUtils'; +import { SWAP_ROUTER_ABI } from '../src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI'; +import { NetworkNames, getNetworkConfig } from './config'; + +// add/change to correct network +const config = getNetworkConfig(NetworkNames.Mumbai); +const swapTokenA = '0x583f8424c6adC530D286B5292191203497fF8980'; // replace with the address of the first token you want to add liquidity for +const swapTokenB = '0x614bC50B9E467dEa445d7e04c3c58051B662401f'; // replace with the address of the second token you want to add liquidity for +// pool address: 0x17aa8919F11ce6b35D6eC5723D24be59082D4cAd +const value: string = '1'; // Add values to transfer here + +async function main() { + // logic for paymaster implementation + const paymasterAPI = config.paymaster.use + ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) + : undefined; + // initializating sdk... + const sdk = new LiteSdk( + process.env.WALLET_PRIVATE_KEY, // owner wallet private key + config.rpcProvider, // rpc provider + config.bundler, // bundler rpc + config.chainId, // chain id + config.contracts.entryPoint, // entry point + config.contracts.walletFactory, // etherspot wallet factory + paymasterAPI, + ); + + // get address of EtherspotWallet... + const address: string = await sdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); + + const preTransferTokenA = await sdk.erc20Balance(address, swapTokenA); + const preTransferTokenB = await sdk.erc20Balance(address, swapTokenB); + console.log('EtherspotWallet balance of SwapTokenA:', sdk.parseAmount(preTransferTokenA.toString())); + console.log('EtherspotWallet balance of SwapTokenB:', sdk.parseAmount(preTransferTokenB.toString())); + + // connect to the ERC20 token contract... + const erc20 = await sdk.getERC20Instance(swapTokenA); + const [decimals] = await Promise.all([erc20.decimals()]); + const parseValue = sdk.formatAmount(value, decimals); + + // prefund tokens for swap (if required)... + await sdk.mintTokenToOwner(swapTokenA, (+value + 0.01).toString()); + const prefunded = await sdk.prefundIfRequired((+value + 0.01).toString()); + console.log('\x1b[33m%s\x1b[0m', prefunded); + const prefundedERC20 = await sdk.prefundIfRequired((+value + 0.01).toString(), swapTokenA); + console.log('\x1b[33m%s\x1b[0m', prefundedERC20); + + // connecting to swap router... + const swapRouter = await sdk.connectToContract(config.contracts.uniswapV3SwapRouter, SWAP_ROUTER_ABI); + + // creating and signing userOp to approve router to spend tokens... + const op = await sdk.sign({ + target: erc20.address, + data: erc20.interface.encodeFunctionData('approve', [config.contracts.uniswapV3SwapRouter, parseValue]), + }); + console.log(`Signed UserOperation: ${await printOp(op)}`); + + // sending to the bundler... + const uoHash = await sdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + const txHash = await sdk.getUserOpReceipt(uoHash); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); + + /////////////////////////////////////////////// + /////////////////////////////////////////////// + + // generate data for swap... + const params = await sdk.generateUniSingleSwapParams(swapTokenA, swapTokenB, value); + const swapData = swapRouter.interface.encodeFunctionData('exactInputSingle', [params]); + + // creating and signing userOp to swap tokens... + const op1 = await sdk.sign({ + target: config.contracts.uniswapV3SwapRouter, + data: swapData, + }); + console.log(`Signed UserOperation: ${await printOp(op1)}`); + + // sending to the bundler... + const uoHash1 = await sdk.send(op1); + console.log(`UserOpHash: ${uoHash1}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + const txHash1 = await sdk.getUserOpReceipt(uoHash1); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash1}`); + + const postTransferERC20Balance = await sdk.erc20Balance(address, swapTokenB); + console.log('EtherspotWallet balance of SwapTokenB:', sdk.parseAmount(postTransferERC20Balance.toString())); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/config.ts b/examples/config.ts new file mode 100644 index 00000000..0cd2cd14 --- /dev/null +++ b/examples/config.ts @@ -0,0 +1,49 @@ +import * as dotenv from 'dotenv'; + +dotenv.config(); + +export enum NetworkNames { + Mainnet = 'mainnet', + Mumbai = 'mumbai', +} + +export const NetworkConfig: { + [key: string]: { + chainId: number; + rpcProvider: string; + bundler: string; + contracts: { + entryPoint: string; + walletFactory: string; + uniswapV3SwapRouter: string; + }; + paymaster: { + use: boolean; + url: string; + }; + }; +} = { + [NetworkNames.Mumbai]: { + chainId: 80001, + rpcProvider: process.env.RPC_PROVIDER_URL, + bundler: 'https://mumbai-bundler.etherspot.io', + contracts: { + entryPoint: '0x0576a174D229E3cFA37253523E645A78A0C91B57', + walletFactory: '0x8C842380d657fb3826C46D3666e977C7A227cFA6', + uniswapV3SwapRouter: '0xE592427A0AEce92De3Edee1F18E0157C05861564', + }, + paymaster: { + use: false, + url: '', + }, + }, +}; + +export function getNetworkConfig(networkName: NetworkNames) { + const key = networkName.toString(); + const networkConfig = NetworkConfig[key]; + if (!networkConfig) { + throw new Error(`No network config found for network name '${key}'`); + } + return networkConfig; +} diff --git a/package-lock.json b/package-lock.json index 91d243c8..7b4b7787 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "^16.0.3", + "npm": "^9.6.4", "ts-node": "8.10.2", "typescript": "4.5.2" } @@ -394,9 +395,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", @@ -449,9 +450,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "funding": [ { "type": "individual", @@ -688,9 +689,9 @@ } }, "node_modules/@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "funding": [ { "type": "individual", @@ -1470,9 +1471,9 @@ } }, "node_modules/ethers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.0.tgz", - "integrity": "sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -1499,10 +1500,10 @@ "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.0", + "@ethersproject/networks": "5.7.1", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.0", + "@ethersproject/providers": "5.7.2", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", @@ -1512,7 +1513,7 @@ "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.0", + "@ethersproject/web": "5.7.1", "@ethersproject/wordlists": "5.7.0" } }, @@ -2139,2125 +2140,7111 @@ "dev": true, "peer": true }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/npm": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.4.tgz", + "integrity": "sha512-8/Mct0X/w77PmgIpSlXfNIOlrZBfT+8966zLCxOhwi1qZ2Ueyy99uWPSDW6bt2OKw1NzrvHJBSgkzAvn1iWuhw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "read-package-json", + "read-package-json-fast", + "semver", + "ssri", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], "dev": true, "dependencies": { - "wrappy": "1" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.2.7", + "@npmcli/config": "^6.1.5", + "@npmcli/map-workspaces": "^3.0.3", + "@npmcli/package-json": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.0.5", + "chalk": "^4.1.2", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.1", + "glob": "^9.3.2", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^3.0.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.15", + "libnpmexec": "^5.0.15", + "libnpmfund": "^4.0.15", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.3", + "libnpmpack": "^5.0.15", + "libnpmpublish": "^7.1.3", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.0.3", + "minimatch": "^7.4.3", + "minipass": "^4.2.5", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.3.1", + "nopt": "^7.1.0", + "npm-audit-report": "^4.0.0", + "npm-install-checks": "^6.1.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.3", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.1.1", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.0.0", + "read-package-json": "^6.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.8", + "ssri": "^10.0.2", + "tar": "^6.1.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.0", + "write-file-atomic": "^5.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.2.7", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "mimic-fn": "^2.1.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^7.4.2", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^1.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "arborist": "bin/index.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "6.1.5", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "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" + "@npmcli/map-workspaces": "^3.0.2", + "ini": "^3.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "callsites": "^3.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.0.4", "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.3", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^9.3.1", + "minimatch": "^7.4.2", + "read-package-json-fast": "^3.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=0.4.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "3.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "json-parse-even-better-errors": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "which": "^3.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "tslib": "^1.9.0" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", "dev": true, - "peer": true - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.1", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "minimatch": "^7.4.2" }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=6.5" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">=4" + "node": ">= 6.0.0" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.3.0", "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.0.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "peer": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { + "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^4.1.0" + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" }, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "balanced-match": "^1.0.0" } }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", "dev": true, - "peer": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/npm/node_modules/cacache": { + "version": "17.0.5", "dev": true, - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^9.3.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/npm/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", "dev": true, - "peer": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", "dev": true, - "peer": true, + "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { - "os-tmpdir": "~1.0.2" + "ip-regex": "^4.1.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=10" } }, - "node_modules/ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", "dev": true, - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" + "node": ">=6" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "tslib": "^1.8.1" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">= 10" } }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.1", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=4.2.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT" }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", "dev": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, + "inBundle": true, + "license": "ISC", "bin": { - "which": "bin/which" + "color-support": "bin.js" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", "dev": true, - "peer": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", "dev": true, - "peer": true, - "dependencies": { - "mkdirp": "^0.5.1" + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { "node": ">=4" } }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "supports-color": { "optional": true } } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8" } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", "dev": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT" }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", "dev": true, - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" } }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0" + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" } }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" + "node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "requires": { - "@ethersproject/logger": "^5.7.0" + "node_modules/npm/node_modules/glob": { + "version": "9.3.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0" + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" + "node_modules/npm/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" } }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", - "requires": { - "@ethersproject/logger": "^5.7.0" + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^7.4.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" } }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "requires": { - "@ethersproject/logger": "^5.7.0" + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" + "node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "node_modules/npm/node_modules/ip": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" } }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "node_modules/npm/node_modules/is-core-module": { + "version": "2.11.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" }, - "@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@thehubbleproject/bls": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@thehubbleproject/bls/-/bls-0.5.1.tgz", - "integrity": "sha512-g5zeMZ8js/yg6MjFoC+pt0eqfCL2jC46yLY1LbKNriyqftB1tE3jpG/FMMDIW3x9/yRg/AgUb8Nluqj15tQs+A==", - "requires": { - "ethers": "^5.5.3", - "mcl-wasm": "^1.0.0" - } + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" }, - "@types/node": { - "version": "13.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", - "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", - "dev": true + "node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "5.0.15", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^7.4.2", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "node_modules/npm/node_modules/libnpmexec": { + "version": "5.0.15", "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/run-script": "^6.0.0", + "chalk": "^4.1.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "node_modules/npm/node_modules/libnpmfund": { + "version": "4.0.15", "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.3", "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.3", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.15", "dev": true, - "peer": true, - "requires": {} + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "node_modules/npm/node_modules/libnpmpublish": { + "version": "7.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.0.0", + "ssri": "^10.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "6.0.2", "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.3", "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.21.3" + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "peer": true - } + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.0.3", "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/npm/node_modules/minimatch": { + "version": "7.4.3", "dev": true, - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/npm/node_modules/minipass": { + "version": "4.2.5", "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" } }, - "balanced-match": { + "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.1", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", "dev": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - } + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, - "requires": { - "ms": "2.1.2" + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT" }, - "delayed-stream": { + "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "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" - }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.3.1", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC" }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, + "inBundle": true, + "license": "ISC", "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "peer": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "peer": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "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": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", "dev": true, - "peer": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.1.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - } + "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" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.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.7.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": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "ethers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.0.tgz", - "integrity": "sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA==", - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.0", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.0", - "@ethersproject/wordlists": "5.7.0" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", "dev": true, - "peer": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", "dev": true, - "peer": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", "dev": true, - "peer": true, - "requires": { - "flat-cache": "^2.0.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", "dev": true, - "peer": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "flatted": { + "node_modules/npm/node_modules/node-gyp/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true, - "peer": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/npm/node_modules/nopt": { + "version": "7.1.0", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "4.0.0", "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.8.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "has-flag": { + "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "peer": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.1.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.0", "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/npm/node_modules/npm-packlist": { + "version": "7.0.4", "dev": true, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/npm/node_modules/npm-profile": { + "version": "7.0.1", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.3", "dev": true, - "peer": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, + "inBundle": true, + "license": "ISC", "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.0", "dev": true, - "peer": true + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/npm/node_modules/once": { + "version": "1.4.0", "dev": true, - "peer": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } }, - "js-tokens": { + "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/npm/node_modules/pacote": { + "version": "15.1.1", "dev": true, - "peer": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "json-stable-stringify-without-jsonify": { + "node_modules/npm/node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/npm/node_modules/path-scurry": { + "version": "1.6.3", "dev": true, - "peer": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.11", "dev": true, - "requires": { - "yallist": "^4.0.0" + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.0.6.tgz", - "integrity": "sha512-/KYSug255SQoOcrQBxkHeAub9qOcJD3B/n5livcsGKsbv4TOiefNmUAwpMP0Vea5AVBUApolr+iF0GqZixns1w==" + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "minimalistic-assert": { + "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "dev": true, + "inBundle": true, + "license": "ISC" }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } }, - "minimatch": { + "node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^9.3.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/readable-stream": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "inBundle": true, + "license": "ISC", + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/npm/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "peer": true + "inBundle": true, + "license": "MIT" }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC" }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "node_modules/npm/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "peer": true + "inBundle": true, + "license": "ISC" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "node_modules/npm/node_modules/sigstore": { + "version": "1.2.0", "dev": true, - "peer": true + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.13", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "peer": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "peer": true + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "peer": true + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "peer": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "peer": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "peer": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "peer": true + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "peer": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" + }, + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@thehubbleproject/bls": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@thehubbleproject/bls/-/bls-0.5.1.tgz", + "integrity": "sha512-g5zeMZ8js/yg6MjFoC+pt0eqfCL2jC46yLY1LbKNriyqftB1tE3jpG/FMMDIW3x9/yRg/AgUb8Nluqj15tQs+A==", + "requires": { + "ethers": "^5.5.3", + "mcl-wasm": "^1.0.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "13.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", + "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "peer": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "peer": true + } + } + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "peer": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "peer": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "peer": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true + } + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "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" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "peer": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "peer": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "peer": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "peer": true + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "peer": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "peer": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "peer": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true, + "peer": true + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "peer": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "peer": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "peer": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "peer": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "peer": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "peer": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.0.6.tgz", + "integrity": "sha512-/KYSug255SQoOcrQBxkHeAub9qOcJD3B/n5livcsGKsbv4TOiefNmUAwpMP0Vea5AVBUApolr+iF0GqZixns1w==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "peer": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "peer": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "peer": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "peer": true + }, + "npm": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.4.tgz", + "integrity": "sha512-8/Mct0X/w77PmgIpSlXfNIOlrZBfT+8966zLCxOhwi1qZ2Ueyy99uWPSDW6bt2OKw1NzrvHJBSgkzAvn1iWuhw==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.2.7", + "@npmcli/config": "^6.1.5", + "@npmcli/map-workspaces": "^3.0.3", + "@npmcli/package-json": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.0.5", + "chalk": "^4.1.2", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.1", + "glob": "^9.3.2", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^3.0.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.15", + "libnpmexec": "^5.0.15", + "libnpmfund": "^4.0.15", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.3", + "libnpmpack": "^5.0.15", + "libnpmpublish": "^7.1.3", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.0.3", + "minimatch": "^7.4.3", + "minipass": "^4.2.5", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.3.1", + "nopt": "^7.1.0", + "npm-audit-report": "^4.0.0", + "npm-install-checks": "^6.1.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.3", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.1.1", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.0.0", + "read-package-json": "^6.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.8", + "ssri": "^10.0.2", + "tar": "^6.1.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.0", + "write-file-atomic": "^5.0.0" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "@gar/promisify": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "@npmcli/arborist": { + "version": "6.2.7", + "bundled": true, + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^7.4.2", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/config": { + "version": "6.1.5", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/map-workspaces": "^3.0.2", + "ini": "^3.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^9.3.1", + "minimatch": "^7.4.2", + "read-package-json-fast": "^3.0.0" + } + }, + "@npmcli/metavuln-calculator": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/package-json": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/query": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "bundled": true, + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@tufjs/models": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^7.4.2" + } + }, + "abbrev": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "bin-links": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "buffer": { + "version": "6.0.3", + "bundled": true, + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.0.5", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^9.3.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "bundled": true, + "dev": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "cmd-shim": { + "version": "6.0.1", + "bundled": true, + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "defaults": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "depd": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "diff": { + "version": "5.1.0", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true, + "dev": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "events": { + "version": "3.3.0", + "bundled": true, + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "bundled": true, + "dev": true + }, + "fs-minipass": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^4.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "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" + } + }, + "glob": { + "version": "9.3.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "bundled": true, + "dev": true + }, + "has": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "bundled": true, + "dev": true + }, + "ignore-walk": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^7.4.2" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "init-package-json": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true, + "dev": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.11.0", + "bundled": true, + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "dev": true + }, + "just-diff": { + "version": "6.0.2", + "bundled": true, + "dev": true + }, + "just-diff-apply": { + "version": "5.5.0", + "bundled": true, + "dev": true + }, + "libnpmaccess": { + "version": "7.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.15", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^7.4.2", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + } + }, + "libnpmexec": { + "version": "5.0.15", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/run-script": "^6.0.0", + "chalk": "^4.1.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + } + }, + "libnpmfund": { + "version": "4.0.15", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.2.7" + } + }, + "libnpmhook": { + "version": "9.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.15", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^6.2.7", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.0.0", + "ssri": "^10.0.1" + } + }, + "libnpmsearch": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + } + }, + "lru-cache": { + "version": "7.18.3", + "bundled": true, + "dev": true + }, + "make-fetch-happen": { + "version": "11.0.3", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minimatch": { + "version": "7.4.3", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "4.2.5", + "bundled": true, + "dev": true + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^4.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "ms": { + "version": "2.1.3", + "bundled": true, + "dev": true + }, + "mute-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true, + "dev": true + }, + "node-gyp": { + "version": "9.3.1", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "cacache": { + "version": "16.1.3", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "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": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "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" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "make-fetch-happen": { + "version": "10.2.1", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.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.7.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": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ssri": { + "version": "9.0.1", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "which": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "7.1.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "npm-bundled": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "bundled": true, + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "bundled": true, + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.3", + "bundled": true, + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^4.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-user-validate": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "15.1.1", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "parse-conflict-json": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-scurry": { + "version": "1.6.3", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^7.14.1", + "minipass": "^4.0.2" + } + }, + "postcss-selector-parser": { + "version": "6.0.11", + "bundled": true, + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "process": { + "version": "0.11.10", + "bundled": true, + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-call-limit": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "read": "^2.0.0" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "read": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "mute-stream": "~1.0.0" + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "read-package-json": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "^9.3.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readable-stream": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "7.3.8", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true, + "dev": true + }, + "sigstore": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true, + "dev": true + }, + "socks": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "bundled": true, + "dev": true + }, + "ssri": { + "version": "10.0.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "6.1.13", + "bundled": true, + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "treeverse": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "tuf-js": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "@tufjs/models": "1.0.1", + "make-fetch-happen": "^11.0.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } }, "once": { "version": "1.4.0", diff --git a/package.json b/package.json index 8cc7426d..75927592 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "03-transfer-erc20": "./node_modules/.bin/ts-node ./examples/03-transfer-erc20", "04-batch-transfer": "./node_modules/.bin/ts-node ./examples/04-batch-transfer", "05-batch-erc20-transfer": "./node_modules/.bin/ts-node ./examples/05-batch-erc20-transfer", + "06-swap-tokens": "./node_modules/.bin/ts-node ./examples/06-swap-tokens", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", @@ -49,6 +50,7 @@ "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "^16.0.3", + "npm": "^9.6.4", "ts-node": "8.10.2", "typescript": "4.5.2" } diff --git a/src/base/BLSAccountAPI.ts b/src/base/BLSAccountAPI.ts index 257b7e40..3001b365 100644 --- a/src/base/BLSAccountAPI.ts +++ b/src/base/BLSAccountAPI.ts @@ -110,4 +110,9 @@ export class BLSAccountAPI extends BaseAccountAPI { } return this.signer; } + + async encodeBatch(targets: string[], datas: string[]): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData('executeBatch', [targets, datas]); + } } diff --git a/src/base/BaseAccountAPI.ts b/src/base/BaseAccountAPI.ts index c12e9852..a0707674 100644 --- a/src/base/BaseAccountAPI.ts +++ b/src/base/BaseAccountAPI.ts @@ -93,6 +93,8 @@ export abstract class BaseAccountAPI { */ abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise; + abstract encodeBatch(targets: string[], datas: string[]): Promise; + /** * sign a userOp's hash (userOpHash). * @param userOpHash @@ -127,7 +129,7 @@ export abstract class BaseAccountAPI { try { await this.entryPointView.callStatic.getSenderAddress(initCode); } catch (e: any) { - console.log(e); + // console.log(e); return e.errorArgs.sender; } throw new Error('must handle revert'); @@ -177,7 +179,20 @@ export abstract class BaseAccountAPI { } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); + let callData: string; + const data = detailsForUserOp.data; + let target = detailsForUserOp.target; + if (typeof data === 'string') { + if (typeof target !== 'string') { + throw new Error('must have target address if data is single value'); + } + callData = await this.encodeExecute(target, value, data); + } else { + if (typeof target === 'string') { + target = Array(data.length).fill(target); + } + callData = await this.encodeBatch(target, data); + } const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? diff --git a/src/base/EtherspotWalletAPI.ts b/src/base/EtherspotWalletAPI.ts index 2b397afd..e71deb74 100644 --- a/src/base/EtherspotWalletAPI.ts +++ b/src/base/EtherspotWalletAPI.ts @@ -8,7 +8,7 @@ import { import { arrayify, hexConcat } from 'ethers/lib/utils'; import { Signer } from '@ethersproject/abstract-signer'; import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI'; -import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; +import { PaymasterAPI } from './PaymasterAPI'; /** * constructor params, added no top of base params: @@ -110,4 +110,9 @@ export class EtherspotWalletAPI extends BaseAccountAPI { get epView() { return this.entryPointView; } + + async encodeBatch(targets: string[], datas: string[]): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData('executeBatch', [targets, datas]); + } } diff --git a/src/base/TransactionDetailsForUserOp.ts b/src/base/TransactionDetailsForUserOp.ts index 1e9beeac..34851eee 100644 --- a/src/base/TransactionDetailsForUserOp.ts +++ b/src/base/TransactionDetailsForUserOp.ts @@ -1,10 +1,15 @@ -import { BigNumberish } from 'ethers' +import { BigNumberish } from 'ethers'; +/** + * basic struct to create a UserOperation from + */ export interface TransactionDetailsForUserOp { - target: string - data: string - value?: BigNumberish - gasLimit?: BigNumberish - maxFeePerGas?: BigNumberish - maxPriorityFeePerGas?: BigNumberish + // target address, or multiple addresses for a batch + target: string | string[]; + // target data or multiple target datas for a batch + data: string | string[]; + value?: BigNumberish; + gasLimit?: BigNumberish; + maxFeePerGas?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; } diff --git a/src/base/VerifyingPaymasterAPI.ts b/src/base/VerifyingPaymasterAPI.ts index 0da7e659..7c84e071 100644 --- a/src/base/VerifyingPaymasterAPI.ts +++ b/src/base/VerifyingPaymasterAPI.ts @@ -15,7 +15,7 @@ interface paymasterResponse { result: BytesLike; } -class VerifyingPaymasterAPI extends PaymasterAPI { +export class VerifyingPaymasterAPI extends PaymasterAPI { private paymasterUrl: string; private entryPoint: string; constructor(paymasterUrl: string, entryPoint: string) { diff --git a/src/base/index.ts b/src/base/index.ts index d669b7f6..84bf3df6 100644 --- a/src/base/index.ts +++ b/src/base/index.ts @@ -7,4 +7,5 @@ export { ClientConfig } from './ClientConfig'; export { HttpRpcClient } from './HttpRpcClient'; export { DeterministicDeployer } from './DeterministicDeployer'; export { BLSAccountAPI } from './BLSAccountAPI'; +export { VerifyingPaymasterAPI } from './VerifyingPaymasterAPI'; export * from './calcPreVerificationGas'; diff --git a/src/contracts/src/wallet/EtherspotWallet.ts b/src/contracts/src/wallet/EtherspotWallet.ts index 4b8bc342..44c4ba51 100644 --- a/src/contracts/src/wallet/EtherspotWallet.ts +++ b/src/contracts/src/wallet/EtherspotWallet.ts @@ -14,19 +14,9 @@ import type { Signer, utils, } from 'ethers'; -import type { - FunctionFragment, - Result, - EventFragment, -} from '@ethersproject/abi'; +import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi'; import type { Listener, Provider } from '@ethersproject/providers'; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from '../../common'; +import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from '../../common'; export type UserOperationStruct = { sender: PromiseOrValue; @@ -53,7 +43,7 @@ export type UserOperationStructOutput = [ BigNumber, BigNumber, string, - string + string, ] & { sender: string; nonce: BigNumber; @@ -127,77 +117,36 @@ export interface EtherspotWalletInterface extends utils.Interface { | 'upgradeTo' | 'upgradeToAndCall' | 'validateUserOp' - | 'withdrawDepositTo' + | 'withdrawDepositTo', ): FunctionFragment; - encodeFunctionData( - functionFragment: 'addDeposit', - values?: undefined - ): string; - encodeFunctionData( - functionFragment: 'addGuardian', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'addOwner', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'entryPoint', - values?: undefined - ): string; + encodeFunctionData(functionFragment: 'addDeposit', values?: undefined): string; + encodeFunctionData(functionFragment: 'addGuardian', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'addOwner', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'entryPoint', values?: undefined): string; encodeFunctionData( functionFragment: 'execute', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData( functionFragment: 'executeBatch', - values: [PromiseOrValue[], PromiseOrValue[]] - ): string; - encodeFunctionData( - functionFragment: 'getDeposit', - values?: undefined - ): string; - encodeFunctionData( - functionFragment: 'initialize', - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'isGuardian', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'isOwner', - values: [PromiseOrValue] + values: [PromiseOrValue[], PromiseOrValue[]], ): string; + encodeFunctionData(functionFragment: 'getDeposit', values?: undefined): string; + encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'isGuardian', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'isOwner', values: [PromiseOrValue]): string; encodeFunctionData( functionFragment: 'isValidSig', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData( functionFragment: 'isValidSigImpl', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData( functionFragment: 'isValidSigWithSideEffects', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( @@ -207,8 +156,8 @@ export interface EtherspotWalletInterface extends utils.Interface { PromiseOrValue, PromiseOrValue[], PromiseOrValue[], - PromiseOrValue - ] + PromiseOrValue, + ], ): string; encodeFunctionData( functionFragment: 'onERC1155Received', @@ -217,34 +166,17 @@ export interface EtherspotWalletInterface extends utils.Interface { PromiseOrValue, PromiseOrValue, PromiseOrValue, - PromiseOrValue - ] + PromiseOrValue, + ], ): string; encodeFunctionData( functionFragment: 'onERC721Received', - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: 'proxiableUUID', - values?: undefined - ): string; - encodeFunctionData( - functionFragment: 'removeGuardian', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'removeOwner', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'supportsInterface', - values: [PromiseOrValue] + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue], ): string; + encodeFunctionData(functionFragment: 'proxiableUUID', values?: undefined): string; + encodeFunctionData(functionFragment: 'removeGuardian', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'removeOwner', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'supportsInterface', values: [PromiseOrValue]): string; encodeFunctionData( functionFragment: 'tokensReceived', values: [ @@ -253,109 +185,51 @@ export interface EtherspotWalletInterface extends utils.Interface { PromiseOrValue, PromiseOrValue, PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: 'updateEntryPoint', - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: 'upgradeTo', - values: [PromiseOrValue] + PromiseOrValue, + ], ): string; + encodeFunctionData(functionFragment: 'updateEntryPoint', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'upgradeTo', values: [PromiseOrValue]): string; encodeFunctionData( functionFragment: 'upgradeToAndCall', - values: [PromiseOrValue, PromiseOrValue] + values: [PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData( functionFragment: 'validateUserOp', - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] + values: [UserOperationStruct, PromiseOrValue, PromiseOrValue], ): string; encodeFunctionData( functionFragment: 'withdrawDepositTo', - values: [PromiseOrValue, PromiseOrValue] + values: [PromiseOrValue, PromiseOrValue], ): string; decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; - decodeFunctionResult( - functionFragment: 'addGuardian', - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: 'addGuardian', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; - decodeFunctionResult( - functionFragment: 'executeBatch', - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: 'executeBatch', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; - decodeFunctionResult( - functionFragment: 'isValidSigImpl', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'isValidSigWithSideEffects', - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: 'isValidSigImpl', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'isValidSigWithSideEffects', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; - decodeFunctionResult( - functionFragment: 'onERC1155BatchReceived', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'onERC1155Received', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'onERC721Received', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'proxiableUUID', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'removeGuardian', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'removeOwner', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'supportsInterface', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'tokensReceived', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'updateEntryPoint', - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: 'onERC1155BatchReceived', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'onERC1155Received', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'onERC721Received', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'proxiableUUID', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'removeGuardian', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'removeOwner', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'supportsInterface', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'tokensReceived', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'updateEntryPoint', data: BytesLike): Result; decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; - decodeFunctionResult( - functionFragment: 'upgradeToAndCall', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'validateUserOp', - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: 'withdrawDepositTo', - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: 'upgradeToAndCall', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'validateUserOp', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdrawDepositTo', data: BytesLike): Result; events: { 'AdminChanged(address,address)': EventFragment; @@ -388,20 +262,14 @@ export interface AdminChangedEventObject { previousAdmin: string; newAdmin: string; } -export type AdminChangedEvent = TypedEvent< - [string, string], - AdminChangedEventObject ->; +export type AdminChangedEvent = TypedEvent<[string, string], AdminChangedEventObject>; export type AdminChangedEventFilter = TypedEventFilter; export interface BeaconUpgradedEventObject { beacon: string; } -export type BeaconUpgradedEvent = TypedEvent< - [string], - BeaconUpgradedEventObject ->; +export type BeaconUpgradedEvent = TypedEvent<[string], BeaconUpgradedEventObject>; export type BeaconUpgradedEventFilter = TypedEventFilter; @@ -409,37 +277,25 @@ export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; } -export type EntryPointChangedEvent = TypedEvent< - [string, string], - EntryPointChangedEventObject ->; +export type EntryPointChangedEvent = TypedEvent<[string, string], EntryPointChangedEventObject>; -export type EntryPointChangedEventFilter = - TypedEventFilter; +export type EntryPointChangedEventFilter = TypedEventFilter; export interface EtherspotWalletInitializedEventObject { entryPoint: string; owner: string; } -export type EtherspotWalletInitializedEvent = TypedEvent< - [string, string], - EtherspotWalletInitializedEventObject ->; +export type EtherspotWalletInitializedEvent = TypedEvent<[string, string], EtherspotWalletInitializedEventObject>; -export type EtherspotWalletInitializedEventFilter = - TypedEventFilter; +export type EtherspotWalletInitializedEventFilter = TypedEventFilter; export interface EtherspotWalletReceivedEventObject { from: string; amount: BigNumber; } -export type EtherspotWalletReceivedEvent = TypedEvent< - [string, BigNumber], - EtherspotWalletReceivedEventObject ->; +export type EtherspotWalletReceivedEvent = TypedEvent<[string, BigNumber], EtherspotWalletReceivedEventObject>; -export type EtherspotWalletReceivedEventFilter = - TypedEventFilter; +export type EtherspotWalletReceivedEventFilter = TypedEventFilter; export interface GuardianAddedEventObject { newGuardian: string; @@ -451,10 +307,7 @@ export type GuardianAddedEventFilter = TypedEventFilter; export interface GuardianRemovedEventObject { removedGuardian: string; } -export type GuardianRemovedEvent = TypedEvent< - [string], - GuardianRemovedEventObject ->; +export type GuardianRemovedEvent = TypedEvent<[string], GuardianRemovedEventObject>; export type GuardianRemovedEventFilter = TypedEventFilter; @@ -496,16 +349,12 @@ export interface EtherspotWallet extends BaseContract { queryFilter( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined + toBlock?: string | number | undefined, ): Promise>; - listeners( - eventFilter?: TypedEventFilter - ): Array>; + listeners(eventFilter?: TypedEventFilter): Array>; listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; + removeAllListeners(eventFilter: TypedEventFilter): this; removeAllListeners(eventName?: string): this; off: OnEvent; on: OnEvent; @@ -513,18 +362,16 @@ export interface EtherspotWallet extends BaseContract { removeListener: OnEvent; functions: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; + addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -533,13 +380,13 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; executeBatch( dest: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; @@ -547,24 +394,18 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - isGuardian( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; + isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; - isOwner( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; + isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigImpl( @@ -572,14 +413,14 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; nonce(overrides?: CallOverrides): Promise<[BigNumber]>; @@ -590,7 +431,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise<[string]>; onERC1155Received( @@ -599,7 +440,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise<[string]>; onERC721Received( @@ -607,25 +448,22 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise<[string]>; proxiableUUID(overrides?: CallOverrides): Promise<[string]>; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - supportsInterface( - interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; + supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, @@ -634,51 +472,49 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } + overrides?: PayableOverrides & { from?: PromiseOrValue }, ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; }; - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; + addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -687,13 +523,13 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; executeBatch( dest: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; getDeposit(overrides?: CallOverrides): Promise; @@ -701,24 +537,18 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - isGuardian( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; - isOwner( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigImpl( @@ -726,14 +556,14 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -744,7 +574,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC1155Received( @@ -753,7 +583,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC721Received( @@ -761,25 +591,22 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - supportsInterface( - interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; tokensReceived( arg0: PromiseOrValue, @@ -788,50 +615,44 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } + overrides?: PayableOverrides & { from?: PromiseOrValue }, ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; callStatic: { addDeposit(overrides?: CallOverrides): Promise; - addGuardian( - _newGuardian: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addGuardian(_newGuardian: PromiseOrValue, overrides?: CallOverrides): Promise; - addOwner( - _newOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + addOwner(_newOwner: PromiseOrValue, overrides?: CallOverrides): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -839,13 +660,13 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; executeBatch( dest: PromiseOrValue[], func: PromiseOrValue[], - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; getDeposit(overrides?: CallOverrides): Promise; @@ -853,24 +674,18 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; - isGuardian( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; - isOwner( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; isValidSigImpl( @@ -878,14 +693,14 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -896,7 +711,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC1155Received( @@ -905,7 +720,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC721Received( @@ -913,25 +728,16 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; - removeGuardian( - _guardian: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + removeGuardian(_guardian: PromiseOrValue, overrides?: CallOverrides): Promise; - removeOwner( - _owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + removeOwner(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; - supportsInterface( - interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; tokensReceived( arg0: PromiseOrValue, @@ -940,89 +746,65 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; - updateEntryPoint( - _newEntryPoint: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + updateEntryPoint(_newEntryPoint: PromiseOrValue, overrides?: CallOverrides): Promise; - upgradeTo( - newImplementation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + upgradeTo(newImplementation: PromiseOrValue, overrides?: CallOverrides): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; }; filters: { - 'AdminChanged(address,address)'( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - AdminChanged( - previousAdmin?: null, - newAdmin?: null - ): AdminChangedEventFilter; - - 'BeaconUpgraded(address)'( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - BeaconUpgraded( - beacon?: PromiseOrValue | null - ): BeaconUpgradedEventFilter; - - 'EntryPointChanged(address,address)'( - oldEntryPoint?: null, - newEntryPoint?: null - ): EntryPointChangedEventFilter; - EntryPointChanged( - oldEntryPoint?: null, - newEntryPoint?: null - ): EntryPointChangedEventFilter; + 'AdminChanged(address,address)'(previousAdmin?: null, newAdmin?: null): AdminChangedEventFilter; + AdminChanged(previousAdmin?: null, newAdmin?: null): AdminChangedEventFilter; + + 'BeaconUpgraded(address)'(beacon?: PromiseOrValue | null): BeaconUpgradedEventFilter; + BeaconUpgraded(beacon?: PromiseOrValue | null): BeaconUpgradedEventFilter; + + 'EntryPointChanged(address,address)'(oldEntryPoint?: null, newEntryPoint?: null): EntryPointChangedEventFilter; + EntryPointChanged(oldEntryPoint?: null, newEntryPoint?: null): EntryPointChangedEventFilter; 'EtherspotWalletInitialized(address,address)'( entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null + owner?: PromiseOrValue | null, ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null + owner?: PromiseOrValue | null, ): EtherspotWalletInitializedEventFilter; 'EtherspotWalletReceived(address,uint256)'( from?: PromiseOrValue | null, - amount?: PromiseOrValue | null + amount?: PromiseOrValue | null, ): EtherspotWalletReceivedEventFilter; EtherspotWalletReceived( from?: PromiseOrValue | null, - amount?: PromiseOrValue | null + amount?: PromiseOrValue | null, ): EtherspotWalletReceivedEventFilter; 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; - 'GuardianRemoved(address)'( - removedGuardian?: null - ): GuardianRemovedEventFilter; + 'GuardianRemoved(address)'(removedGuardian?: null): GuardianRemovedEventFilter; GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; 'Initialized(uint8)'(version?: null): InitializedEventFilter; @@ -1034,27 +816,21 @@ export interface EtherspotWallet extends BaseContract { 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; - 'Upgraded(address)'( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; - Upgraded( - implementation?: PromiseOrValue | null - ): UpgradedEventFilter; + 'Upgraded(address)'(implementation?: PromiseOrValue | null): UpgradedEventFilter; + Upgraded(implementation?: PromiseOrValue | null): UpgradedEventFilter; }; estimateGas: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; + addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -1063,13 +839,13 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; executeBatch( dest: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; getDeposit(overrides?: CallOverrides): Promise; @@ -1077,24 +853,18 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - isGuardian( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; - isOwner( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigImpl( @@ -1102,14 +872,14 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -1120,7 +890,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC1155Received( @@ -1129,7 +899,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC721Received( @@ -1137,25 +907,22 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - supportsInterface( - interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; tokensReceived( arg0: PromiseOrValue, @@ -1164,52 +931,50 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } + overrides?: PayableOverrides & { from?: PromiseOrValue }, ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; }; populateTransaction: { - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; + addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -1218,13 +983,13 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; executeBatch( dest: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; getDeposit(overrides?: CallOverrides): Promise; @@ -1232,24 +997,18 @@ export interface EtherspotWallet extends BaseContract { initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - isGuardian( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; - isOwner( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigImpl( @@ -1257,14 +1016,14 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; nonce(overrides?: CallOverrides): Promise; @@ -1275,7 +1034,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC1155Received( @@ -1284,7 +1043,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; onERC721Received( @@ -1292,25 +1051,22 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; - supportsInterface( - interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; tokensReceived( arg0: PromiseOrValue, @@ -1319,36 +1075,36 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides + overrides?: CallOverrides, ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } + overrides?: PayableOverrides & { from?: PromiseOrValue }, ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + overrides?: Overrides & { from?: PromiseOrValue }, ): Promise; }; } diff --git a/src/helpers/ERC20_ABI.ts b/src/helpers/abi/ERC20_ABI.ts similarity index 72% rename from src/helpers/ERC20_ABI.ts rename to src/helpers/abi/ERC20_ABI.ts index 337ddd7b..ed363cdd 100644 --- a/src/helpers/ERC20_ABI.ts +++ b/src/helpers/abi/ERC20_ABI.ts @@ -3,5 +3,7 @@ export const ERC20_ABI = [ 'function decimals() view returns (uint8)', 'function symbol() view returns (string)', 'function transfer(address to, uint amount) returns (bool)', + 'function approve(address spender, uint256 amount) returns (bool)', + 'function mint(address to, uint256 amount) public', 'event Transfer(address indexed from, address indexed to, uint amount)', ]; diff --git a/src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts b/src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts new file mode 100644 index 00000000..19dfef36 --- /dev/null +++ b/src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts @@ -0,0 +1,232 @@ +export const SWAP_ROUTER_ABI = [ + { + inputs: [ + { internalType: 'address', name: '_factory', type: 'address' }, + { internalType: 'address', name: '_WETH9', type: 'address' }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + inputs: [], + name: 'WETH9', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { + components: [ + { internalType: 'bytes', name: 'path', type: 'bytes' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint256', name: 'amountIn', type: 'uint256' }, + { internalType: 'uint256', name: 'amountOutMinimum', type: 'uint256' }, + ], + internalType: 'struct ISwapRouter.ExactInputParams', + name: 'params', + type: 'tuple', + }, + ], + name: 'exactInput', + outputs: [{ internalType: 'uint256', name: 'amountOut', type: 'uint256' }], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + components: [ + { internalType: 'address', name: 'tokenIn', type: 'address' }, + { internalType: 'address', name: 'tokenOut', type: 'address' }, + { internalType: 'uint24', name: 'fee', type: 'uint24' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint256', name: 'amountIn', type: 'uint256' }, + { internalType: 'uint256', name: 'amountOutMinimum', type: 'uint256' }, + { internalType: 'uint160', name: 'sqrtPriceLimitX96', type: 'uint160' }, + ], + internalType: 'struct ISwapRouter.ExactInputSingleParams', + name: 'params', + type: 'tuple', + }, + ], + name: 'exactInputSingle', + outputs: [{ internalType: 'uint256', name: 'amountOut', type: 'uint256' }], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + components: [ + { internalType: 'bytes', name: 'path', type: 'bytes' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint256', name: 'amountOut', type: 'uint256' }, + { internalType: 'uint256', name: 'amountInMaximum', type: 'uint256' }, + ], + internalType: 'struct ISwapRouter.ExactOutputParams', + name: 'params', + type: 'tuple', + }, + ], + name: 'exactOutput', + outputs: [{ internalType: 'uint256', name: 'amountIn', type: 'uint256' }], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { + components: [ + { internalType: 'address', name: 'tokenIn', type: 'address' }, + { internalType: 'address', name: 'tokenOut', type: 'address' }, + { internalType: 'uint24', name: 'fee', type: 'uint24' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint256', name: 'amountOut', type: 'uint256' }, + { internalType: 'uint256', name: 'amountInMaximum', type: 'uint256' }, + { internalType: 'uint160', name: 'sqrtPriceLimitX96', type: 'uint160' }, + ], + internalType: 'struct ISwapRouter.ExactOutputSingleParams', + name: 'params', + type: 'tuple', + }, + ], + name: 'exactOutputSingle', + outputs: [{ internalType: 'uint256', name: 'amountIn', type: 'uint256' }], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [], + name: 'factory', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes[]', name: 'data', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ internalType: 'bytes[]', name: 'results', type: 'bytes[]' }], + stateMutability: 'payable', + type: 'function', + }, + { inputs: [], name: 'refundETH', outputs: [], stateMutability: 'payable', type: 'function' }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'value', type: 'uint256' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint8', name: 'v', type: 'uint8' }, + { internalType: 'bytes32', name: 'r', type: 'bytes32' }, + { internalType: 'bytes32', name: 's', type: 'bytes32' }, + ], + name: 'selfPermit', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'nonce', type: 'uint256' }, + { internalType: 'uint256', name: 'expiry', type: 'uint256' }, + { internalType: 'uint8', name: 'v', type: 'uint8' }, + { internalType: 'bytes32', name: 'r', type: 'bytes32' }, + { internalType: 'bytes32', name: 's', type: 'bytes32' }, + ], + name: 'selfPermitAllowed', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'nonce', type: 'uint256' }, + { internalType: 'uint256', name: 'expiry', type: 'uint256' }, + { internalType: 'uint8', name: 'v', type: 'uint8' }, + { internalType: 'bytes32', name: 'r', type: 'bytes32' }, + { internalType: 'bytes32', name: 's', type: 'bytes32' }, + ], + name: 'selfPermitAllowedIfNecessary', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'value', type: 'uint256' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint8', name: 'v', type: 'uint8' }, + { internalType: 'bytes32', name: 'r', type: 'bytes32' }, + { internalType: 'bytes32', name: 's', type: 'bytes32' }, + ], + name: 'selfPermitIfNecessary', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'amountMinimum', type: 'uint256' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + ], + name: 'sweepToken', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'uint256', name: 'amountMinimum', type: 'uint256' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'feeBips', type: 'uint256' }, + { internalType: 'address', name: 'feeRecipient', type: 'address' }, + ], + name: 'sweepTokenWithFee', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'int256', name: 'amount0Delta', type: 'int256' }, + { internalType: 'int256', name: 'amount1Delta', type: 'int256' }, + { internalType: 'bytes', name: '_data', type: 'bytes' }, + ], + name: 'uniswapV3SwapCallback', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'uint256', name: 'amountMinimum', type: 'uint256' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + ], + name: 'unwrapWETH9', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'uint256', name: 'amountMinimum', type: 'uint256' }, + { internalType: 'address', name: 'recipient', type: 'address' }, + { internalType: 'uint256', name: 'feeBips', type: 'uint256' }, + { internalType: 'address', name: 'feeRecipient', type: 'address' }, + ], + name: 'unwrapWETH9WithFee', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { stateMutability: 'payable', type: 'receive' }, +]; diff --git a/src/sdk.ts b/src/sdk.ts index ccc66ef8..cdcf4a6b 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,20 +1,34 @@ -import { BigNumberish, Wallet, providers } from 'ethers'; -import { EtherspotWalletAPI, HttpRpcClient } from './base'; +import { BigNumberish, Wallet, ethers, providers } from 'ethers'; +import { EtherspotWalletAPI, HttpRpcClient, VerifyingPaymasterAPI } from './base'; import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { getGasFee } from './common'; +import { ERC20_ABI } from './helpers/abi/ERC20_ABI'; export class LiteSdk { private EtherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; + wallet: Wallet; + rpcProvider: ethers.providers.JsonRpcProvider; - constructor(private wallet: Wallet, bundlerRpc: string, chainId: number, entryPoint: string, accountFactory: string) { + constructor( + private privateKey: string, + provider: string, + bundlerRpc: string, + chainId: number, + entryPoint: string, + accountFactory: string, + paymasterAPI: VerifyingPaymasterAPI | undefined, + ) { + this.rpcProvider = new ethers.providers.JsonRpcProvider(provider); + this.wallet = new Wallet(privateKey, this.rpcProvider); this.EtherspotWallet = new EtherspotWalletAPI({ - provider: wallet.provider, - owner: wallet, + provider: this.wallet.provider, + owner: this.wallet, index: 0, entryPointAddress: entryPoint, factoryAddress: accountFactory, + paymasterAPI: paymasterAPI, }); this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); } @@ -23,7 +37,7 @@ export class LiteSdk { return this.EtherspotWallet.getCounterFactualAddress(); } - async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { + async getUserOpReceipt(userOpHash: string, timeout = 60000, interval = 5000): Promise { const block = await this.wallet.provider.getBlock('latest'); const endtime = Date.now() + timeout; while (Date.now() < endtime) { @@ -40,7 +54,6 @@ export class LiteSdk { } async sign(tx: TransactionDetailsForUserOp) { - console.log('sdk.ts:: sign(): tx:', tx); const gas = await this.getGasFee(); return this.EtherspotWallet.createSignedUserOp({ @@ -72,6 +85,153 @@ export class LiteSdk { } async encodeExecute(target: string, value: BigNumberish, data: string): Promise { - return this.EtherspotWallet.encodeExecute(target, value, data); + const formatTarget = ethers.utils.getAddress(target); + return await this.EtherspotWallet.encodeExecute(formatTarget, value, data); + } + + async encodeBatch(targets: string[], datas: string[]): Promise { + return this.EtherspotWallet.encodeBatch(targets, datas); + } + + async prefundIfRequired(amount: string, tokenAddress?: string): Promise { + try { + const ewalletAddress = await this.getCounterFactualAddress(); + + if (tokenAddress) { + const token = ethers.utils.getAddress(tokenAddress); + const erc20 = new ethers.Contract(token, ERC20_ABI, this.wallet); + const dec = await erc20.decimals(); + const balance = await erc20.balanceOf(ewalletAddress); + + if (balance.lt(ethers.utils.parseEther(amount))) { + const tx = await erc20.transfer(ewalletAddress, ethers.utils.parseUnits(amount, dec)); + await tx.wait(); + return `Transfer successful. Account funded with ${amount} ${await erc20.symbol()}`; + } else { + return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther( + balance, + )} ${await erc20.symbol()}`; + } + } else { + const balance = await this.rpcProvider.getBalance(ewalletAddress); + // Check if wallet balance is less than the amount to transfer + if (balance.lt(ethers.utils.parseEther(amount))) { + // Transfer funds to the wallet + const tx = await this.wallet.sendTransaction({ + to: ewalletAddress, // EtherspotWallet address + data: '0x', // no data + value: ethers.utils.parseEther(amount), // 0.1 MATIC + gasLimit: ethers.utils.hexlify(50000), + }); + await tx.wait(); + return `Transfer successful. Account funded with ${amount}`; + } else { + return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther(balance)}`; + } + } + } catch (e) { + console.log(e); + return `Transfer failed: ${e.message}`; + } + } + + async getERC20Instance(tokenAddress: string) { + const token = ethers.utils.getAddress(tokenAddress); + return new ethers.Contract(token, ERC20_ABI, this.wallet); + } + + async erc20Balance(address: string, tokenAddress: string): Promise { + const erc20 = await this.getERC20Instance(tokenAddress); + return await erc20.balanceOf(address); + } + + async erc20Approve(spender: string, amount: string, tokenAddress: string): Promise { + const ewalletAddress = await this.getCounterFactualAddress(); + try { + const erc20 = await this.getERC20Instance(tokenAddress); + const value = await this.formatAmount(amount, await erc20.decimals()); + const success = await erc20.approve(spender, value, { from: ewalletAddress }); + return success; + } catch (error) { + console.error(error); + return false; + } + } + + formatAmount(amount: string, decimals = 18): BigNumberish { + return ethers.utils.parseUnits(amount, decimals); + } + + parseAmount(amount: string, decimals = 18): string { + return ethers.utils.formatUnits(amount, decimals); + } + + async generateBatchExecutesData( + target: string, + recipients: string[], + values: string[], + ): Promise<{ dest: string[]; data: string[] }> { + const ac = await this.getAccountContract(); + const dest = Array.from({ length: recipients.length }, () => target); + const data = await Promise.all( + recipients.map(async (recipient, i) => + ac.interface.encodeFunctionData('execute', [recipient, this.formatAmount(values[i]), '0x']), + ), + ); + + return { dest, data }; + } + + async generateERC20BatchTransfersData( + target: string, + recipients: string[], + values: string[], + ): Promise<{ dest: string[]; data: string[] }> { + const erc20 = await this.getERC20Instance(target); + const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); + + const transferDataPromises = recipients.map((recipient, i) => { + const transferData = erc20.interface.encodeFunctionData('transfer', [ + recipient, + this.formatAmount(values[i], dec), + ]); + return Promise.resolve(transferData); + }); + + const transferData = await Promise.all(transferDataPromises); + + return { + dest: Array.from({ length: recipients.length }, () => erc20.address), + data: transferData, + }; + } + + async connectToContract(address: string, abi: any) { + const addr = ethers.utils.getAddress(address); + return new ethers.Contract(addr, abi, this.wallet); + } + + async generateUniSingleSwapParams(tokenIn: string, tokenOut: string, value: string) { + const wallet = await this.getCounterFactualAddress(); + const amount = ethers.utils.parseEther(value); + const blockNum = await this.rpcProvider.getBlockNumber(); + const timestamp = (await this.rpcProvider.getBlock(blockNum)).timestamp; + const params = { + tokenIn: tokenIn, + tokenOut: tokenOut, + fee: 500, + recipient: wallet, + deadline: timestamp + 1000, + amountIn: amount, + amountOutMinimum: 0, + sqrtPriceLimitX96: 0, + }; + return params; + } + + async mintTokenToOwner(tokenAddress: string, amount: string) { + const erc20 = await this.getERC20Instance(tokenAddress); + const formatAmount = this.formatAmount(amount, await erc20.decimals()); + await erc20.mint(this.wallet.address, formatAmount); } } diff --git a/tsconfig.json b/tsconfig.json index a3b55cae..64a6eb24 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,8 @@ "lib": [ "DOM", "ES5" - ] + ], + "resolveJsonModule": true, }, "include": [ "./examples/**/*.ts", From 5ee5ce7a541275dde3c55b0593f15b218b81be1b Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Mon, 24 Apr 2023 10:01:46 +0100 Subject: [PATCH 07/20] Added DEPLOYMENT_COSTS.md --- DEPLOYMENT_COSTS.md | 33 +++++++++++++++++++++++++++++++++ src/sdk.ts | 1 + 2 files changed, 34 insertions(+) create mode 100644 DEPLOYMENT_COSTS.md diff --git a/DEPLOYMENT_COSTS.md b/DEPLOYMENT_COSTS.md new file mode 100644 index 00000000..ef24fac5 --- /dev/null +++ b/DEPLOYMENT_COSTS.md @@ -0,0 +1,33 @@ +# Deployment Costs + +## Average Gas Costs (per transaction) + +| Transaction | Gas Cost (Avg) | +|--------------|----------------| +| Wallet deployment | 382824 gwei | +| Native token transfer | 102344 gwei | +| ERC20 token transfer | 127683 gwei | +| Token swap (Uniswap v3) | 308041 gwei (swap + approval: 185648 + 122393) | + +## Costs By Chain (per transaction) + +| Ethereum | Standard (53 gwei) | Fast (57 gwei) | +|----------|--------------------|----------------| +| Wallet deployment | $37.62 | $40.45 | +| Native token transfer | $10.07 | $10.83 | +| ERC20 token transfer | $12.61 | $13.55 | +| Token swap (Uniswap v3) | $30.27 | $32.67 | + +| Polygon | Low (425.6 gwei) | High (426.6 gwei) | +|----------|--------------------|----------------| +| Wallet deployment | $0.17 | $0.17 | +| Native token transfer | $0.05 | $0.05 | +| ERC20 token transfer | $0.06 | $0.06 | +| Token swap (Uniswap v3) | $0.14 | $0.14 | + +| Binance Smart Chain | Low (3 gwei) | High (3 gwei) | +|----------|--------------------|----------------| +| Wallet deployment | $0.38 | $0.38 | +| Native token transfer | $0.11 | $0.11 | +| ERC20 token transfer | $0.13 | $0.13 | +| Token swap (Uniswap v3) | $0.31 | $0.31 | \ No newline at end of file diff --git a/src/sdk.ts b/src/sdk.ts index cdcf4a6b..8aefaa32 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -46,6 +46,7 @@ export class LiteSdk { Math.max(100, block.number - 100), ); if (events.length > 0) { + console.log(events[0].args.actualGasUsed.toString()); return events[0].transactionHash; } await new Promise((resolve) => setTimeout(resolve, interval)); From b0190b4b24e2d98e4d6d0da40d15c5497cd9c661 Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Wed, 26 Apr 2023 11:59:54 +0100 Subject: [PATCH 08/20] Removed public key env var as unneeded. Removed oz typings from gitignore. --- .gitignore | 4 - example.env | 1 - .../@openzeppelin/contracts/access/Ownable.ts | 176 +++++++ .../@openzeppelin/contracts/access/index.ts | 4 + .../@openzeppelin/contracts/index.ts | 13 + .../draft-IERC1822.sol/IERC1822Proxiable.ts | 88 ++++ .../interfaces/draft-IERC1822.sol/index.ts | 4 + .../contracts/interfaces/index.ts | 5 + .../contracts/proxy/ERC1967/ERC1967Proxy.ts | 115 +++++ .../contracts/proxy/ERC1967/ERC1967Upgrade.ts | 115 +++++ .../contracts/proxy/ERC1967/index.ts | 5 + .../@openzeppelin/contracts/proxy/Proxy.ts | 56 +++ .../contracts/proxy/beacon/IBeacon.ts | 88 ++++ .../contracts/proxy/beacon/index.ts | 4 + .../@openzeppelin/contracts/proxy/index.ts | 10 + .../contracts/proxy/utils/Initializable.ts | 70 +++ .../contracts/proxy/utils/UUPSUpgradeable.ts | 226 +++++++++ .../contracts/proxy/utils/index.ts | 5 + .../token/ERC1155/IERC1155Receiver.ts | 231 +++++++++ .../contracts/token/ERC1155/index.ts | 4 + .../contracts/token/ERC20/ERC20.ts | 464 ++++++++++++++++++ .../contracts/token/ERC20/IERC20.ts | 342 +++++++++++++ .../token/ERC20/extensions/IERC20Metadata.ts | 384 +++++++++++++++ .../draft-IERC20Permit.sol/IERC20Permit.ts | 193 ++++++++ .../draft-IERC20Permit.sol/index.ts | 4 + .../contracts/token/ERC20/extensions/index.ts | 6 + .../contracts/token/ERC20/index.ts | 7 + .../contracts/token/ERC721/IERC721Receiver.ts | 126 +++++ .../contracts/token/ERC721/index.ts | 4 + .../token/ERC777/IERC777Recipient.ts | 138 ++++++ .../contracts/token/ERC777/index.ts | 4 + .../@openzeppelin/contracts/token/index.ts | 11 + .../@openzeppelin/contracts/utils/index.ts | 5 + .../contracts/utils/introspection/IERC165.ts | 103 ++++ .../contracts/utils/introspection/index.ts | 4 + src/contracts/@openzeppelin/index.ts | 5 + .../contracts/access/Ownable__factory.ts | 78 +++ .../@openzeppelin/contracts/access/index.ts | 4 + .../@openzeppelin/contracts/index.ts | 8 + .../IERC1822Proxiable__factory.ts | 39 ++ .../interfaces/draft-IERC1822.sol/index.ts | 4 + .../contracts/interfaces/index.ts | 4 + .../proxy/ERC1967/ERC1967Proxy__factory.ts | 147 ++++++ .../proxy/ERC1967/ERC1967Upgrade__factory.ts | 71 +++ .../contracts/proxy/ERC1967/index.ts | 5 + .../contracts/proxy/Proxy__factory.ts | 31 ++ .../proxy/beacon/IBeacon__factory.ts | 39 ++ .../contracts/proxy/beacon/index.ts | 4 + .../@openzeppelin/contracts/proxy/index.ts | 7 + .../proxy/utils/Initializable__factory.ts | 39 ++ .../proxy/utils/UUPSUpgradeable__factory.ts | 115 +++++ .../contracts/proxy/utils/index.ts | 5 + .../ERC1155/IERC1155Receiver__factory.ts | 123 +++++ .../contracts/token/ERC1155/index.ts | 4 + .../contracts/token/ERC20/ERC20__factory.ts | 350 +++++++++++++ .../contracts/token/ERC20/IERC20__factory.ts | 206 ++++++++ .../extensions/IERC20Metadata__factory.ts | 248 ++++++++++ .../IERC20Permit__factory.ts | 101 ++++ .../draft-IERC20Permit.sol/index.ts | 4 + .../contracts/token/ERC20/extensions/index.ts | 5 + .../contracts/token/ERC20/index.ts | 6 + .../token/ERC721/IERC721Receiver__factory.ts | 60 +++ .../contracts/token/ERC721/index.ts | 4 + .../token/ERC777/IERC777Recipient__factory.ts | 64 +++ .../contracts/token/ERC777/index.ts | 4 + .../@openzeppelin/contracts/token/index.ts | 7 + .../@openzeppelin/contracts/utils/index.ts | 4 + .../utils/introspection/IERC165__factory.ts | 45 ++ .../contracts/utils/introspection/index.ts | 4 + .../factories/@openzeppelin/index.ts | 4 + 70 files changed, 4862 insertions(+), 5 deletions(-) create mode 100644 src/contracts/@openzeppelin/contracts/access/Ownable.ts create mode 100644 src/contracts/@openzeppelin/contracts/access/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts create mode 100644 src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/interfaces/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/Proxy.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts create mode 100644 src/contracts/@openzeppelin/contracts/proxy/utils/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC20/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC721/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/ERC777/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/token/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/utils/index.ts create mode 100644 src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts create mode 100644 src/contracts/@openzeppelin/contracts/utils/introspection/index.ts create mode 100644 src/contracts/@openzeppelin/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/access/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/token/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/utils/index.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts create mode 100644 src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts create mode 100644 src/contracts/factories/@openzeppelin/index.ts diff --git a/.gitignore b/.gitignore index 53f6627c..76f60fce 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,3 @@ test.js # contracts exposed src/contracts/factories/contracts-exposed/ - -#oz typings -src/contracts/@openzeppelin/ -src/contracts/factories/@openzeppelin/ \ No newline at end of file diff --git a/example.env b/example.env index 52062904..bda77c08 100644 --- a/example.env +++ b/example.env @@ -1,4 +1,3 @@ -WALLET_PUBLIC_KEY= WALLET_PRIVATE_KEY= RPC_PROVIDER_URL= \ No newline at end of file diff --git a/src/contracts/@openzeppelin/contracts/access/Ownable.ts b/src/contracts/@openzeppelin/contracts/access/Ownable.ts new file mode 100644 index 00000000..aaf0fb4e --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/access/Ownable.ts @@ -0,0 +1,176 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface OwnableInterface extends utils.Interface { + functions: { + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "owner" | "renounceOwnership" | "transferOwnership" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface Ownable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: OwnableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/access/index.ts b/src/contracts/@openzeppelin/contracts/access/index.ts new file mode 100644 index 00000000..999bcc77 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/access/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { Ownable } from "./Ownable"; diff --git a/src/contracts/@openzeppelin/contracts/index.ts b/src/contracts/@openzeppelin/contracts/index.ts new file mode 100644 index 00000000..b570e960 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/index.ts @@ -0,0 +1,13 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as access from "./access"; +export type { access }; +import type * as interfaces from "./interfaces"; +export type { interfaces }; +import type * as proxy from "./proxy"; +export type { proxy }; +import type * as token from "./token"; +export type { token }; +import type * as utils from "./utils"; +export type { utils }; diff --git a/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts b/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts new file mode 100644 index 00000000..e1f9bed5 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts @@ -0,0 +1,88 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC1822ProxiableInterface extends utils.Interface { + functions: { + "proxiableUUID()": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "proxiableUUID"): FunctionFragment; + + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC1822Proxiable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC1822ProxiableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + }; + + proxiableUUID(overrides?: CallOverrides): Promise; + + callStatic: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + proxiableUUID(overrides?: CallOverrides): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts b/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts new file mode 100644 index 00000000..daec45bb --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC1822Proxiable } from "./IERC1822Proxiable"; diff --git a/src/contracts/@openzeppelin/contracts/interfaces/index.ts b/src/contracts/@openzeppelin/contracts/interfaces/index.ts new file mode 100644 index 00000000..996dbb9d --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/interfaces/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as draftIerc1822Sol from "./draft-IERC1822.sol"; +export type { draftIerc1822Sol }; diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts new file mode 100644 index 00000000..8cbea348 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts @@ -0,0 +1,115 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface ERC1967ProxyInterface extends utils.Interface { + functions: {}; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface ERC1967Proxy extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ERC1967ProxyInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts new file mode 100644 index 00000000..81ce1552 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts @@ -0,0 +1,115 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface ERC1967UpgradeInterface extends utils.Interface { + functions: {}; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface ERC1967Upgrade extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ERC1967UpgradeInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts new file mode 100644 index 00000000..ffa8bbb0 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { ERC1967Proxy } from "./ERC1967Proxy"; +export type { ERC1967Upgrade } from "./ERC1967Upgrade"; diff --git a/src/contracts/@openzeppelin/contracts/proxy/Proxy.ts b/src/contracts/@openzeppelin/contracts/proxy/Proxy.ts new file mode 100644 index 00000000..7dfcf23d --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/Proxy.ts @@ -0,0 +1,56 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; + +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../common"; + +export interface ProxyInterface extends utils.Interface { + functions: {}; + + events: {}; +} + +export interface Proxy extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ProxyInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: {}; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts b/src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts new file mode 100644 index 00000000..fb83fd9e --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts @@ -0,0 +1,88 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IBeaconInterface extends utils.Interface { + functions: { + "implementation()": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "implementation"): FunctionFragment; + + encodeFunctionData( + functionFragment: "implementation", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "implementation", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IBeacon extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IBeaconInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + implementation(overrides?: CallOverrides): Promise<[string]>; + }; + + implementation(overrides?: CallOverrides): Promise; + + callStatic: { + implementation(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + implementation(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + implementation(overrides?: CallOverrides): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts b/src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts new file mode 100644 index 00000000..9224b1ea --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IBeacon } from "./IBeacon"; diff --git a/src/contracts/@openzeppelin/contracts/proxy/index.ts b/src/contracts/@openzeppelin/contracts/proxy/index.ts new file mode 100644 index 00000000..73dcc1b8 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/index.ts @@ -0,0 +1,10 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as erc1967 from "./ERC1967"; +export type { erc1967 }; +import type * as beacon from "./beacon"; +export type { beacon }; +import type * as utils from "./utils"; +export type { utils }; +export type { Proxy } from "./Proxy"; diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts b/src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts new file mode 100644 index 00000000..a97ca26e --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts @@ -0,0 +1,70 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface InitializableInterface extends utils.Interface { + functions: {}; + + events: { + "Initialized(uint8)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; +} + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface Initializable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: InitializableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts b/src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts new file mode 100644 index 00000000..adc58962 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts @@ -0,0 +1,226 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface UUPSUpgradeableInterface extends utils.Interface { + functions: { + "proxiableUUID()": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "proxiableUUID" | "upgradeTo" | "upgradeToAndCall" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface UUPSUpgradeable extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: UUPSUpgradeableInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + }; + + estimateGas: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + proxiableUUID(overrides?: CallOverrides): Promise; + + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + upgradeToAndCall( + newImplementation: PromiseOrValue, + data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/index.ts b/src/contracts/@openzeppelin/contracts/proxy/utils/index.ts new file mode 100644 index 00000000..f23837ba --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/proxy/utils/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { Initializable } from "./Initializable"; +export type { UUPSUpgradeable } from "./UUPSUpgradeable"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts b/src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts new file mode 100644 index 00000000..7da245c0 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts @@ -0,0 +1,231 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC1155ReceiverInterface extends utils.Interface { + functions: { + "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "onERC1155BatchReceived" + | "onERC1155Received" + | "supportsInterface" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "onERC1155BatchReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "onERC1155BatchReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC1155Receiver extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC1155ReceiverInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + onERC1155BatchReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + ids: PromiseOrValue[], + values: PromiseOrValue[], + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onERC1155Received( + operator: PromiseOrValue, + from: PromiseOrValue, + id: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts new file mode 100644 index 00000000..03002515 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC1155Receiver } from "./IERC1155Receiver"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts new file mode 100644 index 00000000..682e3cfd --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts @@ -0,0 +1,464 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface ERC20Interface extends utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "allowance" + | "approve" + | "balanceOf" + | "decimals" + | "decreaseAllowance" + | "increaseAllowance" + | "name" + | "symbol" + | "totalSupply" + | "transfer" + | "transferFrom" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData( + functionFragment: "decreaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "increaseAllowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "decreaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "increaseAllowance", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface ERC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ERC20Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + decimals(overrides?: CallOverrides): Promise<[number]>; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + decreaseAllowance( + spender: PromiseOrValue, + subtractedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + increaseAllowance( + spender: PromiseOrValue, + addedValue: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts new file mode 100644 index 00000000..e99e80b8 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts @@ -0,0 +1,342 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC20Interface extends utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "allowance" + | "approve" + | "balanceOf" + | "totalSupply" + | "transfer" + | "transferFrom" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface IERC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts new file mode 100644 index 00000000..7a94b724 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts @@ -0,0 +1,384 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../common"; + +export interface IERC20MetadataInterface extends utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "allowance" + | "approve" + | "balanceOf" + | "decimals" + | "name" + | "symbol" + | "totalSupply" + | "transfer" + | "transferFrom" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface IERC20Metadata extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20MetadataInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + decimals(overrides?: CallOverrides): Promise<[number]>; + + name(overrides?: CallOverrides): Promise<[string]>; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + }; + + estimateGas: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts new file mode 100644 index 00000000..836ee60a --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts @@ -0,0 +1,193 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export interface IERC20PermitInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "nonces(address)": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "nonces" | "permit" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "DOMAIN_SEPARATOR", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "nonces", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "permit", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "DOMAIN_SEPARATOR", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + + events: {}; +} + +export interface IERC20Permit extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20PermitInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + + nonces( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + permit( + owner: PromiseOrValue, + spender: PromiseOrValue, + value: PromiseOrValue, + deadline: PromiseOrValue, + v: PromiseOrValue, + r: PromiseOrValue, + s: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + + nonces( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + permit( + owner: PromiseOrValue, + spender: PromiseOrValue, + value: PromiseOrValue, + deadline: PromiseOrValue, + v: PromiseOrValue, + r: PromiseOrValue, + s: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + + nonces( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + permit( + owner: PromiseOrValue, + spender: PromiseOrValue, + value: PromiseOrValue, + deadline: PromiseOrValue, + v: PromiseOrValue, + r: PromiseOrValue, + s: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + + nonces( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + permit( + owner: PromiseOrValue, + spender: PromiseOrValue, + value: PromiseOrValue, + deadline: PromiseOrValue, + v: PromiseOrValue, + r: PromiseOrValue, + s: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + + nonces( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + permit( + owner: PromiseOrValue, + spender: PromiseOrValue, + value: PromiseOrValue, + deadline: PromiseOrValue, + v: PromiseOrValue, + r: PromiseOrValue, + s: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts new file mode 100644 index 00000000..6673dc7d --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC20Permit } from "./IERC20Permit"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts new file mode 100644 index 00000000..210314ee --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as draftIerc20PermitSol from "./draft-IERC20Permit.sol"; +export type { draftIerc20PermitSol }; +export type { IERC20Metadata } from "./IERC20Metadata"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC20/index.ts new file mode 100644 index 00000000..cc196974 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC20/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as extensions from "./extensions"; +export type { extensions }; +export type { ERC20 } from "./ERC20"; +export type { IERC20 } from "./IERC20"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts b/src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts new file mode 100644 index 00000000..29adc897 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts @@ -0,0 +1,126 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC721ReceiverInterface extends utils.Interface { + functions: { + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "onERC721Received"): FunctionFragment; + + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC721Receiver extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC721ReceiverInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + onERC721Received( + operator: PromiseOrValue, + from: PromiseOrValue, + tokenId: PromiseOrValue, + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC721/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC721/index.ts new file mode 100644 index 00000000..dd183b2e --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC721/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC721Receiver } from "./IERC721Receiver"; diff --git a/src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts b/src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts new file mode 100644 index 00000000..01b120fc --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts @@ -0,0 +1,138 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC777RecipientInterface extends utils.Interface { + functions: { + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "tokensReceived"): FunctionFragment; + + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC777Recipient extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC777RecipientInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + tokensReceived( + operator: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + userData: PromiseOrValue, + operatorData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/token/ERC777/index.ts b/src/contracts/@openzeppelin/contracts/token/ERC777/index.ts new file mode 100644 index 00000000..211979bb --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/ERC777/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC777Recipient } from "./IERC777Recipient"; diff --git a/src/contracts/@openzeppelin/contracts/token/index.ts b/src/contracts/@openzeppelin/contracts/token/index.ts new file mode 100644 index 00000000..64b67e1b --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/token/index.ts @@ -0,0 +1,11 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as erc1155 from "./ERC1155"; +export type { erc1155 }; +import type * as erc20 from "./ERC20"; +export type { erc20 }; +import type * as erc721 from "./ERC721"; +export type { erc721 }; +import type * as erc777 from "./ERC777"; +export type { erc777 }; diff --git a/src/contracts/@openzeppelin/contracts/utils/index.ts b/src/contracts/@openzeppelin/contracts/utils/index.ts new file mode 100644 index 00000000..3aa96c1c --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/utils/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as introspection from "./introspection"; +export type { introspection }; diff --git a/src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts b/src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts new file mode 100644 index 00000000..010603d4 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts @@ -0,0 +1,103 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC165Interface extends utils.Interface { + functions: { + "supportsInterface(bytes4)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "supportsInterface"): FunctionFragment; + + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IERC165 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC165Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + }; + + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/src/contracts/@openzeppelin/contracts/utils/introspection/index.ts b/src/contracts/@openzeppelin/contracts/utils/introspection/index.ts new file mode 100644 index 00000000..3fcca5c2 --- /dev/null +++ b/src/contracts/@openzeppelin/contracts/utils/introspection/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC165 } from "./IERC165"; diff --git a/src/contracts/@openzeppelin/index.ts b/src/contracts/@openzeppelin/index.ts new file mode 100644 index 00000000..a11e4ca2 --- /dev/null +++ b/src/contracts/@openzeppelin/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as contracts from "./contracts"; +export type { contracts }; diff --git a/src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts b/src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts new file mode 100644 index 00000000..fa147181 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts @@ -0,0 +1,78 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + Ownable, + OwnableInterface, +} from "../../../../@openzeppelin/contracts/access/Ownable"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class Ownable__factory { + static readonly abi = _abi; + static createInterface(): OwnableInterface { + return new utils.Interface(_abi) as OwnableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Ownable { + return new Contract(address, _abi, signerOrProvider) as Ownable; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/access/index.ts b/src/contracts/factories/@openzeppelin/contracts/access/index.ts new file mode 100644 index 00000000..e332ae32 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/access/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { Ownable__factory } from "./Ownable__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/index.ts b/src/contracts/factories/@openzeppelin/contracts/index.ts new file mode 100644 index 00000000..cacd2b7e --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as access from "./access"; +export * as interfaces from "./interfaces"; +export * as proxy from "./proxy"; +export * as token from "./token"; +export * as utils from "./utils"; diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts b/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts new file mode 100644 index 00000000..d4d9218f --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC1822Proxiable, + IERC1822ProxiableInterface, +} from "../../../../../@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable"; + +const _abi = [ + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC1822Proxiable__factory { + static readonly abi = _abi; + static createInterface(): IERC1822ProxiableInterface { + return new utils.Interface(_abi) as IERC1822ProxiableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC1822Proxiable { + return new Contract(address, _abi, signerOrProvider) as IERC1822Proxiable; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts b/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts new file mode 100644 index 00000000..ecca1339 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC1822Proxiable__factory } from "./IERC1822Proxiable__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts b/src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts new file mode 100644 index 00000000..45e4ba14 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as draftIerc1822Sol from "./draft-IERC1822.sol"; diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts new file mode 100644 index 00000000..7e2861ef --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts @@ -0,0 +1,147 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + PayableOverrides, + BytesLike, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../common"; +import type { + ERC1967Proxy, + ERC1967ProxyInterface, +} from "../../../../../@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_logic", + type: "address", + }, + { + internalType: "bytes", + name: "_data", + type: "bytes", + }, + ], + stateMutability: "payable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + stateMutability: "payable", + type: "fallback", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x608060405260405162000c5138038062000c51833981810160405281019062000029919062000580565b6200003d828260006200004560201b60201c565b5050620007d7565b62000056836200008860201b60201c565b600082511180620000645750805b156200008357620000818383620000df60201b620000371760201c565b505b505050565b62000099816200011560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200010d838360405180606001604052806027815260200162000c2a60279139620001eb60201b60201c565b905092915050565b6200012b816200027d60201b620000641760201c565b6200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200066d565b60405180910390fd5b80620001a77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620002a060201b620000871760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620002179190620006dc565b600060405180830381855af49150503d806000811462000254576040519150601f19603f3d011682016040523d82523d6000602084013e62000259565b606091505b50915091506200027286838387620002aa60201b60201c565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b606083156200031a5760008351036200031157620002ce856200027d60201b60201c565b62000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062000745565b60405180910390fd5b5b8290506200032d565b6200032c83836200033560201b60201c565b5b949350505050565b600082511115620003495781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9190620007b3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c9826200039c565b9050919050565b620003db81620003bc565b8114620003e757600080fd5b50565b600081519050620003fb81620003d0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000456826200040b565b810181811067ffffffffffffffff821117156200047857620004776200041c565b5b80604052505050565b60006200048d62000388565b90506200049b82826200044b565b919050565b600067ffffffffffffffff821115620004be57620004bd6200041c565b5b620004c9826200040b565b9050602081019050919050565b60005b83811015620004f6578082015181840152602081019050620004d9565b60008484015250505050565b6000620005196200051384620004a0565b62000481565b90508281526020810184848401111562000538576200053762000406565b5b62000545848285620004d6565b509392505050565b600082601f83011262000565576200056462000401565b5b81516200057784826020860162000502565b91505092915050565b600080604083850312156200059a576200059962000392565b5b6000620005aa85828601620003ea565b925050602083015167ffffffffffffffff811115620005ce57620005cd62000397565b5b620005dc858286016200054d565b9150509250929050565b600082825260208201905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000655602d83620005e6565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b600081519050919050565b600081905092915050565b6000620006b2826200068f565b620006be81856200069a565b9350620006d0818560208601620004d6565b80840191505092915050565b6000620006ea8284620006a5565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200072d601d83620005e6565b91506200073a82620006f5565b602082019050919050565b6000602082019050818103600083015262000760816200071e565b9050919050565b600081519050919050565b60006200077f8262000767565b6200078b8185620005e6565b93506200079d818560208601620004d6565b620007a8816200040b565b840191505092915050565b60006020820190508181036000830152620007cf818462000772565b905092915050565b61044380620007e76000396000f3fe6080604052366100135761001161001d565b005b61001b61001d565b005b610025610091565b610035610030610093565b6100a2565b565b606061005c83836040518060600160405280602781526020016103e7602791396100c8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b565b600061009d61014e565b905090565b3660008037600080366000845af43d6000803e80600081146100c3573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516100f291906102db565b600060405180830381855af49150503d806000811461012d576040519150601f19603f3d011682016040523d82523d6000602084013e610132565b606091505b5091509150610143868383876101a5565b925050509392505050565b600061017c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610087565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606083156102075760008351036101ff576101bf85610064565b6101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f59061034f565b60405180910390fd5b5b829050610212565b610211838361021a565b5b949350505050565b60008251111561022d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026191906103c4565b60405180910390fd5b600081519050919050565b600081905092915050565b60005b8381101561029e578082015181840152602081019050610283565b60008484015250505050565b60006102b58261026a565b6102bf8185610275565b93506102cf818560208601610280565b80840191505092915050565b60006102e782846102aa565b915081905092915050565b600082825260208201905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000610339601d836102f2565b915061034482610303565b602082019050919050565b600060208201905081810360008301526103688161032c565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006103968261036f565b6103a081856102f2565b93506103b0818560208601610280565b6103b98161037a565b840191505092915050565b600060208201905081810360008301526103de818461038b565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e57dd3eafc9985be746025b6d82d4f011b9a7bb3db56f9a1eb7eadfddd376b6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; + +type ERC1967ProxyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ERC1967ProxyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ERC1967Proxy__factory extends ContractFactory { + constructor(...args: ERC1967ProxyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _logic: PromiseOrValue, + _data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _logic, + _data, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _logic: PromiseOrValue, + _data: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_logic, _data, overrides || {}); + } + override attach(address: string): ERC1967Proxy { + return super.attach(address) as ERC1967Proxy; + } + override connect(signer: Signer): ERC1967Proxy__factory { + return super.connect(signer) as ERC1967Proxy__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ERC1967ProxyInterface { + return new utils.Interface(_abi) as ERC1967ProxyInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ERC1967Proxy { + return new Contract(address, _abi, signerOrProvider) as ERC1967Proxy; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts new file mode 100644 index 00000000..384b7f65 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts @@ -0,0 +1,71 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + ERC1967Upgrade, + ERC1967UpgradeInterface, +} from "../../../../../@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, +] as const; + +export class ERC1967Upgrade__factory { + static readonly abi = _abi; + static createInterface(): ERC1967UpgradeInterface { + return new utils.Interface(_abi) as ERC1967UpgradeInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ERC1967Upgrade { + return new Contract(address, _abi, signerOrProvider) as ERC1967Upgrade; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts new file mode 100644 index 00000000..62504d8f --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { ERC1967Proxy__factory } from "./ERC1967Proxy__factory"; +export { ERC1967Upgrade__factory } from "./ERC1967Upgrade__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts new file mode 100644 index 00000000..637fccee --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts @@ -0,0 +1,31 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + Proxy, + ProxyInterface, +} from "../../../../@openzeppelin/contracts/proxy/Proxy"; + +const _abi = [ + { + stateMutability: "payable", + type: "fallback", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +export class Proxy__factory { + static readonly abi = _abi; + static createInterface(): ProxyInterface { + return new utils.Interface(_abi) as ProxyInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): Proxy { + return new Contract(address, _abi, signerOrProvider) as Proxy; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts new file mode 100644 index 00000000..1aeed20f --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IBeacon, + IBeaconInterface, +} from "../../../../../@openzeppelin/contracts/proxy/beacon/IBeacon"; + +const _abi = [ + { + inputs: [], + name: "implementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IBeacon__factory { + static readonly abi = _abi; + static createInterface(): IBeaconInterface { + return new utils.Interface(_abi) as IBeaconInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IBeacon { + return new Contract(address, _abi, signerOrProvider) as IBeacon; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts new file mode 100644 index 00000000..4a9d6289 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IBeacon__factory } from "./IBeacon__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/index.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/index.ts new file mode 100644 index 00000000..6706623d --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as erc1967 from "./ERC1967"; +export * as beacon from "./beacon"; +export * as utils from "./utils"; +export { Proxy__factory } from "./Proxy__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts new file mode 100644 index 00000000..5af85bb2 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts @@ -0,0 +1,39 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + Initializable, + InitializableInterface, +} from "../../../../../@openzeppelin/contracts/proxy/utils/Initializable"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, +] as const; + +export class Initializable__factory { + static readonly abi = _abi; + static createInterface(): InitializableInterface { + return new utils.Interface(_abi) as InitializableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): Initializable { + return new Contract(address, _abi, signerOrProvider) as Initializable; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts new file mode 100644 index 00000000..91929934 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts @@ -0,0 +1,115 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + UUPSUpgradeable, + UUPSUpgradeableInterface, +} from "../../../../../@openzeppelin/contracts/proxy/utils/UUPSUpgradeable"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; + +export class UUPSUpgradeable__factory { + static readonly abi = _abi; + static createInterface(): UUPSUpgradeableInterface { + return new utils.Interface(_abi) as UUPSUpgradeableInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): UUPSUpgradeable { + return new Contract(address, _abi, signerOrProvider) as UUPSUpgradeable; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts new file mode 100644 index 00000000..a192d15d --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { Initializable__factory } from "./Initializable__factory"; +export { UUPSUpgradeable__factory } from "./UUPSUpgradeable__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts new file mode 100644 index 00000000..b18d07ed --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts @@ -0,0 +1,123 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC1155Receiver, + IERC1155ReceiverInterface, +} from "../../../../../@openzeppelin/contracts/token/ERC1155/IERC1155Receiver"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256[]", + name: "ids", + type: "uint256[]", + }, + { + internalType: "uint256[]", + name: "values", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC1155BatchReceived", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256", + name: "id", + type: "uint256", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC1155Receiver__factory { + static readonly abi = _abi; + static createInterface(): IERC1155ReceiverInterface { + return new utils.Interface(_abi) as IERC1155ReceiverInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC1155Receiver { + return new Contract(address, _abi, signerOrProvider) as IERC1155Receiver; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts new file mode 100644 index 00000000..3e57b69b --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC1155Receiver__factory } from "./IERC1155Receiver__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts new file mode 100644 index 00000000..d84952e4 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts @@ -0,0 +1,350 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../../../../common"; +import type { + ERC20, + ERC20Interface, +} from "../../../../../@openzeppelin/contracts/token/ERC20/ERC20"; + +const _abi = [ + { + inputs: [ + { + internalType: "string", + name: "name_", + type: "string", + }, + { + internalType: "string", + name: "symbol_", + type: "string", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + 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: "amount", + 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: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + 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: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60806040523480156200001157600080fd5b50604051620017ec380380620017ec8339818101604052810190620000379190620001f6565b8160039081620000489190620004c6565b5080600490816200005a9190620004c6565b505050620005ad565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000cc8262000081565b810181811067ffffffffffffffff82111715620000ee57620000ed62000092565b5b80604052505050565b60006200010362000063565b9050620001118282620000c1565b919050565b600067ffffffffffffffff82111562000134576200013362000092565b5b6200013f8262000081565b9050602081019050919050565b60005b838110156200016c5780820151818401526020810190506200014f565b60008484015250505050565b60006200018f620001898462000116565b620000f7565b905082815260208101848484011115620001ae57620001ad6200007c565b5b620001bb8482856200014c565b509392505050565b600082601f830112620001db57620001da62000077565b5b8151620001ed84826020860162000178565b91505092915050565b6000806040838503121562000210576200020f6200006d565b5b600083015167ffffffffffffffff81111562000231576200023062000072565b5b6200023f85828601620001c3565b925050602083015167ffffffffffffffff81111562000263576200026262000072565b5b6200027185828601620001c3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ce57607f821691505b602082108103620002e457620002e362000286565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200034e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200030f565b6200035a86836200030f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003a7620003a16200039b8462000372565b6200037c565b62000372565b9050919050565b6000819050919050565b620003c38362000386565b620003db620003d282620003ae565b8484546200031c565b825550505050565b600090565b620003f2620003e3565b620003ff818484620003b8565b505050565b5b8181101562000427576200041b600082620003e8565b60018101905062000405565b5050565b601f82111562000476576200044081620002ea565b6200044b84620002ff565b810160208510156200045b578190505b620004736200046a85620002ff565b83018262000404565b50505b505050565b600082821c905092915050565b60006200049b600019846008026200047b565b1980831691505092915050565b6000620004b6838362000488565b9150826002028217905092915050565b620004d1826200027b565b67ffffffffffffffff811115620004ed57620004ec62000092565b5b620004f98254620002b5565b620005068282856200042b565b600060209050601f8311600181146200053e576000841562000529578287015190505b620005358582620004a8565b865550620005a5565b601f1984166200054e86620002ea565b60005b82811015620005785784890151825560018201915060208501945060208101905062000551565b8683101562000598578489015162000594601f89168262000488565b8355505b6001600288020188555050505b505050505050565b61122f80620005bd6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610b0c565b60405180910390f35b6100e660048036038101906100e19190610bc7565b610308565b6040516100f39190610c22565b60405180910390f35b61010461032b565b6040516101119190610c4c565b60405180910390f35b610134600480360381019061012f9190610c67565b610335565b6040516101419190610c22565b60405180910390f35b610152610364565b60405161015f9190610cd6565b60405180910390f35b610182600480360381019061017d9190610bc7565b61036d565b60405161018f9190610c22565b60405180910390f35b6101b260048036038101906101ad9190610cf1565b6103a4565b6040516101bf9190610c4c565b60405180910390f35b6101d06103ec565b6040516101dd9190610b0c565b60405180910390f35b61020060048036038101906101fb9190610bc7565b61047e565b60405161020d9190610c22565b60405180910390f35b610230600480360381019061022b9190610bc7565b6104f5565b60405161023d9190610c22565b60405180910390f35b610260600480360381019061025b9190610d1e565b610518565b60405161026d9190610c4c565b60405180910390f35b60606003805461028590610d8d565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610d8d565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b60008061031361059f565b90506103208185856105a7565b600191505092915050565b6000600254905090565b60008061034061059f565b905061034d858285610770565b6103588585856107fc565b60019150509392505050565b60006012905090565b60008061037861059f565b905061039981858561038a8589610518565b6103949190610ded565b6105a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610d8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610d8d565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b60008061048961059f565b905060006104978286610518565b9050838110156104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d390610e93565b60405180910390fd5b6104e982868684036105a7565b60019250505092915050565b60008061050061059f565b905061050d8185856107fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90610f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c90610fb7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107639190610c4c565b60405180910390a3505050565b600061077c8484610518565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107f657818110156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90611023565b60405180910390fd5b6107f584848484036105a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906110b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611147565b60405180910390fd5b6108e5838383610a72565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610962906111d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a599190610c4c565b60405180910390a3610a6c848484610a77565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ab6578082015181840152602081019050610a9b565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ade82610a7c565b610ae88185610a87565b9350610af8818560208601610a98565b610b0181610ac2565b840191505092915050565b60006020820190508181036000830152610b268184610ad3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b5e82610b33565b9050919050565b610b6e81610b53565b8114610b7957600080fd5b50565b600081359050610b8b81610b65565b92915050565b6000819050919050565b610ba481610b91565b8114610baf57600080fd5b50565b600081359050610bc181610b9b565b92915050565b60008060408385031215610bde57610bdd610b2e565b5b6000610bec85828601610b7c565b9250506020610bfd85828601610bb2565b9150509250929050565b60008115159050919050565b610c1c81610c07565b82525050565b6000602082019050610c376000830184610c13565b92915050565b610c4681610b91565b82525050565b6000602082019050610c616000830184610c3d565b92915050565b600080600060608486031215610c8057610c7f610b2e565b5b6000610c8e86828701610b7c565b9350506020610c9f86828701610b7c565b9250506040610cb086828701610bb2565b9150509250925092565b600060ff82169050919050565b610cd081610cba565b82525050565b6000602082019050610ceb6000830184610cc7565b92915050565b600060208284031215610d0757610d06610b2e565b5b6000610d1584828501610b7c565b91505092915050565b60008060408385031215610d3557610d34610b2e565b5b6000610d4385828601610b7c565b9250506020610d5485828601610b7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610da557607f821691505b602082108103610db857610db7610d5e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610df882610b91565b9150610e0383610b91565b9250828201905080821115610e1b57610e1a610dbe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000610e7d602583610a87565b9150610e8882610e21565b604082019050919050565b60006020820190508181036000830152610eac81610e70565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000610f0f602483610a87565b9150610f1a82610eb3565b604082019050919050565b60006020820190508181036000830152610f3e81610f02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000610fa1602283610a87565b9150610fac82610f45565b604082019050919050565b60006020820190508181036000830152610fd081610f94565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061100d601d83610a87565b915061101882610fd7565b602082019050919050565b6000602082019050818103600083015261103c81611000565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061109f602583610a87565b91506110aa82611043565b604082019050919050565b600060208201905081810360008301526110ce81611092565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611131602383610a87565b915061113c826110d5565b604082019050919050565b6000602082019050818103600083015261116081611124565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006111c3602683610a87565b91506111ce82611167565b604082019050919050565b600060208201905081810360008301526111f2816111b6565b905091905056fea26469706673582212204188b273199f085e1921ec1a1fa55abdee2e425960bda675a51fac85acd9972064736f6c63430008110033"; + +type ERC20ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ERC20ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ERC20__factory extends ContractFactory { + constructor(...args: ERC20ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + name_: PromiseOrValue, + symbol_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(name_, symbol_, overrides || {}) as Promise; + } + override getDeployTransaction( + name_: PromiseOrValue, + symbol_: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(name_, symbol_, overrides || {}); + } + override attach(address: string): ERC20 { + return super.attach(address) as ERC20; + } + override connect(signer: Signer): ERC20__factory { + return super.connect(signer) as ERC20__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ERC20Interface { + return new utils.Interface(_abi) as ERC20Interface; + } + static connect(address: string, signerOrProvider: Signer | Provider): ERC20 { + return new Contract(address, _abi, signerOrProvider) as ERC20; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts new file mode 100644 index 00000000..cd7fa8f3 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts @@ -0,0 +1,206 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20, + IERC20Interface, +} from "../../../../../@openzeppelin/contracts/token/ERC20/IERC20"; + +const _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: "amount", + 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: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC20__factory { + static readonly abi = _abi; + static createInterface(): IERC20Interface { + return new utils.Interface(_abi) as IERC20Interface; + } + static connect(address: string, signerOrProvider: Signer | Provider): IERC20 { + return new Contract(address, _abi, signerOrProvider) as IERC20; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts new file mode 100644 index 00000000..47c292bf --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts @@ -0,0 +1,248 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20Metadata, + IERC20MetadataInterface, +} from "../../../../../../@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata"; + +const _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: "amount", + 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: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC20Metadata__factory { + static readonly abi = _abi; + static createInterface(): IERC20MetadataInterface { + return new utils.Interface(_abi) as IERC20MetadataInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC20Metadata { + return new Contract(address, _abi, signerOrProvider) as IERC20Metadata; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts new file mode 100644 index 00000000..a4471b82 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts @@ -0,0 +1,101 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20Permit, + IERC20PermitInterface, +} from "../../../../../../../@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit"; + +const _abi = [ + { + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256", + }, + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC20Permit__factory { + static readonly abi = _abi; + static createInterface(): IERC20PermitInterface { + return new utils.Interface(_abi) as IERC20PermitInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC20Permit { + return new Contract(address, _abi, signerOrProvider) as IERC20Permit; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts new file mode 100644 index 00000000..5f347d4a --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC20Permit__factory } from "./IERC20Permit__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts new file mode 100644 index 00000000..992b761c --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as draftIerc20PermitSol from "./draft-IERC20Permit.sol"; +export { IERC20Metadata__factory } from "./IERC20Metadata__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts new file mode 100644 index 00000000..3523dc7a --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as extensions from "./extensions"; +export { ERC20__factory } from "./ERC20__factory"; +export { IERC20__factory } from "./IERC20__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts new file mode 100644 index 00000000..52ca02fd --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts @@ -0,0 +1,60 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC721Receiver, + IERC721ReceiverInterface, +} from "../../../../../@openzeppelin/contracts/token/ERC721/IERC721Receiver"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC721Receiver__factory { + static readonly abi = _abi; + static createInterface(): IERC721ReceiverInterface { + return new utils.Interface(_abi) as IERC721ReceiverInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC721Receiver { + return new Contract(address, _abi, signerOrProvider) as IERC721Receiver; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts new file mode 100644 index 00000000..aaceed63 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC721Receiver__factory } from "./IERC721Receiver__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts new file mode 100644 index 00000000..6c3f4d9a --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts @@ -0,0 +1,64 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC777Recipient, + IERC777RecipientInterface, +} from "../../../../../@openzeppelin/contracts/token/ERC777/IERC777Recipient"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address", + }, + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "userData", + type: "bytes", + }, + { + internalType: "bytes", + name: "operatorData", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class IERC777Recipient__factory { + static readonly abi = _abi; + static createInterface(): IERC777RecipientInterface { + return new utils.Interface(_abi) as IERC777RecipientInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC777Recipient { + return new Contract(address, _abi, signerOrProvider) as IERC777Recipient; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts new file mode 100644 index 00000000..bbf9d2f3 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC777Recipient__factory } from "./IERC777Recipient__factory"; diff --git a/src/contracts/factories/@openzeppelin/contracts/token/index.ts b/src/contracts/factories/@openzeppelin/contracts/token/index.ts new file mode 100644 index 00000000..66d56444 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/token/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as erc1155 from "./ERC1155"; +export * as erc20 from "./ERC20"; +export * as erc721 from "./ERC721"; +export * as erc777 from "./ERC777"; diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/index.ts b/src/contracts/factories/@openzeppelin/contracts/utils/index.ts new file mode 100644 index 00000000..03cab177 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/utils/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as introspection from "./introspection"; diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts b/src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts new file mode 100644 index 00000000..71bfb8a9 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts @@ -0,0 +1,45 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC165, + IERC165Interface, +} from "../../../../../@openzeppelin/contracts/utils/introspection/IERC165"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IERC165__factory { + static readonly abi = _abi; + static createInterface(): IERC165Interface { + return new utils.Interface(_abi) as IERC165Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC165 { + return new Contract(address, _abi, signerOrProvider) as IERC165; + } +} diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts b/src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts new file mode 100644 index 00000000..85d37333 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC165__factory } from "./IERC165__factory"; diff --git a/src/contracts/factories/@openzeppelin/index.ts b/src/contracts/factories/@openzeppelin/index.ts new file mode 100644 index 00000000..6397da09 --- /dev/null +++ b/src/contracts/factories/@openzeppelin/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as contracts from "./contracts"; From 6281596cf0a5c700f2bb3685405507cf44868476 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Sat, 27 May 2023 16:19:50 +0530 Subject: [PATCH 09/20] Rough Draft for Utkir --- examples/02-transfer-funds.ts | 40 ++- package-lock.json | 78 +++++- package.json | 5 +- src/browser-polyfill.ts | 1 + src/browser.ts | 4 + src/common/index.ts | 2 - src/index.ts | 2 +- src/node-polyfill.ts | 16 ++ src/node.ts | 4 + src/sdk/account/__mocks__/account.service.ts | 35 +++ src/sdk/account/account.service.ts | 72 ++++++ src/sdk/account/classes/account.ts | 22 ++ src/sdk/account/classes/index.ts | 1 + src/sdk/account/constants.ts | 9 + src/sdk/account/index.ts | 3 + src/{ => sdk}/base/BLSAccountAPI.ts | 1 + src/{ => sdk}/base/BaseAccountAPI.ts | 228 +++++++++++++++++- src/{ => sdk}/base/ClientConfig.ts | 0 src/{ => sdk}/base/DeterministicDeployer.ts | 0 src/{ => sdk}/base/ERC4337EthersProvider.ts | 0 src/{ => sdk}/base/ERC4337EthersSigner.ts | 0 src/{ => sdk}/base/EtherspotWalletAPI.ts | 18 +- src/{ => sdk}/base/EtherspotWalletFactory.ts | 2 +- src/{ => sdk}/base/HttpRpcClient.ts | 0 src/{ => sdk}/base/PaymasterAPI.ts | 0 src/{ => sdk}/base/Provider.ts | 0 .../base/TransactionDetailsForUserOp.ts | 0 .../base/UserOperationEventListener.ts | 0 src/{ => sdk}/base/VerifyingPaymasterAPI.ts | 0 src/{ => sdk}/base/calcPreVerificationGas.ts | 0 src/{ => sdk}/base/index.ts | 2 +- src/{ => sdk}/common/ERC4337Utils.ts | 0 src/{ => sdk}/common/OperationUtils.ts | 0 src/sdk/common/classes/base-class.ts | 10 + src/sdk/common/classes/index.ts | 2 + src/sdk/common/classes/synchronized.ts | 6 + src/sdk/common/constants.ts | 9 + src/sdk/common/exceptions/exception.ts | 3 + src/sdk/common/exceptions/index.ts | 3 + src/sdk/common/exceptions/interfaces.ts | 8 + .../common/exceptions/validation.exception.ts | 17 ++ src/{ => sdk}/common/getGasFee.ts | 0 src/sdk/common/index.ts | 9 + src/sdk/common/interfaces.ts | 4 + .../rxjs/distinct-unique-key.operator.ts | 17 ++ src/sdk/common/rxjs/error.subject.ts | 65 +++++ src/sdk/common/rxjs/index.ts | 5 + src/sdk/common/rxjs/object.subject.ts | 35 +++ src/sdk/common/rxjs/synchronized.subject.ts | 21 ++ src/sdk/common/rxjs/unique.subject.ts | 17 ++ src/sdk/common/service.ts | 74 ++++++ src/sdk/common/utils/addresses-equal.ts | 3 + src/sdk/common/utils/concat-hex.ts | 6 + src/sdk/common/utils/deep-compare.spec.ts | 41 ++++ src/sdk/common/utils/deep-compare.ts | 68 ++++++ src/sdk/common/utils/index.ts | 15 ++ src/sdk/common/utils/is-address.ts | 24 ++ src/sdk/common/utils/is-big-number.ts | 8 + src/sdk/common/utils/is-hex.ts | 14 ++ src/sdk/common/utils/is-url.ts | 14 ++ src/sdk/common/utils/keccak256.ts | 29 +++ src/sdk/common/utils/parse-json.ts | 13 + src/sdk/common/utils/prepare-address.ts | 24 ++ src/sdk/common/utils/prepare-addresses.ts | 46 ++++ src/sdk/common/utils/random-private-key.ts | 5 + src/sdk/common/utils/sleep.ts | 6 + src/sdk/common/utils/stringify-json.ts | 6 + src/sdk/common/utils/to-hex.ts | 35 +++ src/sdk/context.ts | 39 +++ .../@openzeppelin/contracts/access/Ownable.ts | 0 .../@openzeppelin/contracts/access/index.ts | 0 .../@openzeppelin/contracts/index.ts | 0 .../draft-IERC1822.sol/IERC1822Proxiable.ts | 0 .../interfaces/draft-IERC1822.sol/index.ts | 0 .../contracts/interfaces/index.ts | 0 .../contracts/proxy/ERC1967/ERC1967Proxy.ts | 0 .../contracts/proxy/ERC1967/ERC1967Upgrade.ts | 0 .../contracts/proxy/ERC1967/index.ts | 0 .../@openzeppelin/contracts/proxy/Proxy.ts | 0 .../contracts/proxy/beacon/IBeacon.ts | 0 .../contracts/proxy/beacon/index.ts | 0 .../@openzeppelin/contracts/proxy/index.ts | 0 .../contracts/proxy/utils/Initializable.ts | 0 .../contracts/proxy/utils/UUPSUpgradeable.ts | 0 .../contracts/proxy/utils/index.ts | 0 .../token/ERC1155/IERC1155Receiver.ts | 0 .../contracts/token/ERC1155/index.ts | 0 .../contracts/token/ERC20/ERC20.ts | 0 .../contracts/token/ERC20/IERC20.ts | 0 .../token/ERC20/extensions/IERC20Metadata.ts | 0 .../draft-IERC20Permit.sol/IERC20Permit.ts | 0 .../draft-IERC20Permit.sol/index.ts | 0 .../contracts/token/ERC20/extensions/index.ts | 0 .../contracts/token/ERC20/index.ts | 0 .../contracts/token/ERC721/IERC721Receiver.ts | 0 .../contracts/token/ERC721/index.ts | 0 .../token/ERC777/IERC777Recipient.ts | 0 .../contracts/token/ERC777/index.ts | 0 .../@openzeppelin/contracts/token/index.ts | 0 .../@openzeppelin/contracts/utils/index.ts | 0 .../contracts/utils/introspection/IERC165.ts | 0 .../contracts/utils/introspection/index.ts | 0 .../contracts/@openzeppelin/index.ts | 0 src/{ => sdk}/contracts/common.ts | 0 .../contracts/access/Ownable__factory.ts | 0 .../@openzeppelin/contracts/access/index.ts | 0 .../@openzeppelin/contracts/index.ts | 0 .../IERC1822Proxiable__factory.ts | 0 .../interfaces/draft-IERC1822.sol/index.ts | 0 .../contracts/interfaces/index.ts | 0 .../proxy/ERC1967/ERC1967Proxy__factory.ts | 0 .../proxy/ERC1967/ERC1967Upgrade__factory.ts | 0 .../contracts/proxy/ERC1967/index.ts | 0 .../contracts/proxy/Proxy__factory.ts | 0 .../proxy/beacon/IBeacon__factory.ts | 0 .../contracts/proxy/beacon/index.ts | 0 .../@openzeppelin/contracts/proxy/index.ts | 0 .../proxy/utils/Initializable__factory.ts | 0 .../proxy/utils/UUPSUpgradeable__factory.ts | 0 .../contracts/proxy/utils/index.ts | 0 .../ERC1155/IERC1155Receiver__factory.ts | 0 .../contracts/token/ERC1155/index.ts | 0 .../contracts/token/ERC20/ERC20__factory.ts | 0 .../contracts/token/ERC20/IERC20__factory.ts | 0 .../extensions/IERC20Metadata__factory.ts | 0 .../IERC20Permit__factory.ts | 0 .../draft-IERC20Permit.sol/index.ts | 0 .../contracts/token/ERC20/extensions/index.ts | 0 .../contracts/token/ERC20/index.ts | 0 .../token/ERC721/IERC721Receiver__factory.ts | 0 .../contracts/token/ERC721/index.ts | 0 .../token/ERC777/IERC777Recipient__factory.ts | 0 .../contracts/token/ERC777/index.ts | 0 .../@openzeppelin/contracts/token/index.ts | 0 .../@openzeppelin/contracts/utils/index.ts | 0 .../utils/introspection/IERC165__factory.ts | 0 .../contracts/utils/introspection/index.ts | 0 .../factories/@openzeppelin/index.ts | 0 src/{ => sdk}/contracts/factories/index.ts | 0 .../IERC1822Proxiable__factory.ts | 0 .../proxy/ERC1967/ERC1967Upgrade__factory.ts | 0 .../proxy/beacon/IBeacon__factory.ts | 0 .../proxy/utils/Initializable__factory.ts | 0 .../proxy/utils/UUPSUpgradeable__factory.ts | 0 .../ERC1155/IERC1155Receiver__factory.ts | 0 .../contracts/token/ERC20/IERC20__factory.ts | 0 .../token/ERC721/IERC721Receiver__factory.ts | 0 .../token/ERC777/IERC777Recipient__factory.ts | 0 .../utils/introspection/IERC165__factory.ts | 0 .../aa-4337/bls/BLSAccountFactory__factory.ts | 0 .../src/aa-4337/bls/BLSAccount__factory.ts | 0 .../bls/BLSSignatureAggregator__factory.ts | 0 .../src/aa-4337/bls/IBLSAccount__factory.ts | 0 .../factories/src/aa-4337/bls/index.ts | 0 .../src/aa-4337/bls/lib/BLSOpen__factory.ts | 0 .../lib/hubble-contracts/contracts/index.ts | 0 ...PairingPrecompileCostEstimator__factory.ts | 0 .../hubble-contracts/contracts/libs/index.ts | 0 .../aa-4337/bls/lib/hubble-contracts/index.ts | 0 .../factories/src/aa-4337/bls/lib/index.ts | 0 .../callback/TokenCallbackHandler__factory.ts | 0 .../factories/src/aa-4337/callback/index.ts | 0 .../src/aa-4337/core/BaseAccount__factory.ts | 0 .../aa-4337/core/BasePaymaster__factory.ts | 0 .../src/aa-4337/core/EntryPoint__factory.ts | 0 .../aa-4337/core/SenderCreator__factory.ts | 0 .../src/aa-4337/core/StakeManager__factory.ts | 0 .../factories/src/aa-4337/core/index.ts | 0 .../contracts/factories/src/aa-4337/index.ts | 0 .../aa-4337/interfaces/IAccount__factory.ts | 0 .../interfaces/IAggregatedAccount__factory.ts | 0 .../interfaces/IAggregator__factory.ts | 0 .../interfaces/ICreate2Deployer__factory.ts | 0 .../interfaces/IEntryPoint__factory.ts | 0 .../aa-4337/interfaces/IPaymaster__factory.ts | 0 .../interfaces/IStakeManager__factory.ts | 0 .../factories/src/aa-4337/interfaces/index.ts | 0 .../samples/DepositPaymaster__factory.ts | 0 .../src/aa-4337/samples/IOracle__factory.ts | 0 .../TestAggregatedAccountFactory__factory.ts | 0 .../samples/TestAggregatedAccount__factory.ts | 0 .../samples/TokenPaymaster__factory.ts | 0 .../samples/VerifyingPaymaster__factory.ts | 0 .../factories/src/aa-4337/samples/index.ts | 0 .../BrokenBLSAccountFactory__factory.ts | 0 .../BrokenBLSAccount__factory.ts | 0 .../test/BrokenBlsAccount.sol/index.ts | 0 .../aa-4337/test/MaliciousAccount__factory.ts | 0 .../TestAggregatedAccountFactory__factory.ts | 0 .../test/TestAggregatedAccount__factory.ts | 0 .../src/aa-4337/test/TestCounter__factory.ts | 0 .../test/TestExpirePaymaster__factory.ts | 0 .../test/TestExpiryAccount__factory.ts | 0 .../src/aa-4337/test/TestHelpers__factory.ts | 0 .../src/aa-4337/test/TestOracle__factory.ts | 0 .../test/TestPaymasterAcceptAll__factory.ts | 0 .../test/TestRevertAccount__factory.ts | 0 .../test/TestSignatureAggregator__factory.ts | 0 .../src/aa-4337/test/TestToken__factory.ts | 0 .../src/aa-4337/test/TestUtil__factory.ts | 0 .../test/TestWarmColdAccount__factory.ts | 0 .../factories/src/aa-4337/test/index.ts | 0 .../factories/src/access/Guarded__factory.ts | 0 .../factories/src/access/Owned__factory.ts | 0 .../contracts/factories/src/access/index.ts | 0 .../IERC1271Wallet__factory.ts | 0 .../UniversalSigValidator__factory.ts | 0 .../ValidateSigOffchain__factory.ts | 0 .../UniversalSignatureValidator.sol/index.ts | 0 .../contracts/factories/src/helpers/index.ts | 0 .../contracts/factories/src/index.ts | 0 .../IEtherspotPaymaster__factory.ts | 0 .../interfaces/IEtherspotWallet__factory.ts | 0 .../src/interfaces/IWhitelist__factory.ts | 0 .../factories/src/interfaces/index.ts | 0 .../paymaster/EtherspotPaymaster__factory.ts | 0 .../src/paymaster/Whitelist__factory.ts | 0 .../factories/src/paymaster/index.ts | 0 .../src/wallet/AccountFactory__factory.ts | 0 .../wallet/EtherspotWalletFactory__factory.ts | 0 .../src/wallet/EtherspotWallet__factory.ts | 0 .../contracts/factories/src/wallet/index.ts | 0 src/{ => sdk}/contracts/index.ts | 0 .../draft-IERC1822.sol/IERC1822Proxiable.ts | 0 .../contracts/proxy/ERC1967/ERC1967Upgrade.ts | 0 .../contracts/proxy/beacon/IBeacon.ts | 0 .../contracts/proxy/utils/Initializable.ts | 0 .../contracts/proxy/utils/UUPSUpgradeable.ts | 0 .../token/ERC1155/IERC1155Receiver.ts | 0 .../contracts/token/ERC20/IERC20.ts | 0 .../contracts/token/ERC721/IERC721Receiver.ts | 0 .../token/ERC777/IERC777Recipient.ts | 0 .../contracts/utils/introspection/IERC165.ts | 0 .../contracts/src/aa-4337/bls/BLSAccount.ts | 0 .../src/aa-4337/bls/BLSAccountFactory.ts | 0 .../src/aa-4337/bls/BLSSignatureAggregator.ts | 0 .../contracts/src/aa-4337/bls/IBLSAccount.ts | 0 .../contracts/src/aa-4337/bls/index.ts | 0 .../contracts/src/aa-4337/bls/lib/BLSOpen.ts | 0 .../lib/hubble-contracts/contracts/index.ts | 0 .../libs/BNPairingPrecompileCostEstimator.ts | 0 .../hubble-contracts/contracts/libs/index.ts | 0 .../aa-4337/bls/lib/hubble-contracts/index.ts | 0 .../contracts/src/aa-4337/bls/lib/index.ts | 0 .../aa-4337/callback/TokenCallbackHandler.ts | 0 .../contracts/src/aa-4337/callback/index.ts | 0 .../contracts/src/aa-4337/core/BaseAccount.ts | 0 .../src/aa-4337/core/BasePaymaster.ts | 0 .../contracts/src/aa-4337/core/EntryPoint.ts | 0 .../src/aa-4337/core/SenderCreator.ts | 0 .../src/aa-4337/core/StakeManager.ts | 0 .../contracts/src/aa-4337/core/index.ts | 0 src/{ => sdk}/contracts/src/aa-4337/index.ts | 0 .../src/aa-4337/interfaces/IAccount.ts | 0 .../aa-4337/interfaces/IAggregatedAccount.ts | 0 .../src/aa-4337/interfaces/IAggregator.ts | 0 .../aa-4337/interfaces/ICreate2Deployer.ts | 0 .../src/aa-4337/interfaces/IEntryPoint.ts | 0 .../src/aa-4337/interfaces/IPaymaster.ts | 0 .../src/aa-4337/interfaces/IStakeManager.ts | 0 .../contracts/src/aa-4337/interfaces/index.ts | 0 .../src/aa-4337/samples/DepositPaymaster.ts | 0 .../contracts/src/aa-4337/samples/IOracle.ts | 0 .../aa-4337/samples/TestAggregatedAccount.ts | 0 .../samples/TestAggregatedAccountFactory.ts | 0 .../src/aa-4337/samples/TokenPaymaster.ts | 0 .../src/aa-4337/samples/VerifyingPaymaster.ts | 0 .../contracts/src/aa-4337/samples/index.ts | 0 .../BrokenBlsAccount.sol/BrokenBLSAccount.ts | 0 .../BrokenBLSAccountFactory.ts | 0 .../test/BrokenBlsAccount.sol/index.ts | 0 .../src/aa-4337/test/MaliciousAccount.ts | 0 .../src/aa-4337/test/TestAggregatedAccount.ts | 0 .../test/TestAggregatedAccountFactory.ts | 0 .../contracts/src/aa-4337/test/TestCounter.ts | 0 .../src/aa-4337/test/TestExpirePaymaster.ts | 0 .../src/aa-4337/test/TestExpiryAccount.ts | 0 .../contracts/src/aa-4337/test/TestHelpers.ts | 0 .../contracts/src/aa-4337/test/TestOracle.ts | 0 .../aa-4337/test/TestPaymasterAcceptAll.ts | 0 .../src/aa-4337/test/TestRevertAccount.ts | 0 .../aa-4337/test/TestSignatureAggregator.ts | 0 .../contracts/src/aa-4337/test/TestToken.ts | 0 .../contracts/src/aa-4337/test/TestUtil.ts | 0 .../src/aa-4337/test/TestWarmColdAccount.ts | 0 .../contracts/src/aa-4337/test/index.ts | 0 src/{ => sdk}/contracts/src/access/Guarded.ts | 0 src/{ => sdk}/contracts/src/access/Owned.ts | 0 src/{ => sdk}/contracts/src/access/index.ts | 0 .../IERC1271Wallet.ts | 0 .../UniversalSigValidator.ts | 0 .../ValidateSigOffchain.ts | 0 .../UniversalSignatureValidator.sol/index.ts | 0 src/{ => sdk}/contracts/src/helpers/index.ts | 0 src/{ => sdk}/contracts/src/index.ts | 0 .../src/interfaces/IEtherspotPaymaster.ts | 0 .../src/interfaces/IEtherspotWallet.ts | 0 .../contracts/src/interfaces/IWhitelist.ts | 0 .../contracts/src/interfaces/index.ts | 0 .../src/paymaster/EtherspotPaymaster.ts | 0 .../contracts/src/paymaster/Whitelist.ts | 0 .../contracts/src/paymaster/index.ts | 0 .../contracts/src/wallet/AccountFactory.ts | 0 .../contracts/src/wallet/EtherspotWallet.ts | 0 .../src/wallet/EtherspotWalletFactory.ts | 0 src/{ => sdk}/contracts/src/wallet/index.ts | 0 src/sdk/dto/create-session.dto.ts | 12 + src/sdk/dto/index.ts | 3 + src/sdk/dto/sign-message.dto.ts | 9 + src/sdk/dto/utils/index.ts | 1 + src/sdk/dto/utils/validate-dto.ts | 51 ++++ src/sdk/dto/validators/index.ts | 6 + .../dto/validators/is-address.validator.ts | 22 ++ .../validators/is-big-numberish.validator.ts | 38 +++ .../dto/validators/is-bytes-like.validator.ts | 44 ++++ src/sdk/dto/validators/is-hex.validator.ts | 40 +++ src/sdk/dto/validators/is-hex32.validator.ts | 11 + src/sdk/dto/validators/is-url.validator.ts | 22 ++ src/sdk/env/constants.ts | 25 ++ src/sdk/env/env.ts | 37 +++ src/sdk/env/index.ts | 3 + src/sdk/env/interfaces.ts | 4 + src/{ => sdk}/helpers/abi/ERC20_ABI.ts | 0 .../helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts | 0 src/sdk/index.ts | 14 ++ src/sdk/interfaces.ts | 14 ++ src/sdk/network/__mocks__/network.service.ts | 35 +++ src/sdk/network/constants.ts | 39 +++ src/sdk/network/index.ts | 4 + src/sdk/network/interfaces.ts | 24 ++ src/sdk/network/network.service.ts | 75 ++++++ src/sdk/network/utils/index.ts | 2 + .../network/utils/network-name-to-chain-id.ts | 7 + src/sdk/network/utils/prepare-network-name.ts | 23 ++ src/{ => sdk}/sdk.ts | 16 +- src/sdk/sdk1.ts | 214 ++++++++++++++++ src/sdk/session/__mocks__/session.service.ts | 6 + src/sdk/session/classes/index.ts | 1 + src/sdk/session/classes/session.ts | 54 +++++ src/sdk/session/index.ts | 4 + src/sdk/session/interfaces.ts | 15 ++ src/sdk/session/session.service.ts | 130 ++++++++++ src/sdk/session/session.storage.ts | 13 + .../session/utils/create-session-message.ts | 12 + src/sdk/session/utils/index.ts | 1 + src/sdk/state/classes/index.ts | 1 + src/sdk/state/classes/state.ts | 14 ++ src/sdk/state/index.ts | 3 + src/sdk/state/interfaces.ts | 13 + src/sdk/state/state.service.ts | 158 ++++++++++++ src/sdk/wallet/index.ts | 3 + src/sdk/wallet/interfaces.ts | 9 + .../providers/dynamic.wallet-provider.ts | 33 +++ src/sdk/wallet/providers/index.ts | 8 + src/sdk/wallet/providers/interfaces.ts | 41 ++++ .../wallet/providers/key.wallet-provider.ts | 35 +++ .../providers/meta-mask.wallet-provider.ts | 97 ++++++++ src/sdk/wallet/providers/utils/index.ts | 1 + .../providers/utils/is-wallet-provider.ts | 27 +++ .../wallet-connect.wallet-provider.ts | 68 ++++++ .../wallet/providers/web3.wallet-provider.ts | 99 ++++++++ .../providers/web3eip1193.wallet-provider.ts | 72 ++++++ src/sdk/wallet/wallet.service.ts | 114 +++++++++ tsconfig.json | 10 +- 364 files changed, 3026 insertions(+), 57 deletions(-) create mode 100644 src/browser-polyfill.ts create mode 100644 src/browser.ts delete mode 100644 src/common/index.ts create mode 100644 src/node-polyfill.ts create mode 100644 src/node.ts create mode 100644 src/sdk/account/__mocks__/account.service.ts create mode 100644 src/sdk/account/account.service.ts create mode 100644 src/sdk/account/classes/account.ts create mode 100644 src/sdk/account/classes/index.ts create mode 100644 src/sdk/account/constants.ts create mode 100644 src/sdk/account/index.ts rename src/{ => sdk}/base/BLSAccountAPI.ts (98%) rename src/{ => sdk}/base/BaseAccountAPI.ts (65%) rename src/{ => sdk}/base/ClientConfig.ts (100%) rename src/{ => sdk}/base/DeterministicDeployer.ts (100%) rename src/{ => sdk}/base/ERC4337EthersProvider.ts (100%) rename src/{ => sdk}/base/ERC4337EthersSigner.ts (100%) rename src/{ => sdk}/base/EtherspotWalletAPI.ts (85%) rename src/{ => sdk}/base/EtherspotWalletFactory.ts (93%) rename src/{ => sdk}/base/HttpRpcClient.ts (100%) rename src/{ => sdk}/base/PaymasterAPI.ts (100%) rename src/{ => sdk}/base/Provider.ts (100%) rename src/{ => sdk}/base/TransactionDetailsForUserOp.ts (100%) rename src/{ => sdk}/base/UserOperationEventListener.ts (100%) rename src/{ => sdk}/base/VerifyingPaymasterAPI.ts (100%) rename src/{ => sdk}/base/calcPreVerificationGas.ts (100%) rename src/{ => sdk}/base/index.ts (92%) rename src/{ => sdk}/common/ERC4337Utils.ts (100%) rename src/{ => sdk}/common/OperationUtils.ts (100%) create mode 100644 src/sdk/common/classes/base-class.ts create mode 100644 src/sdk/common/classes/index.ts create mode 100644 src/sdk/common/classes/synchronized.ts create mode 100644 src/sdk/common/constants.ts create mode 100644 src/sdk/common/exceptions/exception.ts create mode 100644 src/sdk/common/exceptions/index.ts create mode 100644 src/sdk/common/exceptions/interfaces.ts create mode 100644 src/sdk/common/exceptions/validation.exception.ts rename src/{ => sdk}/common/getGasFee.ts (100%) create mode 100644 src/sdk/common/index.ts create mode 100644 src/sdk/common/interfaces.ts create mode 100644 src/sdk/common/rxjs/distinct-unique-key.operator.ts create mode 100644 src/sdk/common/rxjs/error.subject.ts create mode 100644 src/sdk/common/rxjs/index.ts create mode 100644 src/sdk/common/rxjs/object.subject.ts create mode 100644 src/sdk/common/rxjs/synchronized.subject.ts create mode 100644 src/sdk/common/rxjs/unique.subject.ts create mode 100644 src/sdk/common/service.ts create mode 100644 src/sdk/common/utils/addresses-equal.ts create mode 100644 src/sdk/common/utils/concat-hex.ts create mode 100644 src/sdk/common/utils/deep-compare.spec.ts create mode 100644 src/sdk/common/utils/deep-compare.ts create mode 100644 src/sdk/common/utils/index.ts create mode 100644 src/sdk/common/utils/is-address.ts create mode 100644 src/sdk/common/utils/is-big-number.ts create mode 100644 src/sdk/common/utils/is-hex.ts create mode 100644 src/sdk/common/utils/is-url.ts create mode 100644 src/sdk/common/utils/keccak256.ts create mode 100644 src/sdk/common/utils/parse-json.ts create mode 100644 src/sdk/common/utils/prepare-address.ts create mode 100644 src/sdk/common/utils/prepare-addresses.ts create mode 100644 src/sdk/common/utils/random-private-key.ts create mode 100644 src/sdk/common/utils/sleep.ts create mode 100644 src/sdk/common/utils/stringify-json.ts create mode 100644 src/sdk/common/utils/to-hex.ts create mode 100644 src/sdk/context.ts rename src/{ => sdk}/contracts/@openzeppelin/contracts/access/Ownable.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/access/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/Proxy.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/beacon/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/proxy/utils/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC1155/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC20/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC721/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/ERC777/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/token/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/utils/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/contracts/utils/introspection/index.ts (100%) rename src/{ => sdk}/contracts/@openzeppelin/index.ts (100%) rename src/{ => sdk}/contracts/common.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/access/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/token/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/utils/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts (100%) rename src/{ => sdk}/contracts/factories/@openzeppelin/index.ts (100%) rename src/{ => sdk}/contracts/factories/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/bls/lib/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/callback/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/StakeManager__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/core/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/IOracle__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/samples/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestCounter__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestOracle__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestToken__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestUtil__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/aa-4337/test/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/access/Guarded__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/access/Owned__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/access/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/helpers/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/interfaces/IWhitelist__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/paymaster/Whitelist__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/paymaster/index.ts (100%) rename src/{ => sdk}/contracts/factories/src/wallet/AccountFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/wallet/EtherspotWallet__factory.ts (100%) rename src/{ => sdk}/contracts/factories/src/wallet/index.ts (100%) rename src/{ => sdk}/contracts/index.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts (100%) rename src/{ => sdk}/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/BLSAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/BLSAccountFactory.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/IBLSAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/BLSOpen.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/bls/lib/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/callback/TokenCallbackHandler.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/callback/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/BaseAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/BasePaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/EntryPoint.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/SenderCreator.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/StakeManager.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/core/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IAggregator.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IEntryPoint.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/IStakeManager.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/DepositPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/IOracle.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/TestAggregatedAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/TokenPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/VerifyingPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/samples/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/MaliciousAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestAggregatedAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestCounter.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestExpirePaymaster.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestExpiryAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestHelpers.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestOracle.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestRevertAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestSignatureAggregator.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestToken.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestUtil.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/TestWarmColdAccount.ts (100%) rename src/{ => sdk}/contracts/src/aa-4337/test/index.ts (100%) rename src/{ => sdk}/contracts/src/access/Guarded.ts (100%) rename src/{ => sdk}/contracts/src/access/Owned.ts (100%) rename src/{ => sdk}/contracts/src/access/index.ts (100%) rename src/{ => sdk}/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts (100%) rename src/{ => sdk}/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts (100%) rename src/{ => sdk}/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts (100%) rename src/{ => sdk}/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts (100%) rename src/{ => sdk}/contracts/src/helpers/index.ts (100%) rename src/{ => sdk}/contracts/src/index.ts (100%) rename src/{ => sdk}/contracts/src/interfaces/IEtherspotPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/interfaces/IEtherspotWallet.ts (100%) rename src/{ => sdk}/contracts/src/interfaces/IWhitelist.ts (100%) rename src/{ => sdk}/contracts/src/interfaces/index.ts (100%) rename src/{ => sdk}/contracts/src/paymaster/EtherspotPaymaster.ts (100%) rename src/{ => sdk}/contracts/src/paymaster/Whitelist.ts (100%) rename src/{ => sdk}/contracts/src/paymaster/index.ts (100%) rename src/{ => sdk}/contracts/src/wallet/AccountFactory.ts (100%) rename src/{ => sdk}/contracts/src/wallet/EtherspotWallet.ts (100%) rename src/{ => sdk}/contracts/src/wallet/EtherspotWalletFactory.ts (100%) rename src/{ => sdk}/contracts/src/wallet/index.ts (100%) create mode 100644 src/sdk/dto/create-session.dto.ts create mode 100644 src/sdk/dto/index.ts create mode 100644 src/sdk/dto/sign-message.dto.ts create mode 100644 src/sdk/dto/utils/index.ts create mode 100644 src/sdk/dto/utils/validate-dto.ts create mode 100644 src/sdk/dto/validators/index.ts create mode 100644 src/sdk/dto/validators/is-address.validator.ts create mode 100644 src/sdk/dto/validators/is-big-numberish.validator.ts create mode 100644 src/sdk/dto/validators/is-bytes-like.validator.ts create mode 100644 src/sdk/dto/validators/is-hex.validator.ts create mode 100644 src/sdk/dto/validators/is-hex32.validator.ts create mode 100644 src/sdk/dto/validators/is-url.validator.ts create mode 100644 src/sdk/env/constants.ts create mode 100644 src/sdk/env/env.ts create mode 100644 src/sdk/env/index.ts create mode 100644 src/sdk/env/interfaces.ts rename src/{ => sdk}/helpers/abi/ERC20_ABI.ts (100%) rename src/{ => sdk}/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts (100%) create mode 100644 src/sdk/index.ts create mode 100644 src/sdk/interfaces.ts create mode 100644 src/sdk/network/__mocks__/network.service.ts create mode 100644 src/sdk/network/constants.ts create mode 100644 src/sdk/network/index.ts create mode 100644 src/sdk/network/interfaces.ts create mode 100644 src/sdk/network/network.service.ts create mode 100644 src/sdk/network/utils/index.ts create mode 100644 src/sdk/network/utils/network-name-to-chain-id.ts create mode 100644 src/sdk/network/utils/prepare-network-name.ts rename src/{ => sdk}/sdk.ts (96%) create mode 100644 src/sdk/sdk1.ts create mode 100644 src/sdk/session/__mocks__/session.service.ts create mode 100644 src/sdk/session/classes/index.ts create mode 100644 src/sdk/session/classes/session.ts create mode 100644 src/sdk/session/index.ts create mode 100644 src/sdk/session/interfaces.ts create mode 100644 src/sdk/session/session.service.ts create mode 100644 src/sdk/session/session.storage.ts create mode 100644 src/sdk/session/utils/create-session-message.ts create mode 100644 src/sdk/session/utils/index.ts create mode 100644 src/sdk/state/classes/index.ts create mode 100644 src/sdk/state/classes/state.ts create mode 100644 src/sdk/state/index.ts create mode 100644 src/sdk/state/interfaces.ts create mode 100644 src/sdk/state/state.service.ts create mode 100644 src/sdk/wallet/index.ts create mode 100644 src/sdk/wallet/interfaces.ts create mode 100644 src/sdk/wallet/providers/dynamic.wallet-provider.ts create mode 100644 src/sdk/wallet/providers/index.ts create mode 100644 src/sdk/wallet/providers/interfaces.ts create mode 100644 src/sdk/wallet/providers/key.wallet-provider.ts create mode 100644 src/sdk/wallet/providers/meta-mask.wallet-provider.ts create mode 100644 src/sdk/wallet/providers/utils/index.ts create mode 100644 src/sdk/wallet/providers/utils/is-wallet-provider.ts create mode 100644 src/sdk/wallet/providers/wallet-connect.wallet-provider.ts create mode 100644 src/sdk/wallet/providers/web3.wallet-provider.ts create mode 100644 src/sdk/wallet/providers/web3eip1193.wallet-provider.ts create mode 100644 src/sdk/wallet/wallet.service.ts diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 864189ee..47ec36d9 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,49 +1,43 @@ -import { BigNumberish } from 'ethers'; -import { LiteSdk } from '../src'; -import { NetworkNames, getNetworkConfig } from './config'; +import { ethers } from 'ethers'; +import { NetworkNames } from '../src/sdk/network/constants'; +import { Sdk } from '../src'; + +import { getNetworkConfig } from './config'; +import { EnvNames } from '../src/sdk/env'; // add/change these values const config = getNetworkConfig(NetworkNames.Mumbai); -const recipient: string = ''; // recipient wallet address -const value: string = ''; // transfer value +const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address +const value: string = '1.5'; // transfer value async function main() { // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - undefined, - ); + const sdk1 = new Sdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + + console.log('address: ', sdk1.state.walletAddress) // get address of EtherspotWallet... - const address: string = await sdk.getCounterFactualAddress(); + const address: string = await sdk1.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); // transfer some native tokens to the EtherspotWallet (if required)... - const prefunded: string = await sdk.prefundIfRequired((+value + 0.01).toString()); + const prefunded: string = await sdk1.prefundIfRequired((+value + 0.01).toString(), '0x0998B0b3CdED25564a8d2e531D93E666FB21E99d'); console.log('\x1b[33m%s\x1b[0m', prefunded); - // parse transfer value to correct format - const parseValue: BigNumberish = sdk.formatAmount(value); - // creating and signing userOp... - const userOp = await sdk.sign({ + const userOp = await sdk1.sign({ target: recipient, // recipient - value: parseValue, // amount of native asset to send, + value: ethers.utils.parseEther(value), // amount of native asset to send, data: '0x', // calldata is empty since we just want to transfer ether }); // sending to the bundler... - const uoHash = await sdk.send(userOp); + const uoHash = await sdk1.send(userOp); console.log(`UserOpHash: ${uoHash}`); // get transaction hash... console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(uoHash); + const txHash = await sdk1.getUserOpReceipt(uoHash); console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } diff --git a/package-lock.json b/package-lock.json index 7b4b7787..0403f212 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,10 @@ "dependencies": { "@thehubbleproject/bls": "^0.5.1", "axios": "^1.3.4", - "ethers": "^5.7.0" + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "ethers": "^5.7.0", + "reflect-metadata": "^0.1.13" }, "devDependencies": { "@types/node": "13.13.9", @@ -759,6 +762,11 @@ "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", "dev": true }, + "node_modules/@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "2.34.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", @@ -1070,6 +1078,21 @@ "dev": true, "peer": true }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -2007,6 +2030,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.10.30", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.30.tgz", + "integrity": "sha512-PLGc+xfrQrkya/YK2/5X+bPpxRmyJBHM+xxz9krUdSgk4Vs2ZwxX5/Ow0lv3r9PDlDtNWb4u+it8MY5rZ0IyGw==" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -5223,6 +5251,11 @@ "node": ">=6" } }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -5654,6 +5687,14 @@ "dev": true, "peer": true }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -6160,6 +6201,11 @@ "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", "dev": true }, + "@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==" + }, "@typescript-eslint/eslint-plugin": { "version": "2.34.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", @@ -6381,6 +6427,21 @@ "dev": true, "peer": true }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "requires": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -7114,6 +7175,11 @@ "type-check": "~0.3.2" } }, + "libphonenumber-js": { + "version": "1.10.30", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.30.tgz", + "integrity": "sha512-PLGc+xfrQrkya/YK2/5X+bPpxRmyJBHM+xxz9krUdSgk4Vs2ZwxX5/Ow0lv3r9PDlDtNWb4u+it8MY5rZ0IyGw==" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -9336,6 +9402,11 @@ "dev": true, "peer": true }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -9667,6 +9738,11 @@ "dev": true, "peer": true }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/package.json b/package.json index 75927592..ab0eb837 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,10 @@ "dependencies": { "@thehubbleproject/bls": "^0.5.1", "axios": "^1.3.4", - "ethers": "^5.7.0" + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "ethers": "^5.7.0", + "reflect-metadata": "^0.1.13" }, "devDependencies": { "@types/node": "13.13.9", diff --git a/src/browser-polyfill.ts b/src/browser-polyfill.ts new file mode 100644 index 00000000..8337712e --- /dev/null +++ b/src/browser-polyfill.ts @@ -0,0 +1 @@ +// diff --git a/src/browser.ts b/src/browser.ts new file mode 100644 index 00000000..020cf85f --- /dev/null +++ b/src/browser.ts @@ -0,0 +1,4 @@ +import 'reflect-metadata'; +import './browser-polyfill'; + +export * from './sdk'; diff --git a/src/common/index.ts b/src/common/index.ts deleted file mode 100644 index b5af8125..00000000 --- a/src/common/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ERC4337Utils'; -export * from './getGasFee'; diff --git a/src/index.ts b/src/index.ts index fc1bbd5d..d0dddb69 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1 @@ -export { LiteSdk } from './sdk'; +export * from './node'; diff --git a/src/node-polyfill.ts b/src/node-polyfill.ts new file mode 100644 index 00000000..cb558263 --- /dev/null +++ b/src/node-polyfill.ts @@ -0,0 +1,16 @@ +/** + * @ignore + */ +let WebSocketConstructor: { new (endpoint: string): WebSocket } = null; + +try { + if (typeof WebSocket !== 'undefined') { + WebSocketConstructor = WebSocket; + } else { + WebSocketConstructor = require('ws'); + } +} catch (err) { + throw new Error('WebSocket not found. Please install `ws` for node.js'); +} + +(global as any).WebSocket = WebSocketConstructor; diff --git a/src/node.ts b/src/node.ts new file mode 100644 index 00000000..ab5e53b4 --- /dev/null +++ b/src/node.ts @@ -0,0 +1,4 @@ +import 'reflect-metadata'; +import './node-polyfill'; + +export * from './sdk'; diff --git a/src/sdk/account/__mocks__/account.service.ts b/src/sdk/account/__mocks__/account.service.ts new file mode 100644 index 00000000..b5a01246 --- /dev/null +++ b/src/sdk/account/__mocks__/account.service.ts @@ -0,0 +1,35 @@ +import { mockService } from '../../../testing'; +import { SynchronizedSubject } from '../../common'; +import { Account, AccountMember } from '../classes'; + +const account$ = new SynchronizedSubject(); +const accountMember$ = new SynchronizedSubject(); +const accountAddress$ = account$.observeKey('address'); + +const mocked = { + account$, + accountMember$, + accountAddress$, + computeContractAccount: jest.fn(), + joinContractAccount: jest.fn(), + syncAccount: jest.fn(), + getConnectedAccounts: jest.fn(), + getAccount: jest.fn(), + getAccountBalances: jest.fn(), + getAccountMembers: jest.fn(), + getAccountInvestments: jest.fn(), +}; + +Object.defineProperty(mocked, 'account', { + get: jest.fn(() => account$.value), +}); + +Object.defineProperty(mocked, 'accountMember', { + get: jest.fn(() => accountMember$.value), +}); + +Object.defineProperty(mocked, 'accountAddress', { + get: jest.fn(() => account$?.value?.address), +}); + +export const AccountService = mockService(mocked); diff --git a/src/sdk/account/account.service.ts b/src/sdk/account/account.service.ts new file mode 100644 index 00000000..7bdb5b48 --- /dev/null +++ b/src/sdk/account/account.service.ts @@ -0,0 +1,72 @@ +import { Observable, combineLatest } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { HeaderNames, Service, SynchronizedSubject, keccak256 } from '../common'; +import { + Account, +} from './classes'; +import { AccountTypes } from './constants'; + +export class AccountService extends Service { + readonly account$ = new SynchronizedSubject(); + readonly accountAddress$: Observable; + + constructor() { + super(); + + this.accountAddress$ = this.account$.observeKey('address'); + } + + get account(): Account { + return this.account$.value; + } + + get accountAddress(): string { + return this.account ? this.account.address : null; + } + + get headers(): { [key: string]: any } { + return this.accountAddress + ? { + [HeaderNames.AnalyticsToken]: keccak256(this.accountAddress), + } + : {}; + } + + joinContractAccount(address: string): void { + this.account$.next( + Account.fromPlain({ + address, + type: AccountTypes.Contract, + synchronizedAt: null, + }), + ); + + } + + isContractAccount(): boolean { + return this.account.type === AccountTypes.Contract; + } + + protected onInit(): void { + const { walletService, networkService } = this.services; + + this.addSubscriptions( + combineLatest([ + walletService.walletAddress$, // + networkService.chainId$, + ]) + .pipe( + map(([address, chainId]) => + !address || !chainId + ? null + : Account.fromPlain({ + address, + type: AccountTypes.Key, + synchronizedAt: null, + }), + ), + ) + .subscribe(this.account$), + ); + } +} diff --git a/src/sdk/account/classes/account.ts b/src/sdk/account/classes/account.ts new file mode 100644 index 00000000..53b10c4e --- /dev/null +++ b/src/sdk/account/classes/account.ts @@ -0,0 +1,22 @@ +import { plainToClass } from 'class-transformer'; +import { Type } from 'class-transformer'; +import { Synchronized } from '../../common'; +import { AccountTypes, AccountStates } from '../constants'; + +export class Account extends Synchronized { + static fromPlain(plain: Partial): Account { + return plainToClass(Account, plain); + } + + address: string; + + type: AccountTypes; + + state: AccountStates; + + @Type(() => Date) + createdAt: Date; + + @Type(() => Date) + updatedAt: Date; +} diff --git a/src/sdk/account/classes/index.ts b/src/sdk/account/classes/index.ts new file mode 100644 index 00000000..8cf3132b --- /dev/null +++ b/src/sdk/account/classes/index.ts @@ -0,0 +1 @@ +export * from './account'; \ No newline at end of file diff --git a/src/sdk/account/constants.ts b/src/sdk/account/constants.ts new file mode 100644 index 00000000..6081a75d --- /dev/null +++ b/src/sdk/account/constants.ts @@ -0,0 +1,9 @@ +export enum AccountTypes { + Contract = 'Contract', + Key = 'Key', +} + +export enum AccountStates { + UnDeployed = 'UnDeployed', + Deployed = 'Deployed', +} diff --git a/src/sdk/account/index.ts b/src/sdk/account/index.ts new file mode 100644 index 00000000..84a653d4 --- /dev/null +++ b/src/sdk/account/index.ts @@ -0,0 +1,3 @@ +export * from './account.service'; +export * from './classes'; +export * from './constants'; diff --git a/src/base/BLSAccountAPI.ts b/src/sdk/base/BLSAccountAPI.ts similarity index 98% rename from src/base/BLSAccountAPI.ts rename to src/sdk/base/BLSAccountAPI.ts index 3001b365..e0472efc 100644 --- a/src/base/BLSAccountAPI.ts +++ b/src/sdk/base/BLSAccountAPI.ts @@ -42,6 +42,7 @@ export class BLSAccountAPI extends BaseAccountAPI { } async _getAccountContract(): Promise { + // const provider = this.services.walletService.getWalletProvider(); if (this.accountContract == null) { this.accountContract = BLSAccount__factory.connect(await this.getAccountAddress(), this.provider); } diff --git a/src/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts similarity index 65% rename from src/base/BaseAccountAPI.ts rename to src/sdk/base/BaseAccountAPI.ts index a0707674..5399f1b1 100644 --- a/src/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -1,12 +1,15 @@ -import { ethers, BigNumber, BigNumberish } from 'ethers'; +import { ethers, BigNumber, BigNumberish, providers } from 'ethers'; +import { BehaviorSubject, Subject } from 'rxjs'; import { Provider } from '@ethersproject/providers'; import { EntryPoint, EntryPoint__factory } from '../contracts'; import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; import { resolveProperties } from 'ethers/lib/utils'; import { PaymasterAPI } from './PaymasterAPI'; -import { getUserOpHash, packUserOp } from '../common'; +import { ErrorSubject, Exception, getUserOpHash, packUserOp, Service } from '../common'; import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; +import { AccountService, AccountTypes, CreateSessionDto, Env, EnvNames, isWalletProvider, Network, NetworkNames, NetworkService, SdkOptions, Session, SessionService, SignMessageDto, State, StateService, validateDto, WalletProviderLike, WalletService } from '..'; +import { Context } from '../context'; export interface BaseApiParams { provider: Provider; @@ -14,6 +17,8 @@ export interface BaseApiParams { accountAddress?: string; overheads?: Partial; paymasterAPI?: PaymasterAPI; + walletProvider: WalletProviderLike, + optionsLike?: SdkOptions } export interface UserOpResult { @@ -38,6 +43,10 @@ export abstract class BaseAccountAPI { private senderAddress!: string; private isPhantom = true; + readonly services: Context['services']; + + context: Context; + // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) protected readonly entryPointView: EntryPoint; @@ -51,7 +60,51 @@ export abstract class BaseAccountAPI { * base constructor. * subclass SHOULD add parameters that define the owner (signer) of this wallet */ - protected constructor(params: BaseApiParams) { + constructor(params: BaseApiParams) { + + const optionsLike = params.optionsLike; + + if (!isWalletProvider(params.walletProvider)) { + throw new Exception('Invalid wallet provider'); + } + + const env = Env.prepare(optionsLike.env); + + const { + networkName, // + omitWalletProviderNetworkCheck, + stateStorage, + sessionStorage, + rpcProviderUrl, + bundlerRpcUrl, + } = optionsLike; + + const { networkOptions } = env; + + let provider; + + if (rpcProviderUrl) { + provider = new providers.JsonRpcProvider(rpcProviderUrl); + } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); + + this.services = { + networkService: new NetworkService(networkOptions, networkName), + walletService: new WalletService(params.walletProvider, { + omitProviderNetworkCheck: omitWalletProviderNetworkCheck, + provider: rpcProviderUrl, + }, optionsLike.bundlerRpcUrl), + sessionService: new SessionService({ + storage: sessionStorage, + }), + accountService: new AccountService(), + stateService: new StateService({ + storage: stateStorage, + }), + }; + + this.context = new Context(this.services); + + // super(); this.provider = params.provider; this.overheads = params.overheads; this.entryPointAddress = params.entryPointAddress; @@ -62,6 +115,153 @@ export abstract class BaseAccountAPI { this.entryPointView = EntryPoint__factory.connect(params.entryPointAddress, params.provider).connect( ethers.constants.AddressZero, ); + + } + + get state(): StateService { + return this.services.stateService; + } + + get state$(): BehaviorSubject { + return this.services.stateService.state$; + } + + get error$(): ErrorSubject { + return this.context.error$; + } + + get supportedNetworks(): Network[] { + return this.services.networkService.supportedNetworks; + } + + // sdk + + /** + * destroys + */ + destroy(): void { + this.context.destroy(); + } + + // wallet + + /** + * signs message + * @param dto + * @return Promise + */ + async signMessage(dto: SignMessageDto): Promise { + const { message } = await validateDto(dto, SignMessageDto); + + await this.require({ + network: false, + }); + + return this.services.walletService.signMessage(message); + } + + // session + + /** + * creates session + * @param dto + * @return Promise + */ + async createSession(dto: CreateSessionDto = {}): Promise { + const { ttl, fcmToken } = await validateDto(dto, CreateSessionDto); + + await this.require(); + + return this.services.sessionService.createSession(ttl, fcmToken); + } + + // async getCounterFactualAddress(): Promise { + // // return this.EtherspotWallet.getCounterFactualAddress(); + // return this.getCounterFactualAddress(); + // } + + + + // private + + + async require( + options: { + network?: boolean; + wallet?: boolean; + session?: boolean; + contractAccount?: boolean; + } = {}, + ): Promise { + options = { + network: true, + wallet: true, + ...options, + }; + + const { accountService, networkService, walletService, sessionService } = this.services; + + if (options.network && !networkService.chainId) { + throw new Exception('Unknown network'); + } + + if (options.wallet && !walletService.walletAddress) { + throw new Exception('Require wallet'); + } + + if (options.session) { + await sessionService.verifySession(); + } + + if (options.contractAccount && (!accountService.account || accountService.account.type !== AccountTypes.Contract)) { + throw new Exception('Require contract account'); + } + } + + prepareAccountAddress(account: string = null): string { + const { + accountService: { accountAddress }, + } = this.services; + return account || accountAddress; + } + + getNetworkChainId(networkName: NetworkNames = null): number { + let result: number; + + if (!networkName) { + ({ chainId: result } = this.services.networkService); + } else { + const network = this.supportedNetworks.find(({ name }) => name === networkName); + + if (!network) { + throw new Exception('Unsupported network'); + } + + ({ chainId: result } = network); + } + + return result; + } + + async validateResolveName( + options: { + network?: number; + name?: string; + } = {}, + ): Promise { + options = { + ...options, + }; + + const { networkService } = this.services; + + if (options.network && !networkService.chainId) { + throw new Exception('Unknown network'); + } + + if (!options.name) { + throw new Exception('Require name'); + } } async init(): Promise { @@ -78,12 +278,12 @@ export abstract class BaseAccountAPI { * return the value to put into the "initCode" field, if the contract is not yet deployed. * this value holds the "factory" address, followed by this account's information */ - abstract getAccountInitCode(): Promise; + protected abstract getAccountInitCode(): Promise; /** * return current account's nonce. */ - abstract getNonce(): Promise; + protected abstract getNonce(): Promise; /** * encode the call from entryPoint through our account to the target contract. @@ -91,15 +291,15 @@ export abstract class BaseAccountAPI { * @param value * @param data */ - abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise; + protected abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise; - abstract encodeBatch(targets: string[], datas: string[]): Promise; + protected abstract encodeBatch(targets: string[], datas: string[]): Promise; /** * sign a userOp's hash (userOpHash). * @param userOpHash */ - abstract signUserOpHash(userOpHash: string): Promise; + protected abstract signUserOpHash(userOpHash: string): Promise; /** * check if the contract is already deployed. @@ -124,6 +324,7 @@ export abstract class BaseAccountAPI { */ async getCounterFactualAddress(): Promise { const initCode = await this.getAccountInitCode(); + // console.log('initCode: ', initCode) // use entryPoint to query account address (factory can provide a helper method to do the same, but // this method attempts to be generic try { @@ -193,6 +394,7 @@ export abstract class BaseAccountAPI { } callData = await this.encodeBatch(target, data); } + // const provider = this.services.walletService.getWalletProvider(); const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? @@ -215,6 +417,7 @@ export abstract class BaseAccountAPI { */ async getUserOpHash(userOp: UserOperationStruct): Promise { const op = await resolveProperties(userOp); + // const provider = this.services.walletService.getWalletProvider(); const chainId = await this.provider.getNetwork().then((net) => net.chainId); return getUserOpHash(op, this.entryPointAddress, chainId); } @@ -238,6 +441,7 @@ export abstract class BaseAccountAPI { if (initCode == null || initCode === '0x') return 0; const deployerAddress = initCode.substring(0, 42); const deployerCallData = '0x' + initCode.substring(42); + // const provider = this.services.walletService.getWalletProvider(); return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); } @@ -256,6 +460,7 @@ export abstract class BaseAccountAPI { let { maxFeePerGas, maxPriorityFeePerGas } = info; if (maxFeePerGas == null || maxPriorityFeePerGas == null) { + // const provider = this.services.walletService.getWalletProvider(); const feeData = await this.provider.getFeeData(); if (maxFeePerGas == null) { maxFeePerGas = feeData.maxFeePerGas ?? undefined; @@ -266,16 +471,19 @@ export abstract class BaseAccountAPI { } const partialUserOp: any = { - sender: this.getAccountAddress(), - nonce: this.getNonce(), + sender: await this.getAccountAddress(), + nonce: await this.getNonce(), initCode, callData, callGasLimit, verificationGasLimit, maxFeePerGas, maxPriorityFeePerGas, + chainId: 80001, }; + // console.log('partialUserOp: ', partialUserOp); + let paymasterAndData: string | undefined; if (this.paymasterAPI != null) { // fill (partial) preVerificationGas (all except the cost of the generated paymasterAndData) diff --git a/src/base/ClientConfig.ts b/src/sdk/base/ClientConfig.ts similarity index 100% rename from src/base/ClientConfig.ts rename to src/sdk/base/ClientConfig.ts diff --git a/src/base/DeterministicDeployer.ts b/src/sdk/base/DeterministicDeployer.ts similarity index 100% rename from src/base/DeterministicDeployer.ts rename to src/sdk/base/DeterministicDeployer.ts diff --git a/src/base/ERC4337EthersProvider.ts b/src/sdk/base/ERC4337EthersProvider.ts similarity index 100% rename from src/base/ERC4337EthersProvider.ts rename to src/sdk/base/ERC4337EthersProvider.ts diff --git a/src/base/ERC4337EthersSigner.ts b/src/sdk/base/ERC4337EthersSigner.ts similarity index 100% rename from src/base/ERC4337EthersSigner.ts rename to src/sdk/base/ERC4337EthersSigner.ts diff --git a/src/base/EtherspotWalletAPI.ts b/src/sdk/base/EtherspotWalletAPI.ts similarity index 85% rename from src/base/EtherspotWalletAPI.ts rename to src/sdk/base/EtherspotWalletAPI.ts index e71deb74..079baedd 100644 --- a/src/base/EtherspotWalletAPI.ts +++ b/src/sdk/base/EtherspotWalletAPI.ts @@ -9,6 +9,7 @@ import { arrayify, hexConcat } from 'ethers/lib/utils'; import { Signer } from '@ethersproject/abstract-signer'; import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI'; import { PaymasterAPI } from './PaymasterAPI'; +import { Service } from '../common'; /** * constructor params, added no top of base params: @@ -31,7 +32,7 @@ export interface EtherspotWalletApiParams extends BaseApiParams { */ export class EtherspotWalletAPI extends BaseAccountAPI { factoryAddress?: string; - owner: Signer; + // owner: Signer; index: number; /** @@ -43,10 +44,13 @@ export class EtherspotWalletAPI extends BaseAccountAPI { factory?: EtherspotWalletFactory; constructor(params: EtherspotWalletApiParams) { + console.log('params: ', params) super(params); this.factoryAddress = params.factoryAddress; - this.owner = params.owner; + // this.owner = params.owner; this.index = params.index ?? 0; + + // console.log(this.services.walletService) } async _getAccountContract(): Promise { @@ -61,6 +65,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { * this value holds the "factory" address, followed by this account's information */ async getAccountInitCode(): Promise { + console.log('factoryAddress', this.factoryAddress, this.provider) if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== '') { this.factory = EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider); @@ -71,8 +76,8 @@ export class EtherspotWalletAPI extends BaseAccountAPI { return hexConcat([ this.factory.address, this.factory.interface.encodeFunctionData('createAccount', [ - await this.entryPointAddress, - await this.owner.getAddress(), + this.entryPointAddress, + this.services.walletService.walletAddress, this.index, ]), ]); @@ -99,7 +104,10 @@ export class EtherspotWalletAPI extends BaseAccountAPI { } async signUserOpHash(userOpHash: string): Promise { - return await this.owner.signMessage(arrayify(userOpHash)); + // return await this.owner.signMessage(arrayify(userOpHash)); + // console.log('sign: ', await this.services.walletService.signMessage(arrayify(userOpHash)), await this.owner.signMessage(arrayify(userOpHash))) + return await this.services.walletService.signMessage(arrayify(userOpHash)); + } async updateEntryPoint(newEntryPoint: string) { diff --git a/src/base/EtherspotWalletFactory.ts b/src/sdk/base/EtherspotWalletFactory.ts similarity index 93% rename from src/base/EtherspotWalletFactory.ts rename to src/sdk/base/EtherspotWalletFactory.ts index fd9d010e..1f39cd05 100644 --- a/src/base/EtherspotWalletFactory.ts +++ b/src/sdk/base/EtherspotWalletFactory.ts @@ -1,5 +1,5 @@ import { Contract } from 'ethers'; -import { IEntryPoint } from 'src/contracts'; +import { IEntryPoint } from '../contracts'; export class EtherspotWalletFactoryAPI { static createAccount( diff --git a/src/base/HttpRpcClient.ts b/src/sdk/base/HttpRpcClient.ts similarity index 100% rename from src/base/HttpRpcClient.ts rename to src/sdk/base/HttpRpcClient.ts diff --git a/src/base/PaymasterAPI.ts b/src/sdk/base/PaymasterAPI.ts similarity index 100% rename from src/base/PaymasterAPI.ts rename to src/sdk/base/PaymasterAPI.ts diff --git a/src/base/Provider.ts b/src/sdk/base/Provider.ts similarity index 100% rename from src/base/Provider.ts rename to src/sdk/base/Provider.ts diff --git a/src/base/TransactionDetailsForUserOp.ts b/src/sdk/base/TransactionDetailsForUserOp.ts similarity index 100% rename from src/base/TransactionDetailsForUserOp.ts rename to src/sdk/base/TransactionDetailsForUserOp.ts diff --git a/src/base/UserOperationEventListener.ts b/src/sdk/base/UserOperationEventListener.ts similarity index 100% rename from src/base/UserOperationEventListener.ts rename to src/sdk/base/UserOperationEventListener.ts diff --git a/src/base/VerifyingPaymasterAPI.ts b/src/sdk/base/VerifyingPaymasterAPI.ts similarity index 100% rename from src/base/VerifyingPaymasterAPI.ts rename to src/sdk/base/VerifyingPaymasterAPI.ts diff --git a/src/base/calcPreVerificationGas.ts b/src/sdk/base/calcPreVerificationGas.ts similarity index 100% rename from src/base/calcPreVerificationGas.ts rename to src/sdk/base/calcPreVerificationGas.ts diff --git a/src/base/index.ts b/src/sdk/base/index.ts similarity index 92% rename from src/base/index.ts rename to src/sdk/base/index.ts index 84bf3df6..dcd4773e 100644 --- a/src/base/index.ts +++ b/src/sdk/base/index.ts @@ -1,6 +1,6 @@ export { EtherspotWalletAPI } from './EtherspotWalletAPI'; export { PaymasterAPI } from './PaymasterAPI'; -export { wrapProvider } from './Provider'; +// export { wrapProvider } from './Provider'; export { ERC4337EthersSigner } from './ERC4337EthersSigner'; export { ERC4337EthersProvider } from './ERC4337EthersProvider'; export { ClientConfig } from './ClientConfig'; diff --git a/src/common/ERC4337Utils.ts b/src/sdk/common/ERC4337Utils.ts similarity index 100% rename from src/common/ERC4337Utils.ts rename to src/sdk/common/ERC4337Utils.ts diff --git a/src/common/OperationUtils.ts b/src/sdk/common/OperationUtils.ts similarity index 100% rename from src/common/OperationUtils.ts rename to src/sdk/common/OperationUtils.ts diff --git a/src/sdk/common/classes/base-class.ts b/src/sdk/common/classes/base-class.ts new file mode 100644 index 00000000..689382e0 --- /dev/null +++ b/src/sdk/common/classes/base-class.ts @@ -0,0 +1,10 @@ +/** + * @ignore + */ +export class BaseClass { + constructor(raw?: Partial) { + if (raw) { + Object.assign(this, raw); + } + } +} diff --git a/src/sdk/common/classes/index.ts b/src/sdk/common/classes/index.ts new file mode 100644 index 00000000..672510e1 --- /dev/null +++ b/src/sdk/common/classes/index.ts @@ -0,0 +1,2 @@ +export * from './synchronized'; +export * from './base-class'; \ No newline at end of file diff --git a/src/sdk/common/classes/synchronized.ts b/src/sdk/common/classes/synchronized.ts new file mode 100644 index 00000000..b2c1298b --- /dev/null +++ b/src/sdk/common/classes/synchronized.ts @@ -0,0 +1,6 @@ +/** + * @ignore + */ +export abstract class Synchronized { + synchronizedAt?: Date; +} diff --git a/src/sdk/common/constants.ts b/src/sdk/common/constants.ts new file mode 100644 index 00000000..c335b241 --- /dev/null +++ b/src/sdk/common/constants.ts @@ -0,0 +1,9 @@ +/** + * @ignore + */ +export enum HeaderNames { + AuthToken = 'x-auth-token', + AnalyticsToken = 'x-analytics-token', + ProjectKey = 'x-project-key', + ProjectMetadata = 'x-project-metadata', +} diff --git a/src/sdk/common/exceptions/exception.ts b/src/sdk/common/exceptions/exception.ts new file mode 100644 index 00000000..4a077995 --- /dev/null +++ b/src/sdk/common/exceptions/exception.ts @@ -0,0 +1,3 @@ +export class Exception extends Error { + // +} diff --git a/src/sdk/common/exceptions/index.ts b/src/sdk/common/exceptions/index.ts new file mode 100644 index 00000000..657f981c --- /dev/null +++ b/src/sdk/common/exceptions/index.ts @@ -0,0 +1,3 @@ +export * from './exception'; +export * from './interfaces'; +export * from './validation.exception'; diff --git a/src/sdk/common/exceptions/interfaces.ts b/src/sdk/common/exceptions/interfaces.ts new file mode 100644 index 00000000..bbce55f5 --- /dev/null +++ b/src/sdk/common/exceptions/interfaces.ts @@ -0,0 +1,8 @@ +export interface ValidationError { + property: string; + value?: any; + constraints?: { + [type: string]: string; + }; + children?: ValidationError[]; +} diff --git a/src/sdk/common/exceptions/validation.exception.ts b/src/sdk/common/exceptions/validation.exception.ts new file mode 100644 index 00000000..77b70fe9 --- /dev/null +++ b/src/sdk/common/exceptions/validation.exception.ts @@ -0,0 +1,17 @@ +import { Exception } from './exception'; +import { ValidationError } from './interfaces'; + +export class ValidationException extends Exception { + static throw(property: string, constraints: { [key: string]: string }) { + const validationError: ValidationError = { + property, + constraints, + }; + + throw new ValidationException([validationError]); + } + + constructor(public errors: ValidationError[]) { + super(JSON.stringify(errors, null, 2)); + } +} diff --git a/src/common/getGasFee.ts b/src/sdk/common/getGasFee.ts similarity index 100% rename from src/common/getGasFee.ts rename to src/sdk/common/getGasFee.ts diff --git a/src/sdk/common/index.ts b/src/sdk/common/index.ts new file mode 100644 index 00000000..f152025e --- /dev/null +++ b/src/sdk/common/index.ts @@ -0,0 +1,9 @@ +export * from './ERC4337Utils'; +export * from './getGasFee'; +export * from './service'; +export * from './rxjs'; +export * from './utils'; +export * from './classes'; +export * from './exceptions'; +export * from './constants'; +export * from './interfaces'; diff --git a/src/sdk/common/interfaces.ts b/src/sdk/common/interfaces.ts new file mode 100644 index 00000000..72774e45 --- /dev/null +++ b/src/sdk/common/interfaces.ts @@ -0,0 +1,4 @@ +export interface TransactionRequest { + to: string; + data: string; +} diff --git a/src/sdk/common/rxjs/distinct-unique-key.operator.ts b/src/sdk/common/rxjs/distinct-unique-key.operator.ts new file mode 100644 index 00000000..fe30a5f5 --- /dev/null +++ b/src/sdk/common/rxjs/distinct-unique-key.operator.ts @@ -0,0 +1,17 @@ +import { OperatorFunction } from 'rxjs'; +import { distinctUntilKeyChanged, pluck, map } from 'rxjs/operators'; +import { deepCompare } from '../utils'; + +/** + * @ignore + */ +export function distinctUniqueKey(key: K): OperatorFunction { + return (input$) => + input$.pipe( + map((value) => { + return (value ? value : { [key]: null }) as T; + }), + distinctUntilKeyChanged(key, deepCompare), + pluck(key), + ); +} diff --git a/src/sdk/common/rxjs/error.subject.ts b/src/sdk/common/rxjs/error.subject.ts new file mode 100644 index 00000000..39201e71 --- /dev/null +++ b/src/sdk/common/rxjs/error.subject.ts @@ -0,0 +1,65 @@ +import { Subject } from 'rxjs'; + +/** + * @ignore + */ +export class ErrorSubject extends Subject { + complete(): void { + // + } + + next(value?: any): void { + if (value) { + super.next(value); + } + } + + wrap(func: () => T): T { + let result: any; + + try { + result = func(); + + if (result instanceof Promise) { + result = result.catch((err) => { + this.next(err); + return null; + }); + } + } catch (err) { + this.next(err); + result = null; + } + + return result; + } + + catch(func: () => T, onComplete?: () => any): void { + const fireOnComplete = () => { + if (onComplete) { + onComplete(); + onComplete = null; + } + }; + + try { + const promise = func(); + + if (promise instanceof Promise) { + promise + .catch((err) => { + this.next(err); + }) + .finally(() => { + fireOnComplete(); + }); + return; + } + + fireOnComplete(); + } catch (err) { + this.next(err); + fireOnComplete(); + } + } +} diff --git a/src/sdk/common/rxjs/index.ts b/src/sdk/common/rxjs/index.ts new file mode 100644 index 00000000..309739fb --- /dev/null +++ b/src/sdk/common/rxjs/index.ts @@ -0,0 +1,5 @@ +export * from './distinct-unique-key.operator'; +export * from './object.subject'; +export * from './error.subject'; +export * from './synchronized.subject'; +export * from './unique.subject'; \ No newline at end of file diff --git a/src/sdk/common/rxjs/object.subject.ts b/src/sdk/common/rxjs/object.subject.ts new file mode 100644 index 00000000..94dfb5a9 --- /dev/null +++ b/src/sdk/common/rxjs/object.subject.ts @@ -0,0 +1,35 @@ +import { Observable, BehaviorSubject } from 'rxjs'; +import { deepCompare } from '../utils'; +import { distinctUniqueKey } from './distinct-unique-key.operator'; + +/** + * @ignore + */ +export class ObjectSubject extends BehaviorSubject { + constructor(value: T = null) { + super(value); + } + + observeKey(key: K): Observable { + return this.pipe(distinctUniqueKey(key)); + } + + next(value: T): void { + if (!value) { + super.next(null); + } else if ( + !this.value || // + !deepCompare(this.prepareForCompare(this.value), this.prepareForCompare(value)) + ) { + super.next(this.prepareForNext(value)); + } + } + + prepareForNext(value: T): T { + return value; + } + + prepareForCompare(value: T): any { + return value; + } +} diff --git a/src/sdk/common/rxjs/synchronized.subject.ts b/src/sdk/common/rxjs/synchronized.subject.ts new file mode 100644 index 00000000..e71e7d6d --- /dev/null +++ b/src/sdk/common/rxjs/synchronized.subject.ts @@ -0,0 +1,21 @@ +import { Synchronized } from '../classes'; +import { ObjectSubject } from './object.subject'; + +/** + * @ignore + */ +export class SynchronizedSubject extends ObjectSubject { + prepareForCompare(value: T): any { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { synchronizedAt, ...data } = value; + return data; + } + + prepareForNext(value: T): T { + if (value !== null && value.synchronizedAt !== null) { + value.synchronizedAt = new Date(); + } + + return value; + } +} diff --git a/src/sdk/common/rxjs/unique.subject.ts b/src/sdk/common/rxjs/unique.subject.ts new file mode 100644 index 00000000..dd2662e4 --- /dev/null +++ b/src/sdk/common/rxjs/unique.subject.ts @@ -0,0 +1,17 @@ +import { BehaviorSubject } from 'rxjs'; +import { deepCompare } from '../utils'; + +/** + * @ignore + */ +export class UniqueSubject extends BehaviorSubject { + constructor(value: T = null) { + super(value); + } + + next(value: T): void { + if (!deepCompare(this.value, value)) { + super.next(value); + } + } +} diff --git a/src/sdk/common/service.ts b/src/sdk/common/service.ts new file mode 100644 index 00000000..fb56bdbd --- /dev/null +++ b/src/sdk/common/service.ts @@ -0,0 +1,74 @@ +import { Subscription } from 'rxjs'; +import { EtherspotWalletAPI } from '../base'; +import { Context } from '../context'; + +export abstract class Service { + protected context: Context; + private inited = false; + private destroyed = false; + private attachedCounter = 0; + private subscriptions: Subscription[] = []; + + init(context: Context): void { + if (!this.inited) { + this.inited = true; + this.context = context; + + if (this.onInit) { + this.onInit(); + } + + if (this.error$) { + this.addSubscriptions(this.error$.subscribe()); + } + } + + ++this.attachedCounter; + } + + destroy(): void { + if (!this.attachedCounter) { + return; + } + + --this.attachedCounter; + + if (!this.attachedCounter && !this.destroyed) { + this.destroyed = true; + + this.removeSubscriptions(); + + if (this.onDestroy) { + this.onDestroy(); + } + } + } + + protected onInit?(): void; + + protected onDestroy?(): void; + + protected get error$(): Context['error$'] { + return this.context.error$; + } + + protected get services(): Context['services'] { + return this.context.services; + } + + protected addSubscriptions(...subscriptions: Subscription[]): void { + this.subscriptions.push(...subscriptions.filter((subscription) => !!subscription)); + } + + protected removeSubscriptions(): void { + for (const subscription of this.subscriptions) { + subscription.unsubscribe(); + } + this.subscriptions = []; + } + + protected replaceSubscriptions(...subscriptions: Subscription[]): void { + this.removeSubscriptions(); + this.addSubscriptions(...subscriptions); + } +} diff --git a/src/sdk/common/utils/addresses-equal.ts b/src/sdk/common/utils/addresses-equal.ts new file mode 100644 index 00000000..bfccc0a1 --- /dev/null +++ b/src/sdk/common/utils/addresses-equal.ts @@ -0,0 +1,3 @@ +export function addressesEqual(address1: string, address2: string): boolean { + return (address1 || '').toLowerCase() === (address2 || '').toLowerCase(); +} diff --git a/src/sdk/common/utils/concat-hex.ts b/src/sdk/common/utils/concat-hex.ts new file mode 100644 index 00000000..c36b1a81 --- /dev/null +++ b/src/sdk/common/utils/concat-hex.ts @@ -0,0 +1,6 @@ +/** + * @ignore + */ +export function concatHex(...hex: string[]): string { + return hex.map((item, index) => (index ? item.slice(2) : item)).join(''); +} diff --git a/src/sdk/common/utils/deep-compare.spec.ts b/src/sdk/common/utils/deep-compare.spec.ts new file mode 100644 index 00000000..855a8a44 --- /dev/null +++ b/src/sdk/common/utils/deep-compare.spec.ts @@ -0,0 +1,41 @@ +import { BigNumber } from 'ethers'; +import { deepCompare } from './deep-compare'; + +describe('deepCompare()', () => { + it('expect to return false for different types', () => { + expect(deepCompare(1, 'a')).toBeFalsy(); + expect(deepCompare(false, 'a')).toBeFalsy(); + expect(deepCompare({}, 1)).toBeFalsy(); + }); + + it('expect to return true for the same primitive types', () => { + expect(deepCompare(1, 1)).toBeTruthy(); + expect(deepCompare('a', 'a')).toBeTruthy(); + expect(deepCompare(true, true)).toBeTruthy(); + }); + + it('expect to return true for the same object', () => { + expect( + deepCompare( + { + a: 1, + b: 'b', + c: true, + }, + { + a: 1, + b: 'b', + c: true, + }, + ), + ).toBeTruthy(); + }); + + it('expect to return true for the same array', () => { + expect(deepCompare([1, 2, 3, 'c'], [1, 2, 3, 'c'])).toBeTruthy(); + }); + + it('expect to return true for the same BigNumber', () => { + expect(deepCompare(BigNumber.from(1), BigNumber.from(1))).toBeTruthy(); + }); +}); diff --git a/src/sdk/common/utils/deep-compare.ts b/src/sdk/common/utils/deep-compare.ts new file mode 100644 index 00000000..6a6a931b --- /dev/null +++ b/src/sdk/common/utils/deep-compare.ts @@ -0,0 +1,68 @@ +import { BigNumber } from 'ethers'; +import { isBigNumber } from './is-big-number'; + +/** + * @ignore + */ +export function deepCompare(a: any, b: any): boolean { + let result = false; + + const aType = typeof a; + if (aType === typeof b) { + switch (aType) { + case 'object': + if (a === null || b === null) { + result = a === b; + } else if (a === b) { + result = true; + } else if (isBigNumber(a) && isBigNumber(b)) { + result = (a as BigNumber).eq(b); + } else if (a instanceof Date && b instanceof Date) { + result = a.getTime() === b.getTime(); + } else { + const aIsArray = Array.isArray(a); + const bIsArray = Array.isArray(b); + + if (aIsArray && bIsArray) { + const aLength = a.length; + const bLength = b.length; + + if (aLength === bLength) { + result = true; + + for (let index = 0; index < aLength; index += 1) { + if (!deepCompare(a[index], b[index])) { + result = false; + break; + } + } + } + } else if (!aIsArray && !bIsArray) { + const aKeys = Object.keys(a); + const bKeys = Object.keys(b); + + if (aKeys.length === bKeys.length) { + result = true; + + for (const key of aKeys) { + if (!deepCompare(a[key], b[key])) { + result = false; + break; + } + } + } + } + } + break; + + case 'function': + result = true; + break; + + default: + result = a === b; + } + } + + return result; +} diff --git a/src/sdk/common/utils/index.ts b/src/sdk/common/utils/index.ts new file mode 100644 index 00000000..0f3259b8 --- /dev/null +++ b/src/sdk/common/utils/index.ts @@ -0,0 +1,15 @@ +export * from './addresses-equal'; +export * from './concat-hex'; +export * from './deep-compare'; +export * from './is-address'; +export * from './is-big-number'; +export * from './is-hex'; +export * from './is-url'; +export * from './keccak256'; +export * from './parse-json'; +export * from './prepare-address'; +export * from './prepare-addresses'; +export * from './random-private-key'; +export * from './sleep'; +export * from './stringify-json'; +export * from './to-hex'; diff --git a/src/sdk/common/utils/is-address.ts b/src/sdk/common/utils/is-address.ts new file mode 100644 index 00000000..5e20f955 --- /dev/null +++ b/src/sdk/common/utils/is-address.ts @@ -0,0 +1,24 @@ +import { utils, constants } from 'ethers'; + +/** + * @ignore + */ +export function isAddress(value: string): boolean { + let result = false; + + if (value && value !== constants.AddressZero) { + try { + const address = utils.getAddress(value); + + if (address) { + result = address === value; + } + } catch (err) { + result = false; + } + } else if (value === constants.AddressZero) { + result = true; + } + + return result; +} diff --git a/src/sdk/common/utils/is-big-number.ts b/src/sdk/common/utils/is-big-number.ts new file mode 100644 index 00000000..04912a80 --- /dev/null +++ b/src/sdk/common/utils/is-big-number.ts @@ -0,0 +1,8 @@ +import { BigNumber } from 'ethers'; + +/** + * @ignore + */ +export function isBigNumber(value: any): boolean { + return value instanceof BigNumber; +} diff --git a/src/sdk/common/utils/is-hex.ts b/src/sdk/common/utils/is-hex.ts new file mode 100644 index 00000000..c3abe347 --- /dev/null +++ b/src/sdk/common/utils/is-hex.ts @@ -0,0 +1,14 @@ +import { utils } from 'ethers'; + +/** + * @ignore + */ +export function isHex(hex: string, size = 0): boolean { + let result = utils.isHexString(hex); + + if (result && size > 0) { + result = hex.length === size * 2 + 2; + } + + return result; +} diff --git a/src/sdk/common/utils/is-url.ts b/src/sdk/common/utils/is-url.ts new file mode 100644 index 00000000..e5c2205a --- /dev/null +++ b/src/sdk/common/utils/is-url.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import validator from 'validator'; + +/** + * @ignore + */ +export function isUrl(url: string): boolean { + return validator.isURL(url, { + protocols: ['http', 'https'], + require_tld: false, + require_host: true, + require_protocol: true, + }); +} diff --git a/src/sdk/common/utils/keccak256.ts b/src/sdk/common/utils/keccak256.ts new file mode 100644 index 00000000..ca61ff7e --- /dev/null +++ b/src/sdk/common/utils/keccak256.ts @@ -0,0 +1,29 @@ +import { utils, BytesLike } from 'ethers'; +import { isAddress } from './is-address'; +import { isHex } from './is-hex'; + +/** + * @ignore + */ +export function keccak256(data: BytesLike): string { + let result: string = null; + + if (data) { + switch (typeof data) { + case 'string': + if (isAddress(data)) { + result = utils.solidityKeccak256(['address'], [data]); + } else if (isHex(data)) { + result = utils.solidityKeccak256(['bytes'], [data]); + } else { + result = utils.solidityKeccak256(['string'], [data]); + } + break; + case 'object': + result = utils.solidityKeccak256(['bytes'], [data]); + break; + } + } + + return result; +} diff --git a/src/sdk/common/utils/parse-json.ts b/src/sdk/common/utils/parse-json.ts new file mode 100644 index 00000000..74fddf04 --- /dev/null +++ b/src/sdk/common/utils/parse-json.ts @@ -0,0 +1,13 @@ +/** + * @ignore + */ +export function parseJson(raw: string, defaultValue: T = null): T { + let result: T; + try { + result = JSON.parse(raw); + } catch (err) { + result = defaultValue; + } + + return result; +} diff --git a/src/sdk/common/utils/prepare-address.ts b/src/sdk/common/utils/prepare-address.ts new file mode 100644 index 00000000..cf7002dd --- /dev/null +++ b/src/sdk/common/utils/prepare-address.ts @@ -0,0 +1,24 @@ +import { constants, utils } from 'ethers'; + +/** + * @ignore + */ +export function prepareAddress(value: string, zeroAddressAsNull = false): string { + let result: string = null; + + try { + result = utils.getAddress(value); + + if (result === constants.AddressZero) { + result = null; + } + } catch (err) { + // + } + + if (!result && zeroAddressAsNull) { + result = constants.AddressZero; + } + + return result; +} diff --git a/src/sdk/common/utils/prepare-addresses.ts b/src/sdk/common/utils/prepare-addresses.ts new file mode 100644 index 00000000..ed7d686f --- /dev/null +++ b/src/sdk/common/utils/prepare-addresses.ts @@ -0,0 +1,46 @@ +import { prepareAddress } from './prepare-address'; + +/** + * @ignore + */ +export function prepareAddresses(data: T, ...keys: (keyof T)[]): T { + const result = { + ...data, + }; + + for (const key of keys) { + if (!result[key]) { + continue; + } + + try { + if (Array.isArray(result[key])) { + const addresses: any = ((result[key] as any) as string[]).map((item) => { + let result = item; + + if (item) { + const address = prepareAddress(item); + + if (address) { + result = address; + } + } + + return result; + }); + + result[key] = addresses; + } else { + const address: any = prepareAddress(result[key] as any); + + if (address) { + result[key] = address; + } + } + } catch (err) { + // + } + } + + return result; +} diff --git a/src/sdk/common/utils/random-private-key.ts b/src/sdk/common/utils/random-private-key.ts new file mode 100644 index 00000000..bd8b2b90 --- /dev/null +++ b/src/sdk/common/utils/random-private-key.ts @@ -0,0 +1,5 @@ +import { utils } from 'ethers'; + +export function randomPrivateKey(): string { + return utils.hexlify(utils.randomBytes(32)); +} diff --git a/src/sdk/common/utils/sleep.ts b/src/sdk/common/utils/sleep.ts new file mode 100644 index 00000000..48fee906 --- /dev/null +++ b/src/sdk/common/utils/sleep.ts @@ -0,0 +1,6 @@ +/** + * @ignore + */ +export function sleep(sec: number): Promise { + return new Promise((resolve) => setTimeout(resolve, sec * 1000)); +} diff --git a/src/sdk/common/utils/stringify-json.ts b/src/sdk/common/utils/stringify-json.ts new file mode 100644 index 00000000..d7c84fbf --- /dev/null +++ b/src/sdk/common/utils/stringify-json.ts @@ -0,0 +1,6 @@ +/** + * @ignore + */ +export function stringifyJson(value: T, space?: number): string { + return JSON.stringify(value, null, space); +} diff --git a/src/sdk/common/utils/to-hex.ts b/src/sdk/common/utils/to-hex.ts new file mode 100644 index 00000000..b0526fbd --- /dev/null +++ b/src/sdk/common/utils/to-hex.ts @@ -0,0 +1,35 @@ +import { BytesLike, utils } from 'ethers'; +import { isHex } from './is-hex'; + +/** + * @ignore + */ +export function toHex(data: BytesLike): string { + let result: string = null; + + if (data !== null) { + switch (typeof data) { + case 'string': + if (isHex(data)) { + result = data; + } else { + result = utils.hexlify(utils.toUtf8Bytes(data)); + } + break; + + case 'object': + try { + result = utils.hexlify(data as any); + } catch (err) { + result = null; + } + break; + } + } + + if (!result) { + throw new Error('invalid hex data'); + } + + return result; +} diff --git a/src/sdk/context.ts b/src/sdk/context.ts new file mode 100644 index 00000000..14511db6 --- /dev/null +++ b/src/sdk/context.ts @@ -0,0 +1,39 @@ +import { AccountService } from './account'; +import { ErrorSubject, Service } from './common'; +import { NetworkService } from './network'; +import { SessionService } from './session'; +import { StateService } from './state'; +import { WalletService } from './wallet'; + +export class Context { + readonly error$ = new ErrorSubject(); + + private readonly attached: Service[] = []; + + constructor( + readonly services: { + accountService: AccountService; + sessionService: SessionService; + stateService: StateService; + walletService: WalletService; + networkService: NetworkService; + }, + ) { + const items = [...Object.values(services)]; + + for (const item of items) { + this.attach(item); + } + } + + attach(service: T): void { + this.attached.push(service); + service.init(this); + } + + destroy(): void { + for (const attached of this.attached) { + attached.destroy(); + } + } +} diff --git a/src/contracts/@openzeppelin/contracts/access/Ownable.ts b/src/sdk/contracts/@openzeppelin/contracts/access/Ownable.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/access/Ownable.ts rename to src/sdk/contracts/@openzeppelin/contracts/access/Ownable.ts diff --git a/src/contracts/@openzeppelin/contracts/access/index.ts b/src/sdk/contracts/@openzeppelin/contracts/access/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/access/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/access/index.ts diff --git a/src/contracts/@openzeppelin/contracts/index.ts b/src/sdk/contracts/@openzeppelin/contracts/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/index.ts diff --git a/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts b/src/sdk/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts rename to src/sdk/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts diff --git a/src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts b/src/sdk/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts diff --git a/src/contracts/@openzeppelin/contracts/interfaces/index.ts b/src/sdk/contracts/@openzeppelin/contracts/interfaces/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/interfaces/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/interfaces/index.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/ERC1967/index.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/Proxy.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/Proxy.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/Proxy.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/Proxy.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/beacon/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/beacon/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/beacon/index.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/index.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/index.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/utils/Initializable.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts diff --git a/src/contracts/@openzeppelin/contracts/proxy/utils/index.ts b/src/sdk/contracts/@openzeppelin/contracts/proxy/utils/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/proxy/utils/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/proxy/utils/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC1155/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC1155/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC1155/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/ERC20.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/IERC20.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/extensions/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC20/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC20/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC20/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC20/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC721/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC721/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC721/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC721/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts diff --git a/src/contracts/@openzeppelin/contracts/token/ERC777/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/ERC777/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/ERC777/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/ERC777/index.ts diff --git a/src/contracts/@openzeppelin/contracts/token/index.ts b/src/sdk/contracts/@openzeppelin/contracts/token/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/token/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/token/index.ts diff --git a/src/contracts/@openzeppelin/contracts/utils/index.ts b/src/sdk/contracts/@openzeppelin/contracts/utils/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/utils/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/utils/index.ts diff --git a/src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts b/src/sdk/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts rename to src/sdk/contracts/@openzeppelin/contracts/utils/introspection/IERC165.ts diff --git a/src/contracts/@openzeppelin/contracts/utils/introspection/index.ts b/src/sdk/contracts/@openzeppelin/contracts/utils/introspection/index.ts similarity index 100% rename from src/contracts/@openzeppelin/contracts/utils/introspection/index.ts rename to src/sdk/contracts/@openzeppelin/contracts/utils/introspection/index.ts diff --git a/src/contracts/@openzeppelin/index.ts b/src/sdk/contracts/@openzeppelin/index.ts similarity index 100% rename from src/contracts/@openzeppelin/index.ts rename to src/sdk/contracts/@openzeppelin/index.ts diff --git a/src/contracts/common.ts b/src/sdk/contracts/common.ts similarity index 100% rename from src/contracts/common.ts rename to src/sdk/contracts/common.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/access/Ownable__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/access/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/access/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/access/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/access/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/interfaces/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/interfaces/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/beacon/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/proxy/utils/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC1155/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC20/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC721/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/ERC777/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/token/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/token/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/token/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/token/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/utils/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/utils/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/utils/index.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts diff --git a/src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts b/src/sdk/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts rename to src/sdk/contracts/factories/@openzeppelin/contracts/utils/introspection/index.ts diff --git a/src/contracts/factories/@openzeppelin/index.ts b/src/sdk/contracts/factories/@openzeppelin/index.ts similarity index 100% rename from src/contracts/factories/@openzeppelin/index.ts rename to src/sdk/contracts/factories/@openzeppelin/index.ts diff --git a/src/contracts/factories/index.ts b/src/sdk/contracts/factories/index.ts similarity index 100% rename from src/contracts/factories/index.ts rename to src/sdk/contracts/factories/index.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient__factory.ts diff --git a/src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts b/src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts similarity index 100% rename from src/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts rename to src/sdk/contracts/factories/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/BLSAccountFactory__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/BLSAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/BLSSignatureAggregator__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/IBLSAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/index.ts b/src/sdk/contracts/factories/src/aa-4337/bls/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/index.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/index.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/BLSOpen__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator__factory.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/hubble-contracts/index.ts diff --git a/src/contracts/factories/src/aa-4337/bls/lib/index.ts b/src/sdk/contracts/factories/src/aa-4337/bls/lib/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/bls/lib/index.ts rename to src/sdk/contracts/factories/src/aa-4337/bls/lib/index.ts diff --git a/src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts b/src/sdk/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/callback/TokenCallbackHandler__factory.ts diff --git a/src/contracts/factories/src/aa-4337/callback/index.ts b/src/sdk/contracts/factories/src/aa-4337/callback/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/callback/index.ts rename to src/sdk/contracts/factories/src/aa-4337/callback/index.ts diff --git a/src/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/core/BaseAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/core/BasePaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts b/src/sdk/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/core/EntryPoint__factory.ts diff --git a/src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts b/src/sdk/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/core/SenderCreator__factory.ts diff --git a/src/contracts/factories/src/aa-4337/core/StakeManager__factory.ts b/src/sdk/contracts/factories/src/aa-4337/core/StakeManager__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/StakeManager__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/core/StakeManager__factory.ts diff --git a/src/contracts/factories/src/aa-4337/core/index.ts b/src/sdk/contracts/factories/src/aa-4337/core/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/core/index.ts rename to src/sdk/contracts/factories/src/aa-4337/core/index.ts diff --git a/src/contracts/factories/src/aa-4337/index.ts b/src/sdk/contracts/factories/src/aa-4337/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/index.ts rename to src/sdk/contracts/factories/src/aa-4337/index.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IAggregatedAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IAggregator__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/ICreate2Deployer__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IEntryPoint__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IPaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/IStakeManager__factory.ts diff --git a/src/contracts/factories/src/aa-4337/interfaces/index.ts b/src/sdk/contracts/factories/src/aa-4337/interfaces/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/interfaces/index.ts rename to src/sdk/contracts/factories/src/aa-4337/interfaces/index.ts diff --git a/src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/DepositPaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/IOracle__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/IOracle__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/IOracle__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/TestAggregatedAccountFactory__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/TestAggregatedAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/TokenPaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/VerifyingPaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/samples/index.ts b/src/sdk/contracts/factories/src/aa-4337/samples/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/samples/index.ts rename to src/sdk/contracts/factories/src/aa-4337/samples/index.ts diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts b/src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts rename to src/sdk/contracts/factories/src/aa-4337/test/BrokenBlsAccount.sol/index.ts diff --git a/src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/MaliciousAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestAggregatedAccountFactory__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestAggregatedAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestCounter__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestCounter__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestCounter__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestExpirePaymaster__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestExpiryAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestHelpers__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestOracle__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestOracle__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestOracle__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestPaymasterAcceptAll__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestRevertAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestSignatureAggregator__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestToken__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestToken__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestToken__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestToken__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestUtil__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestUtil__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestUtil__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts b/src/sdk/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts rename to src/sdk/contracts/factories/src/aa-4337/test/TestWarmColdAccount__factory.ts diff --git a/src/contracts/factories/src/aa-4337/test/index.ts b/src/sdk/contracts/factories/src/aa-4337/test/index.ts similarity index 100% rename from src/contracts/factories/src/aa-4337/test/index.ts rename to src/sdk/contracts/factories/src/aa-4337/test/index.ts diff --git a/src/contracts/factories/src/access/Guarded__factory.ts b/src/sdk/contracts/factories/src/access/Guarded__factory.ts similarity index 100% rename from src/contracts/factories/src/access/Guarded__factory.ts rename to src/sdk/contracts/factories/src/access/Guarded__factory.ts diff --git a/src/contracts/factories/src/access/Owned__factory.ts b/src/sdk/contracts/factories/src/access/Owned__factory.ts similarity index 100% rename from src/contracts/factories/src/access/Owned__factory.ts rename to src/sdk/contracts/factories/src/access/Owned__factory.ts diff --git a/src/contracts/factories/src/access/index.ts b/src/sdk/contracts/factories/src/access/index.ts similarity index 100% rename from src/contracts/factories/src/access/index.ts rename to src/sdk/contracts/factories/src/access/index.ts diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts b/src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts similarity index 100% rename from src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts rename to src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet__factory.ts diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts b/src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts similarity index 100% rename from src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts rename to src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator__factory.ts diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts b/src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts similarity index 100% rename from src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts rename to src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain__factory.ts diff --git a/src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts b/src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts similarity index 100% rename from src/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts rename to src/sdk/contracts/factories/src/helpers/UniversalSignatureValidator.sol/index.ts diff --git a/src/contracts/factories/src/helpers/index.ts b/src/sdk/contracts/factories/src/helpers/index.ts similarity index 100% rename from src/contracts/factories/src/helpers/index.ts rename to src/sdk/contracts/factories/src/helpers/index.ts diff --git a/src/contracts/factories/src/index.ts b/src/sdk/contracts/factories/src/index.ts similarity index 100% rename from src/contracts/factories/src/index.ts rename to src/sdk/contracts/factories/src/index.ts diff --git a/src/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts b/src/sdk/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts rename to src/sdk/contracts/factories/src/interfaces/IEtherspotPaymaster__factory.ts diff --git a/src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts b/src/sdk/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts similarity index 100% rename from src/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts rename to src/sdk/contracts/factories/src/interfaces/IEtherspotWallet__factory.ts diff --git a/src/contracts/factories/src/interfaces/IWhitelist__factory.ts b/src/sdk/contracts/factories/src/interfaces/IWhitelist__factory.ts similarity index 100% rename from src/contracts/factories/src/interfaces/IWhitelist__factory.ts rename to src/sdk/contracts/factories/src/interfaces/IWhitelist__factory.ts diff --git a/src/contracts/factories/src/interfaces/index.ts b/src/sdk/contracts/factories/src/interfaces/index.ts similarity index 100% rename from src/contracts/factories/src/interfaces/index.ts rename to src/sdk/contracts/factories/src/interfaces/index.ts diff --git a/src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts b/src/sdk/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts similarity index 100% rename from src/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts rename to src/sdk/contracts/factories/src/paymaster/EtherspotPaymaster__factory.ts diff --git a/src/contracts/factories/src/paymaster/Whitelist__factory.ts b/src/sdk/contracts/factories/src/paymaster/Whitelist__factory.ts similarity index 100% rename from src/contracts/factories/src/paymaster/Whitelist__factory.ts rename to src/sdk/contracts/factories/src/paymaster/Whitelist__factory.ts diff --git a/src/contracts/factories/src/paymaster/index.ts b/src/sdk/contracts/factories/src/paymaster/index.ts similarity index 100% rename from src/contracts/factories/src/paymaster/index.ts rename to src/sdk/contracts/factories/src/paymaster/index.ts diff --git a/src/contracts/factories/src/wallet/AccountFactory__factory.ts b/src/sdk/contracts/factories/src/wallet/AccountFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/wallet/AccountFactory__factory.ts rename to src/sdk/contracts/factories/src/wallet/AccountFactory__factory.ts diff --git a/src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts b/src/sdk/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts similarity index 100% rename from src/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts rename to src/sdk/contracts/factories/src/wallet/EtherspotWalletFactory__factory.ts diff --git a/src/contracts/factories/src/wallet/EtherspotWallet__factory.ts b/src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts similarity index 100% rename from src/contracts/factories/src/wallet/EtherspotWallet__factory.ts rename to src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts diff --git a/src/contracts/factories/src/wallet/index.ts b/src/sdk/contracts/factories/src/wallet/index.ts similarity index 100% rename from src/contracts/factories/src/wallet/index.ts rename to src/sdk/contracts/factories/src/wallet/index.ts diff --git a/src/contracts/index.ts b/src/sdk/contracts/index.ts similarity index 100% rename from src/contracts/index.ts rename to src/sdk/contracts/index.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/beacon/IBeacon.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/Initializable.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC20/IERC20.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/token/ERC777/IERC777Recipient.ts diff --git a/src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts b/src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts similarity index 100% rename from src/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts rename to src/sdk/contracts/src/.deps/npm/@openzeppelin/contracts/utils/introspection/IERC165.ts diff --git a/src/contracts/src/aa-4337/bls/BLSAccount.ts b/src/sdk/contracts/src/aa-4337/bls/BLSAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/BLSAccount.ts rename to src/sdk/contracts/src/aa-4337/bls/BLSAccount.ts diff --git a/src/contracts/src/aa-4337/bls/BLSAccountFactory.ts b/src/sdk/contracts/src/aa-4337/bls/BLSAccountFactory.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/BLSAccountFactory.ts rename to src/sdk/contracts/src/aa-4337/bls/BLSAccountFactory.ts diff --git a/src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts b/src/sdk/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts rename to src/sdk/contracts/src/aa-4337/bls/BLSSignatureAggregator.ts diff --git a/src/contracts/src/aa-4337/bls/IBLSAccount.ts b/src/sdk/contracts/src/aa-4337/bls/IBLSAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/IBLSAccount.ts rename to src/sdk/contracts/src/aa-4337/bls/IBLSAccount.ts diff --git a/src/contracts/src/aa-4337/bls/index.ts b/src/sdk/contracts/src/aa-4337/bls/index.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/index.ts rename to src/sdk/contracts/src/aa-4337/bls/index.ts diff --git a/src/contracts/src/aa-4337/bls/lib/BLSOpen.ts b/src/sdk/contracts/src/aa-4337/bls/lib/BLSOpen.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/BLSOpen.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/BLSOpen.ts diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts b/src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/index.ts diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts b/src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.ts diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts b/src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/contracts/libs/index.ts diff --git a/src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts b/src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/hubble-contracts/index.ts diff --git a/src/contracts/src/aa-4337/bls/lib/index.ts b/src/sdk/contracts/src/aa-4337/bls/lib/index.ts similarity index 100% rename from src/contracts/src/aa-4337/bls/lib/index.ts rename to src/sdk/contracts/src/aa-4337/bls/lib/index.ts diff --git a/src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts b/src/sdk/contracts/src/aa-4337/callback/TokenCallbackHandler.ts similarity index 100% rename from src/contracts/src/aa-4337/callback/TokenCallbackHandler.ts rename to src/sdk/contracts/src/aa-4337/callback/TokenCallbackHandler.ts diff --git a/src/contracts/src/aa-4337/callback/index.ts b/src/sdk/contracts/src/aa-4337/callback/index.ts similarity index 100% rename from src/contracts/src/aa-4337/callback/index.ts rename to src/sdk/contracts/src/aa-4337/callback/index.ts diff --git a/src/contracts/src/aa-4337/core/BaseAccount.ts b/src/sdk/contracts/src/aa-4337/core/BaseAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/core/BaseAccount.ts rename to src/sdk/contracts/src/aa-4337/core/BaseAccount.ts diff --git a/src/contracts/src/aa-4337/core/BasePaymaster.ts b/src/sdk/contracts/src/aa-4337/core/BasePaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/core/BasePaymaster.ts rename to src/sdk/contracts/src/aa-4337/core/BasePaymaster.ts diff --git a/src/contracts/src/aa-4337/core/EntryPoint.ts b/src/sdk/contracts/src/aa-4337/core/EntryPoint.ts similarity index 100% rename from src/contracts/src/aa-4337/core/EntryPoint.ts rename to src/sdk/contracts/src/aa-4337/core/EntryPoint.ts diff --git a/src/contracts/src/aa-4337/core/SenderCreator.ts b/src/sdk/contracts/src/aa-4337/core/SenderCreator.ts similarity index 100% rename from src/contracts/src/aa-4337/core/SenderCreator.ts rename to src/sdk/contracts/src/aa-4337/core/SenderCreator.ts diff --git a/src/contracts/src/aa-4337/core/StakeManager.ts b/src/sdk/contracts/src/aa-4337/core/StakeManager.ts similarity index 100% rename from src/contracts/src/aa-4337/core/StakeManager.ts rename to src/sdk/contracts/src/aa-4337/core/StakeManager.ts diff --git a/src/contracts/src/aa-4337/core/index.ts b/src/sdk/contracts/src/aa-4337/core/index.ts similarity index 100% rename from src/contracts/src/aa-4337/core/index.ts rename to src/sdk/contracts/src/aa-4337/core/index.ts diff --git a/src/contracts/src/aa-4337/index.ts b/src/sdk/contracts/src/aa-4337/index.ts similarity index 100% rename from src/contracts/src/aa-4337/index.ts rename to src/sdk/contracts/src/aa-4337/index.ts diff --git a/src/contracts/src/aa-4337/interfaces/IAccount.ts b/src/sdk/contracts/src/aa-4337/interfaces/IAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IAccount.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IAccount.ts diff --git a/src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts b/src/sdk/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IAggregatedAccount.ts diff --git a/src/contracts/src/aa-4337/interfaces/IAggregator.ts b/src/sdk/contracts/src/aa-4337/interfaces/IAggregator.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IAggregator.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IAggregator.ts diff --git a/src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts b/src/sdk/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts rename to src/sdk/contracts/src/aa-4337/interfaces/ICreate2Deployer.ts diff --git a/src/contracts/src/aa-4337/interfaces/IEntryPoint.ts b/src/sdk/contracts/src/aa-4337/interfaces/IEntryPoint.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IEntryPoint.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IEntryPoint.ts diff --git a/src/contracts/src/aa-4337/interfaces/IPaymaster.ts b/src/sdk/contracts/src/aa-4337/interfaces/IPaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IPaymaster.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IPaymaster.ts diff --git a/src/contracts/src/aa-4337/interfaces/IStakeManager.ts b/src/sdk/contracts/src/aa-4337/interfaces/IStakeManager.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/IStakeManager.ts rename to src/sdk/contracts/src/aa-4337/interfaces/IStakeManager.ts diff --git a/src/contracts/src/aa-4337/interfaces/index.ts b/src/sdk/contracts/src/aa-4337/interfaces/index.ts similarity index 100% rename from src/contracts/src/aa-4337/interfaces/index.ts rename to src/sdk/contracts/src/aa-4337/interfaces/index.ts diff --git a/src/contracts/src/aa-4337/samples/DepositPaymaster.ts b/src/sdk/contracts/src/aa-4337/samples/DepositPaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/DepositPaymaster.ts rename to src/sdk/contracts/src/aa-4337/samples/DepositPaymaster.ts diff --git a/src/contracts/src/aa-4337/samples/IOracle.ts b/src/sdk/contracts/src/aa-4337/samples/IOracle.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/IOracle.ts rename to src/sdk/contracts/src/aa-4337/samples/IOracle.ts diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts b/src/sdk/contracts/src/aa-4337/samples/TestAggregatedAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/TestAggregatedAccount.ts rename to src/sdk/contracts/src/aa-4337/samples/TestAggregatedAccount.ts diff --git a/src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts b/src/sdk/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts rename to src/sdk/contracts/src/aa-4337/samples/TestAggregatedAccountFactory.ts diff --git a/src/contracts/src/aa-4337/samples/TokenPaymaster.ts b/src/sdk/contracts/src/aa-4337/samples/TokenPaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/TokenPaymaster.ts rename to src/sdk/contracts/src/aa-4337/samples/TokenPaymaster.ts diff --git a/src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts b/src/sdk/contracts/src/aa-4337/samples/VerifyingPaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/VerifyingPaymaster.ts rename to src/sdk/contracts/src/aa-4337/samples/VerifyingPaymaster.ts diff --git a/src/contracts/src/aa-4337/samples/index.ts b/src/sdk/contracts/src/aa-4337/samples/index.ts similarity index 100% rename from src/contracts/src/aa-4337/samples/index.ts rename to src/sdk/contracts/src/aa-4337/samples/index.ts diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts b/src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts rename to src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccount.ts diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts b/src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts similarity index 100% rename from src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts rename to src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/BrokenBLSAccountFactory.ts diff --git a/src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts b/src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts similarity index 100% rename from src/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts rename to src/sdk/contracts/src/aa-4337/test/BrokenBlsAccount.sol/index.ts diff --git a/src/contracts/src/aa-4337/test/MaliciousAccount.ts b/src/sdk/contracts/src/aa-4337/test/MaliciousAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/MaliciousAccount.ts rename to src/sdk/contracts/src/aa-4337/test/MaliciousAccount.ts diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccount.ts b/src/sdk/contracts/src/aa-4337/test/TestAggregatedAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestAggregatedAccount.ts rename to src/sdk/contracts/src/aa-4337/test/TestAggregatedAccount.ts diff --git a/src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts b/src/sdk/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts rename to src/sdk/contracts/src/aa-4337/test/TestAggregatedAccountFactory.ts diff --git a/src/contracts/src/aa-4337/test/TestCounter.ts b/src/sdk/contracts/src/aa-4337/test/TestCounter.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestCounter.ts rename to src/sdk/contracts/src/aa-4337/test/TestCounter.ts diff --git a/src/contracts/src/aa-4337/test/TestExpirePaymaster.ts b/src/sdk/contracts/src/aa-4337/test/TestExpirePaymaster.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestExpirePaymaster.ts rename to src/sdk/contracts/src/aa-4337/test/TestExpirePaymaster.ts diff --git a/src/contracts/src/aa-4337/test/TestExpiryAccount.ts b/src/sdk/contracts/src/aa-4337/test/TestExpiryAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestExpiryAccount.ts rename to src/sdk/contracts/src/aa-4337/test/TestExpiryAccount.ts diff --git a/src/contracts/src/aa-4337/test/TestHelpers.ts b/src/sdk/contracts/src/aa-4337/test/TestHelpers.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestHelpers.ts rename to src/sdk/contracts/src/aa-4337/test/TestHelpers.ts diff --git a/src/contracts/src/aa-4337/test/TestOracle.ts b/src/sdk/contracts/src/aa-4337/test/TestOracle.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestOracle.ts rename to src/sdk/contracts/src/aa-4337/test/TestOracle.ts diff --git a/src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts b/src/sdk/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts rename to src/sdk/contracts/src/aa-4337/test/TestPaymasterAcceptAll.ts diff --git a/src/contracts/src/aa-4337/test/TestRevertAccount.ts b/src/sdk/contracts/src/aa-4337/test/TestRevertAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestRevertAccount.ts rename to src/sdk/contracts/src/aa-4337/test/TestRevertAccount.ts diff --git a/src/contracts/src/aa-4337/test/TestSignatureAggregator.ts b/src/sdk/contracts/src/aa-4337/test/TestSignatureAggregator.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestSignatureAggregator.ts rename to src/sdk/contracts/src/aa-4337/test/TestSignatureAggregator.ts diff --git a/src/contracts/src/aa-4337/test/TestToken.ts b/src/sdk/contracts/src/aa-4337/test/TestToken.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestToken.ts rename to src/sdk/contracts/src/aa-4337/test/TestToken.ts diff --git a/src/contracts/src/aa-4337/test/TestUtil.ts b/src/sdk/contracts/src/aa-4337/test/TestUtil.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestUtil.ts rename to src/sdk/contracts/src/aa-4337/test/TestUtil.ts diff --git a/src/contracts/src/aa-4337/test/TestWarmColdAccount.ts b/src/sdk/contracts/src/aa-4337/test/TestWarmColdAccount.ts similarity index 100% rename from src/contracts/src/aa-4337/test/TestWarmColdAccount.ts rename to src/sdk/contracts/src/aa-4337/test/TestWarmColdAccount.ts diff --git a/src/contracts/src/aa-4337/test/index.ts b/src/sdk/contracts/src/aa-4337/test/index.ts similarity index 100% rename from src/contracts/src/aa-4337/test/index.ts rename to src/sdk/contracts/src/aa-4337/test/index.ts diff --git a/src/contracts/src/access/Guarded.ts b/src/sdk/contracts/src/access/Guarded.ts similarity index 100% rename from src/contracts/src/access/Guarded.ts rename to src/sdk/contracts/src/access/Guarded.ts diff --git a/src/contracts/src/access/Owned.ts b/src/sdk/contracts/src/access/Owned.ts similarity index 100% rename from src/contracts/src/access/Owned.ts rename to src/sdk/contracts/src/access/Owned.ts diff --git a/src/contracts/src/access/index.ts b/src/sdk/contracts/src/access/index.ts similarity index 100% rename from src/contracts/src/access/index.ts rename to src/sdk/contracts/src/access/index.ts diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts b/src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts similarity index 100% rename from src/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts rename to src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/IERC1271Wallet.ts diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts b/src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts similarity index 100% rename from src/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts rename to src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/UniversalSigValidator.ts diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts b/src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts similarity index 100% rename from src/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts rename to src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/ValidateSigOffchain.ts diff --git a/src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts b/src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts similarity index 100% rename from src/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts rename to src/sdk/contracts/src/helpers/UniversalSignatureValidator.sol/index.ts diff --git a/src/contracts/src/helpers/index.ts b/src/sdk/contracts/src/helpers/index.ts similarity index 100% rename from src/contracts/src/helpers/index.ts rename to src/sdk/contracts/src/helpers/index.ts diff --git a/src/contracts/src/index.ts b/src/sdk/contracts/src/index.ts similarity index 100% rename from src/contracts/src/index.ts rename to src/sdk/contracts/src/index.ts diff --git a/src/contracts/src/interfaces/IEtherspotPaymaster.ts b/src/sdk/contracts/src/interfaces/IEtherspotPaymaster.ts similarity index 100% rename from src/contracts/src/interfaces/IEtherspotPaymaster.ts rename to src/sdk/contracts/src/interfaces/IEtherspotPaymaster.ts diff --git a/src/contracts/src/interfaces/IEtherspotWallet.ts b/src/sdk/contracts/src/interfaces/IEtherspotWallet.ts similarity index 100% rename from src/contracts/src/interfaces/IEtherspotWallet.ts rename to src/sdk/contracts/src/interfaces/IEtherspotWallet.ts diff --git a/src/contracts/src/interfaces/IWhitelist.ts b/src/sdk/contracts/src/interfaces/IWhitelist.ts similarity index 100% rename from src/contracts/src/interfaces/IWhitelist.ts rename to src/sdk/contracts/src/interfaces/IWhitelist.ts diff --git a/src/contracts/src/interfaces/index.ts b/src/sdk/contracts/src/interfaces/index.ts similarity index 100% rename from src/contracts/src/interfaces/index.ts rename to src/sdk/contracts/src/interfaces/index.ts diff --git a/src/contracts/src/paymaster/EtherspotPaymaster.ts b/src/sdk/contracts/src/paymaster/EtherspotPaymaster.ts similarity index 100% rename from src/contracts/src/paymaster/EtherspotPaymaster.ts rename to src/sdk/contracts/src/paymaster/EtherspotPaymaster.ts diff --git a/src/contracts/src/paymaster/Whitelist.ts b/src/sdk/contracts/src/paymaster/Whitelist.ts similarity index 100% rename from src/contracts/src/paymaster/Whitelist.ts rename to src/sdk/contracts/src/paymaster/Whitelist.ts diff --git a/src/contracts/src/paymaster/index.ts b/src/sdk/contracts/src/paymaster/index.ts similarity index 100% rename from src/contracts/src/paymaster/index.ts rename to src/sdk/contracts/src/paymaster/index.ts diff --git a/src/contracts/src/wallet/AccountFactory.ts b/src/sdk/contracts/src/wallet/AccountFactory.ts similarity index 100% rename from src/contracts/src/wallet/AccountFactory.ts rename to src/sdk/contracts/src/wallet/AccountFactory.ts diff --git a/src/contracts/src/wallet/EtherspotWallet.ts b/src/sdk/contracts/src/wallet/EtherspotWallet.ts similarity index 100% rename from src/contracts/src/wallet/EtherspotWallet.ts rename to src/sdk/contracts/src/wallet/EtherspotWallet.ts diff --git a/src/contracts/src/wallet/EtherspotWalletFactory.ts b/src/sdk/contracts/src/wallet/EtherspotWalletFactory.ts similarity index 100% rename from src/contracts/src/wallet/EtherspotWalletFactory.ts rename to src/sdk/contracts/src/wallet/EtherspotWalletFactory.ts diff --git a/src/contracts/src/wallet/index.ts b/src/sdk/contracts/src/wallet/index.ts similarity index 100% rename from src/contracts/src/wallet/index.ts rename to src/sdk/contracts/src/wallet/index.ts diff --git a/src/sdk/dto/create-session.dto.ts b/src/sdk/dto/create-session.dto.ts new file mode 100644 index 00000000..dc9999d4 --- /dev/null +++ b/src/sdk/dto/create-session.dto.ts @@ -0,0 +1,12 @@ +import { IsOptional, IsPositive, IsInt, IsString } from 'class-validator'; + +export class CreateSessionDto { + @IsOptional() + @IsPositive() + @IsInt() + ttl?: number = null; + + @IsOptional() + @IsString() + fcmToken?: string = null; +} diff --git a/src/sdk/dto/index.ts b/src/sdk/dto/index.ts new file mode 100644 index 00000000..ea9a597a --- /dev/null +++ b/src/sdk/dto/index.ts @@ -0,0 +1,3 @@ +export * from './sign-message.dto'; +export * from './utils'; +export * from './create-session.dto'; \ No newline at end of file diff --git a/src/sdk/dto/sign-message.dto.ts b/src/sdk/dto/sign-message.dto.ts new file mode 100644 index 00000000..8b281141 --- /dev/null +++ b/src/sdk/dto/sign-message.dto.ts @@ -0,0 +1,9 @@ +import { BytesLike } from 'ethers'; +import { IsBytesLike } from './validators'; + +export class SignMessageDto { + @IsBytesLike({ + acceptText: true, + }) + message: BytesLike; +} diff --git a/src/sdk/dto/utils/index.ts b/src/sdk/dto/utils/index.ts new file mode 100644 index 00000000..3fd7ae33 --- /dev/null +++ b/src/sdk/dto/utils/index.ts @@ -0,0 +1 @@ +export * from './validate-dto'; diff --git a/src/sdk/dto/utils/validate-dto.ts b/src/sdk/dto/utils/validate-dto.ts new file mode 100644 index 00000000..d49bef73 --- /dev/null +++ b/src/sdk/dto/utils/validate-dto.ts @@ -0,0 +1,51 @@ +import { validate } from 'class-validator'; +import { ValidationException, prepareAddresses } from '../../common'; + +/** + * @ignore + */ +export async function validateDto( + dto: Partial, + DtoConstructor: { new (): T }, + options: { + addressKeys?: (keyof T)[]; + } = {}, +): Promise { + const result = new DtoConstructor(); + + const { addressKeys } = options; + + try { + let dtoWithoutUndefined = Object.entries(dto).reduce((result, [key, value]) => { + if (typeof value !== 'undefined') { + result = { + ...result, + [key]: value, + }; + } + return result; + }, {}) as T; + + if (addressKeys) { + dtoWithoutUndefined = prepareAddresses(dtoWithoutUndefined, ...addressKeys); + } + + Object.assign(result, dtoWithoutUndefined); + } catch (err) { + // + } + + const errors = await validate(result, { + forbidUnknownValues: true, + validationError: { + target: false, + value: false, + }, + }); + + if (errors && errors.length) { + throw new ValidationException(errors); + } + + return result; +} diff --git a/src/sdk/dto/validators/index.ts b/src/sdk/dto/validators/index.ts new file mode 100644 index 00000000..ced1503f --- /dev/null +++ b/src/sdk/dto/validators/index.ts @@ -0,0 +1,6 @@ +export * from './is-address.validator'; +export * from './is-big-numberish.validator'; +export * from './is-bytes-like.validator'; +export * from './is-hex.validator'; +export * from './is-hex32.validator'; +export * from './is-url.validator'; diff --git a/src/sdk/dto/validators/is-address.validator.ts b/src/sdk/dto/validators/is-address.validator.ts new file mode 100644 index 00000000..4f92ce69 --- /dev/null +++ b/src/sdk/dto/validators/is-address.validator.ts @@ -0,0 +1,22 @@ +import { registerDecorator, ValidationOptions } from 'class-validator'; +import { isAddress } from '../../common'; + +export function IsAddress(options: ValidationOptions = {}) { + return (object: any, propertyName: string) => { + registerDecorator({ + propertyName, + options: { + message: `${propertyName} must be an address`, + ...options, + }, + name: 'isAddress', + target: object.constructor, + constraints: [], + validator: { + validate(value: any): boolean { + return isAddress(value); + }, + }, + }); + }; +} diff --git a/src/sdk/dto/validators/is-big-numberish.validator.ts b/src/sdk/dto/validators/is-big-numberish.validator.ts new file mode 100644 index 00000000..d5dd7f31 --- /dev/null +++ b/src/sdk/dto/validators/is-big-numberish.validator.ts @@ -0,0 +1,38 @@ +import { BigNumber } from 'ethers'; +import { registerDecorator, ValidationOptions } from 'class-validator'; + +export function IsBigNumberish( + options: { + positive?: boolean; + } = {}, + validationOptions: ValidationOptions = {}, +) { + return (object: any, propertyName: string) => { + const { positive } = options; + + registerDecorator({ + propertyName, + options: { + message: `${propertyName} must be ${positive ? 'positive ' : ''}big numberish`, + ...validationOptions, + }, + name: 'IsBigNumberish', + target: object.constructor, + constraints: [], + validator: { + validate(value: any): boolean { + let result = false; + + try { + const bn = BigNumber.from(value); + result = positive ? bn.gt(0) : bn.gte(0); + } catch (err) { + // + } + + return result; + }, + }, + }); + }; +} diff --git a/src/sdk/dto/validators/is-bytes-like.validator.ts b/src/sdk/dto/validators/is-bytes-like.validator.ts new file mode 100644 index 00000000..6d439c88 --- /dev/null +++ b/src/sdk/dto/validators/is-bytes-like.validator.ts @@ -0,0 +1,44 @@ +import { utils } from 'ethers'; +import { registerDecorator, ValidationOptions } from 'class-validator'; + +export function IsBytesLike(options: ValidationOptions & { acceptText?: boolean } = {}) { + return (object: any, propertyName: string) => { + registerDecorator({ + propertyName, + options: { + message: `${propertyName} must be bytes like`, + ...options, + }, + name: 'IsBytesLike', + target: object.constructor, + constraints: [], + validator: { + validate(value: any): boolean { + let result = false; + + try { + if (value) { + switch (typeof value) { + case 'string': + if (options.acceptText) { + result = true; + } else { + result = utils.isHexString(value) && value.length % 2 === 0; + } + break; + + case 'object': + result = Array.isArray(value) && value.every((value) => typeof value === 'number'); + break; + } + } + } catch (err) { + // + } + + return result; + }, + }, + }); + }; +} diff --git a/src/sdk/dto/validators/is-hex.validator.ts b/src/sdk/dto/validators/is-hex.validator.ts new file mode 100644 index 00000000..d89eac69 --- /dev/null +++ b/src/sdk/dto/validators/is-hex.validator.ts @@ -0,0 +1,40 @@ +import { registerDecorator, ValidationOptions } from 'class-validator'; +import { utils } from 'ethers'; + +export function IsHex( + options: { + size?: number; + } = {}, + validationOptions: ValidationOptions = {}, +) { + return (object: any, propertyName: string) => { + const { size } = options; + let message = `${propertyName} must be hex`; + + if (size > 0) { + message = `${message} with ${size} size`; + } + + registerDecorator({ + propertyName, + options: { + message, + ...validationOptions, + }, + name: 'isHex', + target: object.constructor, + constraints: [], + validator: { + validate(value: string): boolean { + let result = utils.isHexString(value); + + if (result && size > 0) { + result = value.length === size * 2 + 2; + } + + return result; + }, + }, + }); + }; +} diff --git a/src/sdk/dto/validators/is-hex32.validator.ts b/src/sdk/dto/validators/is-hex32.validator.ts new file mode 100644 index 00000000..d0fed030 --- /dev/null +++ b/src/sdk/dto/validators/is-hex32.validator.ts @@ -0,0 +1,11 @@ +import { ValidationOptions } from 'class-validator'; +import { IsHex } from './is-hex.validator'; + +export function IsHex32(options: ValidationOptions = {}) { + return IsHex( + { + size: 32, + }, + options, + ); +} diff --git a/src/sdk/dto/validators/is-url.validator.ts b/src/sdk/dto/validators/is-url.validator.ts new file mode 100644 index 00000000..98d8e54c --- /dev/null +++ b/src/sdk/dto/validators/is-url.validator.ts @@ -0,0 +1,22 @@ +import { registerDecorator, ValidationOptions } from 'class-validator'; +import { isUrl } from '../../common'; + +export function IsUrl(validationOptions: ValidationOptions = {}) { + return (object: any, propertyName: string) => { + registerDecorator({ + propertyName, + options: { + message: `${propertyName} must be url`, + ...validationOptions, + }, + name: 'isUrl', + target: object.constructor, + constraints: [], + validator: { + validate(value: string): boolean { + return isUrl(value); + }, + }, + }); + }; +} diff --git a/src/sdk/env/constants.ts b/src/sdk/env/constants.ts new file mode 100644 index 00000000..504d8bfd --- /dev/null +++ b/src/sdk/env/constants.ts @@ -0,0 +1,25 @@ +import { NetworkNames } from '../network'; +import { Env } from './env'; + +export enum EnvNames { + MainNets = 'mainnets', + TestNets = 'testnets', +} + +export const SUPPORTED_ENVS: { [key: string]: Env } = { + [EnvNames.MainNets]: { + networkOptions: { + supportedNetworkNames: [ + // NetworkNames.Mainnet, // + ], + }, + }, + [EnvNames.TestNets]: { + networkOptions: { + supportedNetworkNames: [ + // NetworkNames.Goerli, + NetworkNames.Mumbai, + ], + }, + }, +}; diff --git a/src/sdk/env/env.ts b/src/sdk/env/env.ts new file mode 100644 index 00000000..85b81255 --- /dev/null +++ b/src/sdk/env/env.ts @@ -0,0 +1,37 @@ +import { NetworkOptions } from '../network'; +import { EnvNames, SUPPORTED_ENVS } from './constants'; + +export class Env { + static defaultName: EnvNames = EnvNames.MainNets; + + static prepare(env: EnvNames | Env): Env { + let partial: Env = null; + + if (env) { + switch (typeof env) { + case 'string': + partial = SUPPORTED_ENVS[env]; + break; + + case 'object': + if (env.networkOptions) { + partial = env; + } + break; + } + + if (!partial || !partial.networkOptions) { + throw new Error(`Unsupported env`); + } + } else { + partial = SUPPORTED_ENVS[this.defaultName || EnvNames.TestNets]; + } + + return new Env(partial); + } + networkOptions: NetworkOptions; + + constructor(partial: Partial) { + Object.assign(this, partial); + } +} diff --git a/src/sdk/env/index.ts b/src/sdk/env/index.ts new file mode 100644 index 00000000..ed4b69a6 --- /dev/null +++ b/src/sdk/env/index.ts @@ -0,0 +1,3 @@ +export * from './env'; +export * from './interfaces'; +export { EnvNames } from './constants'; diff --git a/src/sdk/env/interfaces.ts b/src/sdk/env/interfaces.ts new file mode 100644 index 00000000..63df1276 --- /dev/null +++ b/src/sdk/env/interfaces.ts @@ -0,0 +1,4 @@ +import { EnvNames } from './constants'; +import { Env } from './env'; + +export type EnvLike = EnvNames | Env; diff --git a/src/helpers/abi/ERC20_ABI.ts b/src/sdk/helpers/abi/ERC20_ABI.ts similarity index 100% rename from src/helpers/abi/ERC20_ABI.ts rename to src/sdk/helpers/abi/ERC20_ABI.ts diff --git a/src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts b/src/sdk/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts similarity index 100% rename from src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts rename to src/sdk/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI.ts diff --git a/src/sdk/index.ts b/src/sdk/index.ts new file mode 100644 index 00000000..55830f09 --- /dev/null +++ b/src/sdk/index.ts @@ -0,0 +1,14 @@ +export { LiteSdk } from './sdk'; +import { Sdk } from './sdk1'; + +export * from './account'; +export * from './dto'; +export * from './env'; +export * from './interfaces'; +export * from './network'; +export * from './session'; +export * from './state'; +export * from './wallet'; + +export { Sdk }; +export default Sdk; \ No newline at end of file diff --git a/src/sdk/interfaces.ts b/src/sdk/interfaces.ts new file mode 100644 index 00000000..888b991a --- /dev/null +++ b/src/sdk/interfaces.ts @@ -0,0 +1,14 @@ +import { StateStorage } from './state'; +import { SessionStorage } from './session'; +import { NetworkNames } from './network'; +import { EnvLike } from './env'; + +export interface SdkOptions { + env: EnvLike; + networkName: NetworkNames; + stateStorage?: StateStorage; + sessionStorage?: SessionStorage; + omitWalletProviderNetworkCheck?: boolean; + bundlerRpcUrl: string; + rpcProviderUrl?: string; +} diff --git a/src/sdk/network/__mocks__/network.service.ts b/src/sdk/network/__mocks__/network.service.ts new file mode 100644 index 00000000..ee9c3644 --- /dev/null +++ b/src/sdk/network/__mocks__/network.service.ts @@ -0,0 +1,35 @@ +import { mockService } from '../../../testing'; +import { ObjectSubject } from '../../common'; +import { NetworkNames } from '../constants'; +import { Network } from '../interfaces'; + +const network$ = new ObjectSubject(null); +const chainId$ = network$.observeKey('chainId'); +const defaultNetwork: Network = { + name: NetworkNames.LocalA, + chainId: 9999, +}; + +const supportedNetworks = [defaultNetwork]; + +const mocked = { + network$, + chainId$, + defaultNetwork, + supportedNetworks, + useDefaultNetwork: jest.fn(), + switchNetwork: jest.fn(), + isNetworkNameSupported: jest.fn(), + getContractAddress: jest.fn(), + getAccountByteCodeHash: jest.fn(), +}; + +Object.defineProperty(mocked, 'network', { + get: jest.fn(() => network$.value), +}); + +Object.defineProperty(mocked, 'chainId', { + get: jest.fn(() => network$?.value?.chainId), +}); + +export const NetworkService = mockService(mocked); diff --git a/src/sdk/network/constants.ts b/src/sdk/network/constants.ts new file mode 100644 index 00000000..2b791e32 --- /dev/null +++ b/src/sdk/network/constants.ts @@ -0,0 +1,39 @@ +import { NetworkConfig } from "."; + +export enum NetworkNames { + Mumbai = 'mumbai', +} + +export const NETWORK_NAME_TO_CHAIN_ID: { + [key: string]: number; +} = { + [NetworkNames.Mumbai]: 80001, +}; + +export const Networks: { + [key: string]: NetworkConfig +} = { + [NetworkNames.Mumbai]: { + chainId: 80001, + bundler: 'https://mumbai-bundler.etherspot.io', + contracts: { + entryPoint: '0x0576a174D229E3cFA37253523E645A78A0C91B57', + walletFactory: '0x8C842380d657fb3826C46D3666e977C7A227cFA6', + uniswapV3SwapRouter: '0xE592427A0AEce92De3Edee1F18E0157C05861564', + }, + paymaster: { + use: false, + url: '', + }, + }, +}; + +export const CHAIN_ID_TO_NETWORK_NAME: { [key: number]: NetworkNames } = Object.entries( + NETWORK_NAME_TO_CHAIN_ID, +).reduce( + (result, [networkName, chainId]) => ({ + ...result, + [chainId]: networkName, + }), + {}, +); diff --git a/src/sdk/network/index.ts b/src/sdk/network/index.ts new file mode 100644 index 00000000..7b7528b6 --- /dev/null +++ b/src/sdk/network/index.ts @@ -0,0 +1,4 @@ +export * from './interfaces'; +export * from './network.service'; +export * from './utils'; +export { NetworkNames } from './constants'; diff --git a/src/sdk/network/interfaces.ts b/src/sdk/network/interfaces.ts new file mode 100644 index 00000000..fda87e23 --- /dev/null +++ b/src/sdk/network/interfaces.ts @@ -0,0 +1,24 @@ +import { NetworkNames } from './constants'; + +export interface Network { + name: NetworkNames; + chainId: number; +} + +export interface NetworkConfig { + chainId: number; + bundler: string; + contracts: { + entryPoint: string; + walletFactory: string; + uniswapV3SwapRouter: string; + }; + paymaster: { + use: boolean; + url: string; + }; +}; + +export interface NetworkOptions { + supportedNetworkNames: NetworkNames[]; +} diff --git a/src/sdk/network/network.service.ts b/src/sdk/network/network.service.ts new file mode 100644 index 00000000..bda96471 --- /dev/null +++ b/src/sdk/network/network.service.ts @@ -0,0 +1,75 @@ +import { ContractNames, getContractAddress } from '@etherspot/contracts'; +import { Observable } from 'rxjs'; +import { NetworkConfig } from '.'; +import { ObjectSubject, Service, Exception, prepareAddress } from '../common'; +import { NETWORK_NAME_TO_CHAIN_ID, NetworkNames, Networks } from './constants'; +import { Network, NetworkOptions } from './interfaces'; + +export class NetworkService extends Service { + readonly network$ = new ObjectSubject(null); + readonly chainId$: Observable; + readonly defaultNetwork: Network; + readonly supportedNetworks: Network[]; + readonly externalContractAddresses = new Map(); + + constructor(private options: NetworkOptions, defaultNetworkName?: NetworkNames) { + super(); + + const { supportedNetworkNames } = options; + + this.supportedNetworks = supportedNetworkNames + .map((name) => { + const chainId = NETWORK_NAME_TO_CHAIN_ID[name]; + return !chainId + ? null + : { + chainId, + name, + }; + }) + .filter((value) => !!value); + + if (!this.supportedNetworks.length) { + throw new Exception('Invalid network config'); + } + + this.defaultNetwork = defaultNetworkName + ? this.supportedNetworks.find(({ name }) => name === defaultNetworkName) + : this.supportedNetworks[0]; + + if (!this.defaultNetwork) { + throw new Exception('Unsupported network'); + } + + this.chainId$ = this.network$.observeKey('chainId'); + } + + get network(): Network { + return this.network$.value; + } + + get chainId(): number { + return this.network ? this.network.chainId : null; + } + + useDefaultNetwork(): void { + this.network$.next(this.defaultNetwork); + } + + switchNetwork(networkName: NetworkNames): void { + this.network$.next(this.supportedNetworks.find(({ name }) => name === networkName) || null); + } + + isNetworkNameSupported(networkName: string): boolean { + return !!this.supportedNetworks.find(({ name }) => name === networkName); + } + + getNetworkConfig(networkName: NetworkNames): NetworkConfig { + const key = networkName; + const networkConfig = Networks[key]; + if (!networkConfig) { + throw new Error(`No network config found for network name '${key}'`); + } + return networkConfig; + } +} diff --git a/src/sdk/network/utils/index.ts b/src/sdk/network/utils/index.ts new file mode 100644 index 00000000..1619600c --- /dev/null +++ b/src/sdk/network/utils/index.ts @@ -0,0 +1,2 @@ +export * from './prepare-network-name'; +export * from './network-name-to-chain-id'; diff --git a/src/sdk/network/utils/network-name-to-chain-id.ts b/src/sdk/network/utils/network-name-to-chain-id.ts new file mode 100644 index 00000000..d40f88c7 --- /dev/null +++ b/src/sdk/network/utils/network-name-to-chain-id.ts @@ -0,0 +1,7 @@ +import { NetworkNames, NETWORK_NAME_TO_CHAIN_ID } from '../constants'; + +export function networkNameToChainId(networkName: NetworkNames): number { + return NETWORK_NAME_TO_CHAIN_ID[networkName] || null; +} + +export { NETWORK_NAME_TO_CHAIN_ID }; diff --git a/src/sdk/network/utils/prepare-network-name.ts b/src/sdk/network/utils/prepare-network-name.ts new file mode 100644 index 00000000..a39660d7 --- /dev/null +++ b/src/sdk/network/utils/prepare-network-name.ts @@ -0,0 +1,23 @@ +import { NetworkNames, NETWORK_NAME_TO_CHAIN_ID, CHAIN_ID_TO_NETWORK_NAME } from '../constants'; + +export function prepareNetworkName(networkNameOrChainId: string | number): NetworkNames { + let result: NetworkNames = null; + + if (networkNameOrChainId) { + if (typeof networkNameOrChainId === 'string') { + if (networkNameOrChainId.startsWith('0x')) { + networkNameOrChainId = parseInt(networkNameOrChainId.slice(2), 16) || 0; + } else { + const chainId = NETWORK_NAME_TO_CHAIN_ID[networkNameOrChainId]; + + networkNameOrChainId = chainId ? chainId : parseInt(networkNameOrChainId, 10) || 0; + } + } + + if (typeof networkNameOrChainId === 'number') { + result = CHAIN_ID_TO_NETWORK_NAME[networkNameOrChainId] || null; + } + } + + return result; +} diff --git a/src/sdk.ts b/src/sdk/sdk.ts similarity index 96% rename from src/sdk.ts rename to src/sdk/sdk.ts index 8aefaa32..7c22636f 100644 --- a/src/sdk.ts +++ b/src/sdk/sdk.ts @@ -22,14 +22,14 @@ export class LiteSdk { ) { this.rpcProvider = new ethers.providers.JsonRpcProvider(provider); this.wallet = new Wallet(privateKey, this.rpcProvider); - this.EtherspotWallet = new EtherspotWalletAPI({ - provider: this.wallet.provider, - owner: this.wallet, - index: 0, - entryPointAddress: entryPoint, - factoryAddress: accountFactory, - paymasterAPI: paymasterAPI, - }); + // this.EtherspotWallet = new EtherspotWalletAPI({ + // provider: this.wallet.provider, + // owner: this.wallet, + // index: 0, + // entryPointAddress: entryPoint, + // factoryAddress: accountFactory, + // paymasterAPI: paymasterAPI, + // }); this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); } diff --git a/src/sdk/sdk1.ts b/src/sdk/sdk1.ts new file mode 100644 index 00000000..b9059d56 --- /dev/null +++ b/src/sdk/sdk1.ts @@ -0,0 +1,214 @@ +import { BehaviorSubject } from 'rxjs'; +import { State, StateService } from './state'; +import { isWalletProvider, WalletProviderLike } from './wallet'; +import { SdkOptions } from './interfaces'; +import { Network } from "./network"; +import { Env } from "./env"; +import { Exception, getGasFee } from "./common"; +// import { EtherspotWalletAPI, VerifyingPaymasterAPI } from './base'; +import { BigNumber, ethers, providers, Wallet } from 'ethers'; +import { Networks } from './network/constants'; +import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; +import { EtherspotWalletAPI, HttpRpcClient } from './base'; +import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; +import { CreateSessionDto, SignMessageDto, validateDto } from './dto'; +import { Session } from '.'; +import { ERC20__factory } from './contracts'; + +/** + * Sdk + * + * @category Sdk + */ +export class Sdk { + + private EtherspotWallet: EtherspotWalletAPI; + private bundler: HttpRpcClient; + + constructor(walletProvider: WalletProviderLike, optionsLike: SdkOptions) { + + if (!isWalletProvider(walletProvider)) { + throw new Exception('Invalid wallet provider'); + } + + const env = Env.prepare(optionsLike.env); + + const { + networkName, // + rpcProviderUrl, + bundlerRpcUrl, + } = optionsLike; + + + let provider; + + if (rpcProviderUrl) { + provider = new providers.JsonRpcProvider(rpcProviderUrl); + } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); + + this.EtherspotWallet = new EtherspotWalletAPI({ + owner: new Wallet(walletProvider.privateKey, provider), + provider, + walletProvider, + optionsLike, + entryPointAddress: Networks[networkName].contracts.entryPoint, + factoryAddress: Networks[networkName].contracts.walletFactory, + paymasterAPI: null, + }) + + this.bundler = new HttpRpcClient(bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); + + } + + + // exposes + get state(): StateService { + return this.EtherspotWallet.services.stateService; + } + + get state$(): BehaviorSubject { + return this.EtherspotWallet.services.stateService.state$; + } + + get supportedNetworks(): Network[] { + return this.EtherspotWallet.services.networkService.supportedNetworks; + } + + /** + * destroys + */ + destroy(): void { + this.EtherspotWallet.context.destroy(); + } + + // wallet + + /** + * signs message + * @param dto + * @return Promise + */ + async signMessage(dto: SignMessageDto): Promise { + const { message } = await validateDto(dto, SignMessageDto); + + await this.EtherspotWallet.require({ + network: false, + }); + + return this.EtherspotWallet.services.walletService.signMessage(message); + } + + // session + + /** + * creates session + * @param dto + * @return Promise + */ + async createSession(dto: CreateSessionDto = {}): Promise { + const { ttl, fcmToken } = await validateDto(dto, CreateSessionDto); + + await this.EtherspotWallet.require(); + + return this.EtherspotWallet.services.sessionService.createSession(ttl, fcmToken); + } + + async getCounterFactualAddress(): Promise { + return this.EtherspotWallet.getCounterFactualAddress(); + } + + + async prefundIfRequired(amount: string, tokenAddress?: string): Promise { + try { + const ewalletAddress = await this.getCounterFactualAddress(); + + if (tokenAddress) { + const token = ethers.utils.getAddress(tokenAddress); + const erc20Contract = ERC20__factory.connect(token, this.EtherspotWallet.services.walletService.getWalletProvider()); + const dec = await erc20Contract.functions.decimals(); + const approveData = erc20Contract.interface.encodeFunctionData('approve', [this.state.walletAddress, ethers.utils.parseUnits(amount, dec)]) + const transactionData = erc20Contract.interface.encodeFunctionData('transferFrom', [this.state.walletAddress, ewalletAddress, ethers.utils.parseUnits(amount, dec)]) + const balance = await erc20Contract.functions.balanceOf(ewalletAddress) + if (balance[0].lt(ethers.utils.parseEther(amount))) { + + const approvetx = await this.EtherspotWallet.services.walletService.sendTransaction({ + to: tokenAddress, // EtherspotWallet address + data: approveData, // approval data + gasLimit: ethers.utils.hexlify(500000), + }); + + await approvetx.wait(); + console.log('approvetx: ', approvetx); + + const tx = await this.EtherspotWallet.services.walletService.sendTransaction({ + to: tokenAddress, // EtherspotWallet address + data: transactionData, // transferFrom data + gasLimit: ethers.utils.hexlify(500000), + }); + await tx.wait(); + return `Transfer successful. Account funded with ${amount} ${await erc20Contract.symbol()}`; + } else { + return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther( + balance[0], + )} ${await erc20Contract.symbol()}`; + } + } else { + console.log('address: ', ewalletAddress); + const balance = await this.EtherspotWallet.provider.getBalance(ewalletAddress); + + // Check if wallet balance is less than the amount to transfer + if (balance.lt(ethers.utils.parseEther(amount))) { + // Transfer funds to the wallet + const tx = await this.EtherspotWallet.services.walletService.sendTransaction({ + to: ewalletAddress, // EtherspotWallet address + data: '0x', // no data + value: ethers.utils.parseEther(amount), // 0.1 MATIC + gasLimit: ethers.utils.hexlify(50000), + }); + await tx.wait(); + return `Transfer successful. Account funded with ${amount} ${tx}`; + } else { + return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther(balance)}`; + } + } + } catch (e) { + console.log(e); + return `Transfer failed: ${e.message}`; + } + } + + async sign(tx: TransactionDetailsForUserOp) { + const gas = await this.getGasFee(); + + return this.EtherspotWallet.createSignedUserOp({ + ...tx, + ...gas, + }); + } + + async getGasFee() { + return getGasFee(this.EtherspotWallet.provider as providers.JsonRpcProvider); + } + + async send(userOp: UserOperationStruct) { + return this.bundler.sendUserOpToBundler(userOp); + } + + async getUserOpReceipt(userOpHash: string, timeout = 60000, interval = 5000): Promise { + const block = await this.EtherspotWallet.provider.getBlock('latest'); + const endtime = Date.now() + timeout; + while (Date.now() < endtime) { + const events = await this.EtherspotWallet.epView.queryFilter( + this.EtherspotWallet.epView.filters.UserOperationEvent(userOpHash), + Math.max(100, block.number - 100), + ); + if (events.length > 0) { + console.log(events[0].args.actualGasUsed.toString()); + return events[0].transactionHash; + } + await new Promise((resolve) => setTimeout(resolve, interval)); + } + return null; + } + +} diff --git a/src/sdk/session/__mocks__/session.service.ts b/src/sdk/session/__mocks__/session.service.ts new file mode 100644 index 00000000..08760f1f --- /dev/null +++ b/src/sdk/session/__mocks__/session.service.ts @@ -0,0 +1,6 @@ +import { mockService } from '../../../testing'; + +export const SessionService = mockService({ + verifySession: jest.fn(), + createSession: jest.fn(), +}); diff --git a/src/sdk/session/classes/index.ts b/src/sdk/session/classes/index.ts new file mode 100644 index 00000000..1ae27f41 --- /dev/null +++ b/src/sdk/session/classes/index.ts @@ -0,0 +1 @@ +export * from './session'; diff --git a/src/sdk/session/classes/session.ts b/src/sdk/session/classes/session.ts new file mode 100644 index 00000000..2a00f0f7 --- /dev/null +++ b/src/sdk/session/classes/session.ts @@ -0,0 +1,54 @@ +import { Type } from 'class-transformer'; +import { Account } from '../../account'; +import { BaseClass } from '../../common'; +import { StoredSession } from '../interfaces'; + +export class Session extends BaseClass { + static fromStoredSession(storedSession: StoredSession): Session { + let result: Session; + + try { + const { token, ttl } = storedSession; + const expireAt = new Date(storedSession.expireAt); + + result = new Session({ + token, + ttl, + expireAt, + }); + } catch (err) { + result = null; + } + + return result; + } + + static TTL_MARGIN = 3000; + + token: string; + + ttl: number; + + @Type(() => Account) + account?: Account; + + @Type(() => Date) + expireAt?: Date; + + refresh?(): void { + const now = new Date(); + this.expireAt = new Date(now.getTime() + this.ttl * 1000); + } + + verify?(): boolean { + return this.expireAt.getTime() + Session.TTL_MARGIN > Date.now(); + } + + toStoredSession?(): StoredSession { + return { + token: this.token, + ttl: this.ttl, + expireAt: this.expireAt, + }; + } +} diff --git a/src/sdk/session/index.ts b/src/sdk/session/index.ts new file mode 100644 index 00000000..5b67889b --- /dev/null +++ b/src/sdk/session/index.ts @@ -0,0 +1,4 @@ +export * from './classes'; +export * from './interfaces'; +export * from './session.service'; +export * from './session.storage'; diff --git a/src/sdk/session/interfaces.ts b/src/sdk/session/interfaces.ts new file mode 100644 index 00000000..a3a3b4ca --- /dev/null +++ b/src/sdk/session/interfaces.ts @@ -0,0 +1,15 @@ +export interface StoredSession { + token: string; + ttl: number; + expireAt: D; +} + +export interface SessionOptions { + storage?: SessionStorageLike; +} + +export interface SessionStorageLike { + setSession(walletAddress: string, session: StoredSession): Promise; + + getSession(walletAddress: string): Promise; +} diff --git a/src/sdk/session/session.service.ts b/src/sdk/session/session.service.ts new file mode 100644 index 00000000..13f04e32 --- /dev/null +++ b/src/sdk/session/session.service.ts @@ -0,0 +1,130 @@ +import { utils } from 'ethers'; +import { switchMap } from 'rxjs/operators'; +import { Service, HeaderNames } from '../common'; +import { Session } from './classes'; +import { createSessionMessage } from './utils'; +import { SessionOptions, SessionStorageLike } from './interfaces'; +import { SessionStorage } from './session.storage'; + +export class SessionService extends Service { + private readonly storage: SessionStorageLike; + private session: Session = null; + + constructor(options: SessionOptions = {}) { + super(); + + const { storage } = options; + + this.storage = storage ? storage : new SessionStorage(); + } + + get headers(): { [key: string]: any } { + return this.session + ? { + [HeaderNames.AuthToken]: this.session.token, + } + : {}; + } + + get sessionTtl(): number { + return this.session ? this.session.ttl : undefined; + } + + async verifySession(): Promise { + await this.restoreSession(); + + if (this.session && !this.session.verify()) { + this.session = null; + } + + if (!this.session) { + await this.createSession(); + } else { + await this.refreshSession(); + } + } + + async refreshSession(): Promise { + this.session.refresh(); + + await this.storeSession(); + } + + async createSession(ttl?: number, fcmToken?: string): Promise { + const { walletService } = this.services; + const { walletAddress } = walletService; + + let session: Session; + let error: Error; + let signerAddress: string; + + try { + const message = createSessionMessage("Etherspot 4337"); + const messageHash = utils.arrayify(utils.hashMessage(message)); + + const signature = await walletService.signMessage(message); + + signerAddress = utils.recoverAddress(messageHash, signature); + } catch (err) { + session = null; + error = err; + } + + if (session) { + delete session.account; + + session.refresh(); + + if (signerAddress !== walletAddress) { + const { providerType } = walletService.wallet; + + walletService.wallet$.next({ + address: signerAddress, + providerType, + }); + } + } + + if (error) { + throw error; + } + + this.session = session; + + await this.storeSession(); + + return session; + } + + protected onInit() { + const { walletAddress$ } = this.services.walletService; + + this.addSubscriptions( + walletAddress$ + .pipe(switchMap(() => this.restoreSession())) // + .subscribe(), + ); + } + + private async storeSession(): Promise { + const { walletService } = this.services; + const { walletAddress } = walletService; + + await this.storage.setSession(walletAddress, this.session ? this.session.toStoredSession() : null); + } + + private async restoreSession(): Promise { + let session: Session = null; + + const { walletService } = this.services; + const { walletAddress } = walletService; + + if (walletAddress) { + const storedSession = await this.storage.getSession(walletAddress); + + session = storedSession ? Session.fromStoredSession(storedSession) : null; + } + + this.session = session; + } +} diff --git a/src/sdk/session/session.storage.ts b/src/sdk/session/session.storage.ts new file mode 100644 index 00000000..fafc5b4a --- /dev/null +++ b/src/sdk/session/session.storage.ts @@ -0,0 +1,13 @@ +import { StoredSession, SessionStorageLike } from './interfaces'; + +export class SessionStorage implements SessionStorageLike { + private data = new Map(); + + async setSession(walletAddress: string, session: StoredSession): Promise { + this.data.set(walletAddress, session); + } + + async getSession(walletAddress: string): Promise { + return this.data.get(walletAddress) || null; + } +} diff --git a/src/sdk/session/utils/create-session-message.ts b/src/sdk/session/utils/create-session-message.ts new file mode 100644 index 00000000..2bcb218c --- /dev/null +++ b/src/sdk/session/utils/create-session-message.ts @@ -0,0 +1,12 @@ +/** + * @ignore + */ +export function createSessionMessage(code: string): string { + return [ + 'ETHERspot Authentication 😎 ', // + '', + code, + '', + `it will expire in less than 30 seconds`, + ].join('\n'); +} diff --git a/src/sdk/session/utils/index.ts b/src/sdk/session/utils/index.ts new file mode 100644 index 00000000..fa831245 --- /dev/null +++ b/src/sdk/session/utils/index.ts @@ -0,0 +1 @@ +export * from './create-session-message'; diff --git a/src/sdk/state/classes/index.ts b/src/sdk/state/classes/index.ts new file mode 100644 index 00000000..da885434 --- /dev/null +++ b/src/sdk/state/classes/index.ts @@ -0,0 +1 @@ +export * from './state'; diff --git a/src/sdk/state/classes/state.ts b/src/sdk/state/classes/state.ts new file mode 100644 index 00000000..31b9c3b5 --- /dev/null +++ b/src/sdk/state/classes/state.ts @@ -0,0 +1,14 @@ +import { Type } from 'class-transformer'; +import { Network } from '../../network'; +import { Account } from '../../account'; +import { Wallet } from '../../wallet'; + +export class State { + wallet: Wallet; + + @Type(() => Account) + account: Account; + + network: Network; + +} diff --git a/src/sdk/state/index.ts b/src/sdk/state/index.ts new file mode 100644 index 00000000..1c7944f4 --- /dev/null +++ b/src/sdk/state/index.ts @@ -0,0 +1,3 @@ +export * from './classes'; +export * from './interfaces'; +export * from './state.service'; diff --git a/src/sdk/state/interfaces.ts b/src/sdk/state/interfaces.ts new file mode 100644 index 00000000..df89d389 --- /dev/null +++ b/src/sdk/state/interfaces.ts @@ -0,0 +1,13 @@ +import { NetworkNames } from '../network'; +import { State } from './classes'; + +export type StateStorageState = Omit; + +export interface StateStorage { + setState(walletAddress: string, networkName: NetworkNames, state: StateStorageState): Promise; + getState(walletAddress: string, networkName: NetworkNames): Promise; +} + +export interface StateOptions { + storage?: StateStorage; +} diff --git a/src/sdk/state/state.service.ts b/src/sdk/state/state.service.ts new file mode 100644 index 00000000..082ac6bb --- /dev/null +++ b/src/sdk/state/state.service.ts @@ -0,0 +1,158 @@ +import { plainToClass } from 'class-transformer'; +import { BehaviorSubject, Observable, combineLatest } from 'rxjs'; +import { filter, map, tap } from 'rxjs/operators'; +import { Service } from '../common'; +import { Account } from '../account'; +import { Wallet } from '../wallet'; +import { State } from './classes'; +import { StateOptions, StateStorageState } from './interfaces'; +import { Network } from '../network'; + +export class StateService extends Service implements State { + readonly state$ = new BehaviorSubject(null); + + constructor(private options: StateOptions = {}) { + super(); + } + + get state(): State { + return this.state$.value; + } + + get wallet$(): BehaviorSubject { + return this.services.walletService.wallet$; + } + + get wallet(): Wallet { + return this.services.walletService.wallet; + } + + get walletAddress$(): Observable { + return this.services.walletService.walletAddress$; + } + + get walletAddress(): string { + return this.services.walletService.walletAddress; + } + + get account$(): BehaviorSubject { + return this.services.accountService.account$; + } + + get account(): Account { + return this.services.accountService.account; + } + + get accountAddress$(): Observable { + return this.services.accountService.accountAddress$; + } + + get accountAddress(): string { + return this.services.accountService.accountAddress; + } + + get network(): Network { + return this.services.networkService.network; + } + + get network$(): BehaviorSubject { + return this.services.networkService.network$; + } + + restore(state: StateStorageState): this { + const { + accountService: { account$ }, + } = this.services; + + if (state) { + state = plainToClass(State, state); + const { account } = state; + + account$.next(account); + } + + return this; + } + + dump(): StateStorageState { + return { + account: this.account, + }; + } + + protected onInit() { + const { storage } = this.options || {}; + + const { + walletService: { wallet$, wallet }, + accountService: { account$ }, + networkService: { network$, network }, + } = this.services; + + const callback = () => { + this.addSubscriptions( + combineLatest([ + wallet$, // + account$, + network$, + ]) + .pipe( + map( + ([ + wallet, // + account, + network, + ]: [ + State['wallet'], // + State['account'], + State['network'], + ]) => ({ + wallet, // + account, + network, + }), + ), + ) + .subscribe(this.state$), + + !storage + ? null + : this.state$ + .pipe( + filter( + (state) => + state && // + state.wallet && + state.wallet.address && + state.network && + state.network.name && + true, + ), + tap((state) => { + const { wallet, network, ...storageState } = state; + + this.error$.catch( + () => storage.setState(wallet.address, network.name, storageState), // + ); + }), + ) + .subscribe(), + ); + }; + + if (storage) { + this.error$.catch(async () => { + const walletAddress = wallet && wallet.address ? wallet.address : null; + const networkName = network && network.name ? network.name : null; + + if (walletAddress && networkName) { + const state = await storage.getState(walletAddress, networkName); + + this.restore(state); + } + }, callback); + } else { + callback(); + } + } +} diff --git a/src/sdk/wallet/index.ts b/src/sdk/wallet/index.ts new file mode 100644 index 00000000..49fdfbc8 --- /dev/null +++ b/src/sdk/wallet/index.ts @@ -0,0 +1,3 @@ +export * from './interfaces'; +export * from './providers'; +export * from './wallet.service'; diff --git a/src/sdk/wallet/interfaces.ts b/src/sdk/wallet/interfaces.ts new file mode 100644 index 00000000..12d9a488 --- /dev/null +++ b/src/sdk/wallet/interfaces.ts @@ -0,0 +1,9 @@ +export interface Wallet { + address: string; + providerType: string; +} + +export interface WalletOptions { + omitProviderNetworkCheck: boolean; + provider?: string; +} diff --git a/src/sdk/wallet/providers/dynamic.wallet-provider.ts b/src/sdk/wallet/providers/dynamic.wallet-provider.ts new file mode 100644 index 00000000..6fa2098e --- /dev/null +++ b/src/sdk/wallet/providers/dynamic.wallet-provider.ts @@ -0,0 +1,33 @@ +import { NetworkNames, prepareNetworkName } from '../../network'; +import { prepareAddress, UniqueSubject } from '../../common'; +import { WalletProvider } from './interfaces'; +import { TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; + +export abstract class DynamicWalletProvider implements WalletProvider { + readonly address$ = new UniqueSubject(); + readonly networkName$ = new UniqueSubject(); + + protected constructor(readonly type: string) { + // + } + + get address(): string { + return this.address$.value; + } + + get networkName(): NetworkNames { + return this.networkName$.value; + } + + abstract signMessage(message: any): Promise; + + abstract sendTransaction(transaction: TransactionRequest): Promise; + + protected setAddress(address: string): void { + this.address$.next(prepareAddress(address)); + } + + protected setNetworkName(networkNameOrChainId: string | number): void { + this.networkName$.next(prepareNetworkName(networkNameOrChainId)); + } +} diff --git a/src/sdk/wallet/providers/index.ts b/src/sdk/wallet/providers/index.ts new file mode 100644 index 00000000..5c342a83 --- /dev/null +++ b/src/sdk/wallet/providers/index.ts @@ -0,0 +1,8 @@ +export * from './dynamic.wallet-provider'; +export * from './interfaces'; +export * from './key.wallet-provider'; +export * from './meta-mask.wallet-provider'; +export * from './utils'; +export * from './wallet-connect.wallet-provider'; +export * from './web3.wallet-provider'; +export * from './web3eip1193.wallet-provider'; diff --git a/src/sdk/wallet/providers/interfaces.ts b/src/sdk/wallet/providers/interfaces.ts new file mode 100644 index 00000000..abed3aae --- /dev/null +++ b/src/sdk/wallet/providers/interfaces.ts @@ -0,0 +1,41 @@ +import { BytesLike, providers, Wallet } from 'ethers'; +import { UniqueSubject } from '../../common'; +import { NetworkNames } from '../../network'; + +export interface WalletProvider { + readonly type?: string; + readonly wallet?: Wallet; + readonly address: string; + readonly address$?: UniqueSubject; + readonly networkName?: NetworkNames; + readonly networkName$?: UniqueSubject; + + signMessage(message: BytesLike): Promise; + sendTransaction(transaction: providers.TransactionRequest): Promise +} + +export interface Web3Provider { + send(payload: any, callback: (err: any, response?: any) => any): any; +} + +export interface RequestArguments { + method: string; + params?: unknown[] | object; +} +export interface Web3eip1193Provider { + request(args: RequestArguments): any; +} + +export interface WalletConnectConnector { + accounts: string[]; + chainId: number; + signPersonalMessage(params: any[]): Promise; + sendTransaction(transaction: providers.TransactionRequest): Promise; + on(event: string, callback: (error: Error | null, payload: any | null) => void): void; +} + +export interface WalletLike { + privateKey: string; +} + +export type WalletProviderLike = WalletLike; diff --git a/src/sdk/wallet/providers/key.wallet-provider.ts b/src/sdk/wallet/providers/key.wallet-provider.ts new file mode 100644 index 00000000..73d4bf80 --- /dev/null +++ b/src/sdk/wallet/providers/key.wallet-provider.ts @@ -0,0 +1,35 @@ +import { Signer } from '@ethersproject/abstract-signer'; +import { Wallet, BytesLike, providers } from 'ethers'; +import { WalletProvider } from './interfaces'; + +export class KeyWalletProvider implements WalletProvider { + readonly type = 'Key'; + readonly address: string; + + readonly wallet: Wallet; + + readonly signer: Signer; + + readonly provider: providers.JsonRpcProvider; + + constructor(privateKey: string, provider: providers.JsonRpcProvider) { + console.log('key based provider', provider, privateKey); + this.wallet = new Wallet(privateKey, provider); + + this.signer = new Wallet(privateKey, provider) + + const { address } = this.wallet; + + this.address = address; + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.wallet.sendTransaction(transaction) + } + + async signMessage(message: BytesLike): Promise { + console.log('sign: ', message); + return this.wallet.signMessage(message); + } + +} diff --git a/src/sdk/wallet/providers/meta-mask.wallet-provider.ts b/src/sdk/wallet/providers/meta-mask.wallet-provider.ts new file mode 100644 index 00000000..b45a86ed --- /dev/null +++ b/src/sdk/wallet/providers/meta-mask.wallet-provider.ts @@ -0,0 +1,97 @@ +import { BytesLike, providers } from 'ethers'; +import { toHex } from '../../common'; +import { DynamicWalletProvider } from './dynamic.wallet-provider'; + +declare const window: Window & { + ethereum: { + isMetaMask: boolean; + autoRefreshOnNetworkChange: boolean; + networkVersion: string; + selectedAddress: string; + + enable(): Promise; + + on(event: string, callback: (data: T) => any): void; + + request(args: { method: string; params?: any[] }): Promise; + }; +}; + +export class MetaMaskWalletProvider extends DynamicWalletProvider { + static get ethereum(): typeof window['ethereum'] { + return this.detect() ? window.ethereum : null; + } + + static detect(): boolean { + return !!window?.ethereum?.isMetaMask; + } + + static async connect(): Promise { + if (!this.instance) { + if (!this.detect()) { + throw new Error('MetaMask not found'); + } + + this.instance = new MetaMaskWalletProvider(); + + await this.instance.connect(); + } + + if (!this.instance.address) { + throw new Error('Can not connect to MetaMask'); + } + + return this.instance; + } + + private static instance: MetaMaskWalletProvider; + + protected constructor() { + super('MetaMask'); + } + + async signMessage(message: BytesLike): Promise { + return this.sendRequest('personal_sign', [ + this.address, // + toHex(message), + ]); + } + + protected async connect(): Promise { + const { ethereum } = window; + + ethereum.autoRefreshOnNetworkChange = false; + ethereum.on('accountsChanged', ([address]) => this.setAddress(address)); + ethereum.on('chainChanged', () => { + window.location.reload(); + }); + + try { + const chainId = await this.sendRequest('eth_chainId'); + + this.setNetworkName(chainId); + + const [address] = await this.sendRequest('eth_requestAccounts'); + + this.setAddress(address); + } catch (err) { + // + } + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.sendRequest('eth_sendTransaction', [{ + from: this.address, // The user's active address. + ...transaction, + }]) + } + + protected async sendRequest(method: string, params?: any): Promise { + const { ethereum } = window; + + return ethereum.request({ + method, + params, + }); + } +} diff --git a/src/sdk/wallet/providers/utils/index.ts b/src/sdk/wallet/providers/utils/index.ts new file mode 100644 index 00000000..5baad33a --- /dev/null +++ b/src/sdk/wallet/providers/utils/index.ts @@ -0,0 +1 @@ +export * from './is-wallet-provider'; diff --git a/src/sdk/wallet/providers/utils/is-wallet-provider.ts b/src/sdk/wallet/providers/utils/is-wallet-provider.ts new file mode 100644 index 00000000..e8b70a4e --- /dev/null +++ b/src/sdk/wallet/providers/utils/is-wallet-provider.ts @@ -0,0 +1,27 @@ +import { utils } from 'ethers'; +import { WalletLike, WalletProvider, WalletProviderLike } from '../interfaces'; + +export function isWalletProvider(provider: WalletProviderLike): boolean { + let result = false; + + if (provider) { + switch (typeof provider) { + case 'string': + result = utils.isHexString(provider, 32); + break; + + case 'object': + const { privateKey } = provider as WalletLike; + if (utils.isHexString(privateKey, 32)) { + result = true; + } else { + // const { type, signMessage } = provider as WalletProvider; + + // result = !!type && typeof signMessage === 'function'; + } + break; + } + } + + return result; +} diff --git a/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts b/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts new file mode 100644 index 00000000..08499a15 --- /dev/null +++ b/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts @@ -0,0 +1,68 @@ +import { BytesLike, providers } from 'ethers'; +import { toHex } from '../../common'; +import { DynamicWalletProvider } from './dynamic.wallet-provider'; +import { WalletConnectConnector } from './interfaces'; + +export class WalletConnectWalletProvider extends DynamicWalletProvider { + static connect(connector: WalletConnectConnector): WalletConnectWalletProvider { + return new WalletConnectWalletProvider(connector); + } + + protected constructor(readonly connector: WalletConnectConnector) { + super('WalletConnect'); + + try { + const { + accounts: [address], + chainId, + } = connector; + + this.setAddress(address); + this.setNetworkName(chainId); + } catch (err) { + // + } + + this.updateSessionHandler = this.updateSessionHandler.bind(this); + + connector.on('connect', this.updateSessionHandler); + connector.on('session_update', this.updateSessionHandler); + connector.on('disconnect', () => { + this.setAddress(null); + this.setNetworkName(null); + }); + } + + async signMessage(message: BytesLike): Promise { + const response = await this.connector.signPersonalMessage([ + toHex(message), // + this.address, + ]); + + return response || null; + } + + protected updateSessionHandler(error: Error, payload: { params: { accounts: string[]; chainId: number } }): void { + let address: string = null; + let chainId: number = null; + + if (!error) { + try { + ({ + accounts: [address], + chainId, + } = payload.params[0]); + } catch (err) { + address = null; + chainId = null; + } + } + + this.setAddress(address); + this.setNetworkName(chainId); + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.connector.sendTransaction(transaction); + } +} diff --git a/src/sdk/wallet/providers/web3.wallet-provider.ts b/src/sdk/wallet/providers/web3.wallet-provider.ts new file mode 100644 index 00000000..5ad2e973 --- /dev/null +++ b/src/sdk/wallet/providers/web3.wallet-provider.ts @@ -0,0 +1,99 @@ +import { BytesLike, providers } from 'ethers'; +import { prepareAddress, toHex } from '../../common'; +import { NetworkNames, prepareNetworkName } from '../../network'; +import { Web3Provider } from './interfaces'; +import { DynamicWalletProvider } from './dynamic.wallet-provider'; + +export class Web3WalletProvider extends DynamicWalletProvider { + static async connect(provider: Web3Provider, type = 'Web3'): Promise { + const result = new Web3WalletProvider(provider, type); + const connected = await result.refresh(); + return connected ? result : null; + } + + constructor(readonly web3: Web3Provider, type = 'Web3') { + super(type); + } + + get address(): string { + return this.address$.value; + } + + get networkName(): NetworkNames { + return this.networkName$.value; + } + + async refresh(): Promise { + let result = false; + + const chainId = await this.sendRequest('eth_chainId'); + const networkName = prepareNetworkName(chainId); + + if (networkName) { + const accounts = await this.sendRequest('eth_accounts'); + + if (Array.isArray(accounts) && accounts.length) { + const address = prepareAddress(accounts[0]); + + if (address) { + this.setAddress(address); + this.setNetworkName(networkName); + + result = true; + } + } + } + + return result; + } + + async signMessage(message: BytesLike): Promise { + return this.sendRequest( + 'personal_sign', + [ + this.address, // + toHex(message), + ], + this.address, + ); + } + + protected async sendRequest(method: string, params: any[] = [], from?: string): Promise { + return new Promise((resolve, reject) => { + const id = Date.now(); + + this.web3.send( + { + jsonrpc: '2.0', + method, + params, + id, + from, + }, + (err: Error, response: { result: T }) => { + if (err) { + reject(err); + return; + } + + let result: T; + + try { + ({ result } = response); + } catch (err) { + result = null; + } + + resolve(result || null); + }, + ); + }); + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.sendRequest('eth_sendTransaction', [{ + from: this.address, // The user's active address. + ...transaction, + }]) + } +} diff --git a/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts b/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts new file mode 100644 index 00000000..1145d161 --- /dev/null +++ b/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts @@ -0,0 +1,72 @@ +import { BytesLike, providers } from 'ethers'; +import { prepareAddress, toHex } from '../../common'; +import { NetworkNames, prepareNetworkName } from '../../network'; +import { Web3eip1193Provider } from './interfaces'; +import { DynamicWalletProvider } from './dynamic.wallet-provider'; + +export class Web3eip1193WalletProvider extends DynamicWalletProvider { + static async connect(provider: Web3eip1193Provider, type = 'Web3'): Promise { + const result = new Web3eip1193WalletProvider(provider, type); + const connected = await result.refresh(); + return connected ? result : null; + } + + constructor(readonly web3: Web3eip1193Provider, type = 'Web3') { + super(type); + } + + get address(): string { + return this.address$.value; + } + + get networkName(): NetworkNames { + return this.networkName$.value; + } + + async refresh(): Promise { + let result = false; + const chainId = await this.sendRequest('eth_chainId'); + const networkName = prepareNetworkName(chainId); + + if (networkName) { + const accounts = await this.sendRequest('eth_accounts'); + + if (Array.isArray(accounts) && accounts.length) { + const address = prepareAddress(accounts[0]); + + if (address) { + this.setAddress(address); + this.setNetworkName(networkName); + + result = true; + } + } + } + + return result; + } + + async signMessage(message: BytesLike): Promise { + return this.sendRequest('personal_sign', [toHex(message), this.address]); + } + + protected async sendRequest(method: string, params: any[] = []): Promise { + try { + const result = await this.web3.request({ + method, + params, + }); + + return result || null; + } catch (error) { + return error; + } + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.sendRequest('eth_sendTransaction', [{ + from: this.address, // The user's active address. + ...transaction, + }]) + } +} diff --git a/src/sdk/wallet/wallet.service.ts b/src/sdk/wallet/wallet.service.ts new file mode 100644 index 00000000..0a4d1e6a --- /dev/null +++ b/src/sdk/wallet/wallet.service.ts @@ -0,0 +1,114 @@ +import { Observable, Subscription } from 'rxjs'; +import { map, tap } from 'rxjs/operators'; +import { BytesLike, ethers, providers, Wallet as EtherWallet } from 'ethers'; +import { Service, ObjectSubject } from '../common'; +import { WalletProvider, WalletProviderLike, KeyWalletProvider, WalletLike } from './providers'; +import { Wallet, WalletOptions } from './interfaces'; + +export class WalletService extends Service { + readonly wallet$ = new ObjectSubject(); + readonly walletAddress$: Observable; + readonly rpcBundlerUrl: string; + + provider: WalletProvider; + + constructor(private providerLike: WalletProviderLike, private options: WalletOptions, public rpcUrl: string) { + super(); + this.rpcBundlerUrl = rpcUrl; + this.walletAddress$ = this.wallet$.observeKey('address'); + } + + get wallet(): Wallet { + return this.wallet$.value; + } + + get etherWallet(): Partial { + return this.wallet$.value; + } + + get walletAddress(): string { + return this.wallet ? this.wallet.address : null; + } + + get walletProvider(): WalletProvider { + return this.provider ? this.provider : null; + } + + getWalletProvider(): providers.JsonRpcProvider { + if (this.rpcUrl) return new ethers.providers.JsonRpcProvider(this.rpcUrl) + return new ethers.providers.JsonRpcProvider(this.rpcBundlerUrl) + } + + async signMessage(message: BytesLike): Promise { + return this.provider ? this.provider.signMessage(message) : null; + } + + async sendTransaction(transaction: providers.TransactionRequest): Promise { + return this.provider ? this.provider.sendTransaction(transaction) : null; + } + + protected switchWalletProvider(providerLike: WalletProviderLike): void { + let provider: WalletProvider = null; + if (providerLike) { + switch (typeof providerLike) { + case 'object': { + const { privateKey } = providerLike as WalletLike; + const walletLike = providerLike as EtherWallet; + const isNotJsonRpcProvider = walletLike.provider?.constructor.name !== 'JsonRpcProvider'; + if (privateKey && isNotJsonRpcProvider) { + provider = new KeyWalletProvider(privateKey, this.getWalletProvider()); + } else { + // provider = providerLike as WalletProvider; + } + break; + } + + case 'string': + provider = new KeyWalletProvider(providerLike, this.getWalletProvider()); + break; + } + } + + if (!provider) { + this.wallet$.next(null); + + this.removeSubscriptions(); + } else { + const { type: providerType } = provider; + + const subscriptions: Subscription[] = []; + const { address, address$ } = provider; + + if (typeof address$ !== 'undefined') { + subscriptions.push( + address$ + .pipe( + map((address) => ({ + address, + providerType, + })), + ) + .subscribe((wallet) => this.wallet$.next(wallet)), + ); + } else if (typeof address !== 'undefined') { + this.wallet$.next({ + address, + providerType, + }); + } else { + throw new Error('Invalid wallet address'); + } + + this.replaceSubscriptions(...subscriptions); + } + + this.provider = provider; + } + + protected onInit() { + if (this.providerLike) { + this.switchWalletProvider(this.providerLike); + this.providerLike = null; + } + } +} diff --git a/tsconfig.json b/tsconfig.json index 64a6eb24..68bfb4e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,17 +5,19 @@ "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, + "esModuleInterop": true, "target": "es2017", "sourceMap": false, "baseUrl": "./", "rootDir": "./", + "strict": false, "downlevelIteration": true, - "esModuleInterop": true, "lib": [ "DOM", - "ES5" - ], - "resolveJsonModule": true, + "ES5", + "es2015.collection", + "es2015.iterable" + ] }, "include": [ "./examples/**/*.ts", From a48e8686aa68e14cf776ef52c2557f1ff0d1ce0d Mon Sep 17 00:00:00 2001 From: marie-fourier Date: Sat, 27 May 2023 16:53:10 +0500 Subject: [PATCH 10/20] fix signature --- src/sdk/base/BaseAccountAPI.ts | 4 +- src/sdk/base/EtherspotWalletAPI.ts | 4 +- src/sdk/base/calcPreVerificationGas.ts | 4 +- src/sdk/common/ERC4337Utils.ts | 97 +++++-------------- src/sdk/network/constants.ts | 4 +- src/sdk/network/network.service.ts | 1 - .../wallet/providers/key.wallet-provider.ts | 1 - 7 files changed, 31 insertions(+), 84 deletions(-) diff --git a/src/sdk/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts index 5399f1b1..5f8dfc55 100644 --- a/src/sdk/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -6,7 +6,7 @@ import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp'; import { resolveProperties } from 'ethers/lib/utils'; import { PaymasterAPI } from './PaymasterAPI'; -import { ErrorSubject, Exception, getUserOpHash, packUserOp, Service } from '../common'; +import { ErrorSubject, Exception, getUserOpHash, NotPromise, packUserOp, Service } from '../common'; import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; import { AccountService, AccountTypes, CreateSessionDto, Env, EnvNames, isWalletProvider, Network, NetworkNames, NetworkService, SdkOptions, Session, SessionService, SignMessageDto, State, StateService, validateDto, WalletProviderLike, WalletService } from '..'; import { Context } from '../context'; @@ -367,7 +367,7 @@ export abstract class BaseAccountAPI { /** * ABI-encode a user operation. used for calldata cost estimation */ - packUserOp(userOp: UserOperationStruct): string { + packUserOp(userOp: NotPromise): string { return packUserOp(userOp, false); } diff --git a/src/sdk/base/EtherspotWalletAPI.ts b/src/sdk/base/EtherspotWalletAPI.ts index 079baedd..dc84706f 100644 --- a/src/sdk/base/EtherspotWalletAPI.ts +++ b/src/sdk/base/EtherspotWalletAPI.ts @@ -65,7 +65,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { * this value holds the "factory" address, followed by this account's information */ async getAccountInitCode(): Promise { - console.log('factoryAddress', this.factoryAddress, this.provider) + // console.log('factoryAddress', this.factoryAddress, this.provider) if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== '') { this.factory = EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider); @@ -104,8 +104,6 @@ export class EtherspotWalletAPI extends BaseAccountAPI { } async signUserOpHash(userOpHash: string): Promise { - // return await this.owner.signMessage(arrayify(userOpHash)); - // console.log('sign: ', await this.services.walletService.signMessage(arrayify(userOpHash)), await this.owner.signMessage(arrayify(userOpHash))) return await this.services.walletService.signMessage(arrayify(userOpHash)); } diff --git a/src/sdk/base/calcPreVerificationGas.ts b/src/sdk/base/calcPreVerificationGas.ts index 3cadf5f2..c0495cce 100644 --- a/src/sdk/base/calcPreVerificationGas.ts +++ b/src/sdk/base/calcPreVerificationGas.ts @@ -1,6 +1,6 @@ import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; -import { packUserOp } from '../common'; +import { NotPromise, packUserOp } from '../common'; import { arrayify, hexlify } from 'ethers/lib/utils'; export interface GasOverheads { @@ -64,7 +64,7 @@ export function calcPreVerificationGas( overheads?: Partial, ): number { const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) }; - const p: UserOperationStruct = { + const p: NotPromise = { // dummy values, in case the UserOp is incomplete. preVerificationGas: 21000, // dummy value, just for calldata cost signature: hexlify(Buffer.alloc(ov.sigSize, 1)), // dummy signature diff --git a/src/sdk/common/ERC4337Utils.ts b/src/sdk/common/ERC4337Utils.ts index 153fd19e..416dc595 100644 --- a/src/sdk/common/ERC4337Utils.ts +++ b/src/sdk/common/ERC4337Utils.ts @@ -30,86 +30,36 @@ function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boo return defaultAbiCoder.encode(types, values); } +// reverse "Deferrable" or "PromiseOrValue" fields +export type NotPromise = { + [P in keyof T]: Exclude> +} + /** * pack the userOperation * @param op * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. */ -export function packUserOp(op: UserOperationStruct, forSignature = true): string { +export function packUserOp (op: NotPromise, forSignature = true): string { if (forSignature) { - // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value - const userOpType = { - components: [ - { - type: 'address', - name: 'sender', - }, - { - type: 'uint256', - name: 'nonce', - }, - { - type: 'bytes', - name: 'initCode', - }, - { - type: 'bytes', - name: 'callData', - }, - { - type: 'uint256', - name: 'callGasLimit', - }, - { - type: 'uint256', - name: 'verificationGasLimit', - }, - { - type: 'uint256', - name: 'preVerificationGas', - }, - { - type: 'uint256', - name: 'maxFeePerGas', - }, - { - type: 'uint256', - name: 'maxPriorityFeePerGas', - }, - { - type: 'bytes', - name: 'paymasterAndData', - }, - { - type: 'bytes', - name: 'signature', - }, - ], - name: 'userOp', - type: 'tuple', - }; - // console.log('hard-coded userOpType', userOpType) - // console.log('from ABI userOpType', UserOpType) - let encoded = defaultAbiCoder.encode( - [userOpType as any], - [ - { - ...op, - signature: '0x', - }, - ], - ); - // remove leading word (total length) and trailing word (zero-length signature) - encoded = '0x' + encoded.slice(66, encoded.length - 64); - return encoded; + return defaultAbiCoder.encode( + ['address', 'uint256', 'bytes32', 'bytes32', + 'uint256', 'uint256', 'uint256', 'uint256', 'uint256', + 'bytes32'], + [op.sender, op.nonce, keccak256(op.initCode), keccak256(op.callData), + op.callGasLimit, op.verificationGasLimit, op.preVerificationGas, op.maxFeePerGas, op.maxPriorityFeePerGas, + keccak256(op.paymasterAndData)]) + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return defaultAbiCoder.encode( + ['address', 'uint256', 'bytes', 'bytes', + 'uint256', 'uint256', 'uint256', 'uint256', 'uint256', + 'bytes', 'bytes'], + [op.sender, op.nonce, op.initCode, op.callData, + op.callGasLimit, op.verificationGasLimit, op.preVerificationGas, op.maxFeePerGas, op.maxPriorityFeePerGas, + op.paymasterAndData, op.signature]) } - - const typevalues = (UserOpType as any).components.map((c: { name: keyof typeof op; type: string }) => ({ - type: c.type, - val: op[c.name], - })); - return encode(typevalues, forSignature); } /** @@ -121,9 +71,10 @@ export function packUserOp(op: UserOperationStruct, forSignature = true): string * @param entryPoint * @param chainId */ -export function getUserOpHash(op: UserOperationStruct, entryPoint: string, chainId: number): string { +export function getUserOpHash(op: NotPromise, entryPoint: string, chainId: number): string { const userOpHash = keccak256(packUserOp(op, true)); const enc = defaultAbiCoder.encode(['bytes32', 'address', 'uint256'], [userOpHash, entryPoint, chainId]); + console.log(userOpHash, entryPoint, chainId, enc); return keccak256(enc); } diff --git a/src/sdk/network/constants.ts b/src/sdk/network/constants.ts index 2b791e32..2adccd1b 100644 --- a/src/sdk/network/constants.ts +++ b/src/sdk/network/constants.ts @@ -17,8 +17,8 @@ export const Networks: { chainId: 80001, bundler: 'https://mumbai-bundler.etherspot.io', contracts: { - entryPoint: '0x0576a174D229E3cFA37253523E645A78A0C91B57', - walletFactory: '0x8C842380d657fb3826C46D3666e977C7A227cFA6', + entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789', + walletFactory: '0xD05a6638b11fCf28157f43dAEDb3B541CCfcC7F8', uniswapV3SwapRouter: '0xE592427A0AEce92De3Edee1F18E0157C05861564', }, paymaster: { diff --git a/src/sdk/network/network.service.ts b/src/sdk/network/network.service.ts index bda96471..f1f573ff 100644 --- a/src/sdk/network/network.service.ts +++ b/src/sdk/network/network.service.ts @@ -1,4 +1,3 @@ -import { ContractNames, getContractAddress } from '@etherspot/contracts'; import { Observable } from 'rxjs'; import { NetworkConfig } from '.'; import { ObjectSubject, Service, Exception, prepareAddress } from '../common'; diff --git a/src/sdk/wallet/providers/key.wallet-provider.ts b/src/sdk/wallet/providers/key.wallet-provider.ts index 73d4bf80..6732d80a 100644 --- a/src/sdk/wallet/providers/key.wallet-provider.ts +++ b/src/sdk/wallet/providers/key.wallet-provider.ts @@ -13,7 +13,6 @@ export class KeyWalletProvider implements WalletProvider { readonly provider: providers.JsonRpcProvider; constructor(privateKey: string, provider: providers.JsonRpcProvider) { - console.log('key based provider', provider, privateKey); this.wallet = new Wallet(privateKey, provider); this.signer = new Wallet(privateKey, provider) From 23e99c6f088509566620e3fb75b09a54039c7bf2 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 14:00:15 +0530 Subject: [PATCH 11/20] updated all functions and changed to primeSdk --- examples/02-transfer-funds.ts | 40 +- examples/03-transfer-erc20.ts | 88 +- examples/04-batch-transfer.ts | 60 -- examples/05-batch-erc20-transfer.ts | 60 -- examples/06-swap-tokens.ts | 99 -- src/common/rxjs/unique.subject.ts | 17 + src/sdk/base/BaseAccountAPI.ts | 27 +- src/sdk/base/EtherspotWalletAPI.ts | 25 +- src/sdk/base/TransactionDetailsForUserOp.ts | 7 + src/sdk/common/interfaces.ts | 13 +- .../src/wallet/EtherspotWallet__factory.ts | 43 +- .../contracts/src/wallet/EtherspotWallet.ts | 901 ++++++++++++------ src/sdk/index.ts | 7 +- src/sdk/interfaces.ts | 2 + src/sdk/network/constants.ts | 2 +- src/sdk/sdk.ts | 362 ++++--- src/sdk/sdk1.ts | 214 ----- .../wallet/providers/key.wallet-provider.ts | 1 - 18 files changed, 995 insertions(+), 973 deletions(-) delete mode 100644 examples/04-batch-transfer.ts delete mode 100644 examples/05-batch-erc20-transfer.ts delete mode 100644 examples/06-swap-tokens.ts create mode 100644 src/common/rxjs/unique.subject.ts delete mode 100644 src/sdk/sdk1.ts diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 47ec36d9..b26c0bad 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,43 +1,53 @@ -import { ethers } from 'ethers'; +import { BigNumber, BigNumberish, ethers } from 'ethers'; import { NetworkNames } from '../src/sdk/network/constants'; -import { Sdk } from '../src'; +import { PrimeSdk } from '../src'; import { getNetworkConfig } from './config'; import { EnvNames } from '../src/sdk/env'; +import { printOp } from '../src/sdk/common/OperationUtils'; // add/change these values const config = getNetworkConfig(NetworkNames.Mumbai); const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address -const value: string = '1.5'; // transfer value +const value: string = '0.01'; // transfer value async function main() { // initializating sdk... - const sdk1 = new Sdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) - console.log('address: ', sdk1.state.walletAddress) + console.log('address: ', primeSdk.state.walletAddress) // get address of EtherspotWallet... - const address: string = await sdk1.getCounterFactualAddress(); + const address: string = await primeSdk.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); // transfer some native tokens to the EtherspotWallet (if required)... - const prefunded: string = await sdk1.prefundIfRequired((+value + 0.01).toString(), '0x0998B0b3CdED25564a8d2e531D93E666FB21E99d'); + const prefunded: string = await primeSdk.depositFromKeyWallet((+value + 0.01).toString()); console.log('\x1b[33m%s\x1b[0m', prefunded); - // creating and signing userOp... - const userOp = await sdk1.sign({ - target: recipient, // recipient - value: ethers.utils.parseEther(value), // amount of native asset to send, - data: '0x', // calldata is empty since we just want to transfer ether - }); + // clear the transaction batch + await primeSdk.clearTransactionsFromBatch(); + + // add transactions to the batch + const transactionBatch = await primeSdk.addTransactionToBatch({to: recipient, value: ethers.utils.parseEther(value)}); + console.log('transactions: ', transactionBatch); + + // get balance of the account address + const balance = await primeSdk.getNativeBalance(); + + console.log('balances: ', balance); + + // sign transactions added to the batch + const op = await primeSdk.sign(); + console.log(`Signed UserOp: ${await printOp(op)}`); // sending to the bundler... - const uoHash = await sdk1.send(userOp); + const uoHash = await primeSdk.send(op); console.log(`UserOpHash: ${uoHash}`); // get transaction hash... console.log('Waiting for transaction...'); - const txHash = await sdk1.getUserOpReceipt(uoHash); + const txHash = await primeSdk.getUserOpReceipt(uoHash); console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index 51917a5c..3dd1e44a 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -1,60 +1,74 @@ -import { LiteSdk } from '../src'; -import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { printOp } from '../src/common/OperationUtils'; -import { NetworkNames, getNetworkConfig } from './config'; +import { ethers } from 'ethers'; +import { NetworkNames } from '../src/sdk/network/constants'; +import { PrimeSdk } from '../src'; + +import { getNetworkConfig } from './config'; +import { EnvNames } from '../src/sdk/env'; +import { printOp } from '../src/sdk/common/OperationUtils'; // add/change these values const config = getNetworkConfig(NetworkNames.Mumbai); -const erc20TokenAddress: string = ''; // ERC20 token address -const recipient: string = ''; // receipient wallet address -const value: string = ''; // transfer value +const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address +const value: string = '1'; // transfer value +const tokenAddress: string = '0x326C977E6efc84E512bB9C30f76E30c160eD06FB'; async function main() { - // logic for paymaster implementation - const paymasterAPI = config.paymaster.use - ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) - : undefined; // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - paymasterAPI, - ); + const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + + console.log('address: ', primeSdk.state.walletAddress) // get address of EtherspotWallet... - const address: string = await sdk.getCounterFactualAddress(); + const address: string = await primeSdk.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // transfer some of the ERC20 token to the EtherspotWallet (if required)... - const prefunded: string = await sdk.prefundIfRequired((+value + 0.01).toString(), erc20TokenAddress); + // transfer some native tokens to EtherspotWallet for gas payment (if required)... + const prefundedNative: string = await primeSdk.depositFromKeyWallet('0.01'); + console.log('\x1b[33m%s\x1b[0m', prefundedNative); + + // transfer some tokens to the EtherspotWallet (if required)... + const prefunded: string = await primeSdk.depositFromKeyWallet((+value).toString(), tokenAddress); console.log('\x1b[33m%s\x1b[0m', prefunded); - // connect to the ERC20 token contract... - const erc20 = await sdk.getERC20Instance(erc20TokenAddress); - const [symbol, decimals] = await Promise.all([erc20.symbol(), erc20.decimals()]); + // get erc20 Contract Interface + const erc20Instance = await primeSdk.getERC20Instance(tokenAddress); + + // get decimals from erc20 contract + const decimals = await erc20Instance.functions.decimals(); + + // get approval encoded data + const approvalData = await erc20Instance.interface.encodeFunctionData('approve', [address, ethers.utils.parseUnits(value, decimals)]); + + // get transferFrom encoded data + const transactionData = await erc20Instance.interface.encodeFunctionData('transfer', [recipient, ethers.utils.parseUnits(value, decimals)]) + + // clear the transaction batch + await primeSdk.clearTransactionsFromBatch(); + + // add transactions to the batch + let transactionBatch = await primeSdk.addTransactionToBatch({to: tokenAddress, data: approvalData}); + console.log('transactions: ', transactionBatch); + + // add transactions to the batch + transactionBatch = await primeSdk.addTransactionToBatch({to: tokenAddress, data: transactionData}); + console.log('transactions: ', transactionBatch); + + // get balance of the account address + const balance = await primeSdk.getNativeBalance(); - // parse transfer value to correct format - const parseAmount = sdk.formatAmount(value, decimals); - console.log(`Transferring ${value} ${symbol}...`); + console.log('balances: ', balance); - // creating and signing userOp... - const op = await sdk.sign({ - target: erc20.address, - data: erc20.interface.encodeFunctionData('transfer', [recipient, parseAmount]), - }); - console.log(`Signed UserOperation: ${await printOp(op)}`); + // sign transactions added to the batch + const op = await primeSdk.sign(); + console.log(`Signed UserOp: ${await printOp(op)}`); // sending to the bundler... - const uoHash = await sdk.send(op); + const uoHash = await primeSdk.send(op); console.log(`UserOpHash: ${uoHash}`); // get transaction hash... console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(uoHash); + const txHash = await primeSdk.getUserOpReceipt(uoHash); console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); } diff --git a/examples/04-batch-transfer.ts b/examples/04-batch-transfer.ts deleted file mode 100644 index 014a774d..00000000 --- a/examples/04-batch-transfer.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { LiteSdk } from '../src'; -import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { printOp } from '../src/common/OperationUtils'; -import { NetworkNames, getNetworkConfig } from './config'; - -// add/change these values -const config = getNetworkConfig(NetworkNames.Mumbai); -const recipients: Array = ['', '', '']; // recipient wallet addresses -const values: Array = ['', '', '']; // transfer values - -export default async function main() { - // logic for paymaster implementation - const paymasterAPI = config.paymaster.use - ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) - : undefined; - // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - paymasterAPI, - ); - - // get address of EtherspotWallet... - const address: string = await sdk.getCounterFactualAddress(); - console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - - // transfer some native tokens to the EtherspotWallet (if required)... - const totalValue: number = values.reduce((acc: number, curr: string) => { - return acc + parseFloat(curr); - }, 0); - const prefunded: string = await sdk.prefundIfRequired((+totalValue + 0.01).toString()); - console.log('\x1b[33m%s\x1b[0m', prefunded); - - // generating transaction data... - const { dest, data } = await sdk.generateBatchExecutesData(address, recipients, values); - - // creating and signing userOp... - const op = await sdk.sign({ - target: address, - data: await sdk.encodeBatch(dest, data), - }); - console.log(`Signed UserOp: ${await printOp(op)}`); - - // sending to the bundler... - const uoHash = await sdk.send(op); - console.log(`UserOpHash: ${uoHash}`); - - // get transaction hash... - console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(uoHash); - console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); -} - -main() - .catch(console.error) - .finally(() => process.exit()); diff --git a/examples/05-batch-erc20-transfer.ts b/examples/05-batch-erc20-transfer.ts deleted file mode 100644 index a990d04e..00000000 --- a/examples/05-batch-erc20-transfer.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { LiteSdk } from '../src'; -import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { printOp } from '../src/common/OperationUtils'; -import { NetworkNames, getNetworkConfig } from './config'; - -// add/change these values -const config = getNetworkConfig(NetworkNames.Mumbai); -const erc20TokenAddress: string = ''; // ERC20 token address -const recipients: Array = ['', '', '']; // recipient wallet addresses -const values: Array = ['', '', '']; // transfer values - -async function main() { - // logic for paymaster implementation - const paymasterAPI = config.paymaster.use - ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) - : undefined; - // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - paymasterAPI, - ); - - // get address of EtherspotWallet... - const address: string = await sdk.getCounterFactualAddress(); - console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - - // transfer some of the ERC20 token to the EtherspotWallet (if required)... - const totalValue: number = values.reduce((acc: number, curr: string) => { - return acc + parseFloat(curr); - }, 0); - const prefunded: string = await sdk.prefundIfRequired((+totalValue + 0.01).toString(), erc20TokenAddress); - console.log('\x1b[33m%s\x1b[0m', prefunded); - - const { dest, data } = await sdk.generateERC20BatchTransfersData(erc20TokenAddress, recipients, values); - - // creating and signing userOp... - const op = await sdk.sign({ - target: address, - data: await sdk.encodeBatch(dest, data), - }); - console.log(`Signed UserOp: ${await printOp(op)}`); - - // sending to the bundler... - const userOpHash = await sdk.send(op); - console.log(`UserOperation hash: ${userOpHash}`); - - // get transaction hash... - console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(userOpHash); - console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); -} - -main() - .catch(console.error) - .finally(() => process.exit()); diff --git a/examples/06-swap-tokens.ts b/examples/06-swap-tokens.ts deleted file mode 100644 index beeb2cf9..00000000 --- a/examples/06-swap-tokens.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { LiteSdk } from '../src'; -import { getVerifyingPaymaster } from '../src/base/VerifyingPaymasterAPI'; -import { printOp } from '../src/common/OperationUtils'; -import { SWAP_ROUTER_ABI } from '../src/helpers/abi/UNISWAP_V3_SWAP_ROUTER_ABI'; -import { NetworkNames, getNetworkConfig } from './config'; - -// add/change to correct network -const config = getNetworkConfig(NetworkNames.Mumbai); -const swapTokenA = '0x583f8424c6adC530D286B5292191203497fF8980'; // replace with the address of the first token you want to add liquidity for -const swapTokenB = '0x614bC50B9E467dEa445d7e04c3c58051B662401f'; // replace with the address of the second token you want to add liquidity for -// pool address: 0x17aa8919F11ce6b35D6eC5723D24be59082D4cAd -const value: string = '1'; // Add values to transfer here - -async function main() { - // logic for paymaster implementation - const paymasterAPI = config.paymaster.use - ? getVerifyingPaymaster(config.paymaster.url, config.contracts.entryPoint) - : undefined; - // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - paymasterAPI, - ); - - // get address of EtherspotWallet... - const address: string = await sdk.getCounterFactualAddress(); - console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - - const preTransferTokenA = await sdk.erc20Balance(address, swapTokenA); - const preTransferTokenB = await sdk.erc20Balance(address, swapTokenB); - console.log('EtherspotWallet balance of SwapTokenA:', sdk.parseAmount(preTransferTokenA.toString())); - console.log('EtherspotWallet balance of SwapTokenB:', sdk.parseAmount(preTransferTokenB.toString())); - - // connect to the ERC20 token contract... - const erc20 = await sdk.getERC20Instance(swapTokenA); - const [decimals] = await Promise.all([erc20.decimals()]); - const parseValue = sdk.formatAmount(value, decimals); - - // prefund tokens for swap (if required)... - await sdk.mintTokenToOwner(swapTokenA, (+value + 0.01).toString()); - const prefunded = await sdk.prefundIfRequired((+value + 0.01).toString()); - console.log('\x1b[33m%s\x1b[0m', prefunded); - const prefundedERC20 = await sdk.prefundIfRequired((+value + 0.01).toString(), swapTokenA); - console.log('\x1b[33m%s\x1b[0m', prefundedERC20); - - // connecting to swap router... - const swapRouter = await sdk.connectToContract(config.contracts.uniswapV3SwapRouter, SWAP_ROUTER_ABI); - - // creating and signing userOp to approve router to spend tokens... - const op = await sdk.sign({ - target: erc20.address, - data: erc20.interface.encodeFunctionData('approve', [config.contracts.uniswapV3SwapRouter, parseValue]), - }); - console.log(`Signed UserOperation: ${await printOp(op)}`); - - // sending to the bundler... - const uoHash = await sdk.send(op); - console.log(`UserOpHash: ${uoHash}`); - - // get transaction hash... - console.log('Waiting for transaction...'); - const txHash = await sdk.getUserOpReceipt(uoHash); - console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); - - /////////////////////////////////////////////// - /////////////////////////////////////////////// - - // generate data for swap... - const params = await sdk.generateUniSingleSwapParams(swapTokenA, swapTokenB, value); - const swapData = swapRouter.interface.encodeFunctionData('exactInputSingle', [params]); - - // creating and signing userOp to swap tokens... - const op1 = await sdk.sign({ - target: config.contracts.uniswapV3SwapRouter, - data: swapData, - }); - console.log(`Signed UserOperation: ${await printOp(op1)}`); - - // sending to the bundler... - const uoHash1 = await sdk.send(op1); - console.log(`UserOpHash: ${uoHash1}`); - - // get transaction hash... - console.log('Waiting for transaction...'); - const txHash1 = await sdk.getUserOpReceipt(uoHash1); - console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash1}`); - - const postTransferERC20Balance = await sdk.erc20Balance(address, swapTokenB); - console.log('EtherspotWallet balance of SwapTokenB:', sdk.parseAmount(postTransferERC20Balance.toString())); -} - -main() - .catch(console.error) - .finally(() => process.exit()); diff --git a/src/common/rxjs/unique.subject.ts b/src/common/rxjs/unique.subject.ts new file mode 100644 index 00000000..dd2662e4 --- /dev/null +++ b/src/common/rxjs/unique.subject.ts @@ -0,0 +1,17 @@ +import { BehaviorSubject } from 'rxjs'; +import { deepCompare } from '../utils'; + +/** + * @ignore + */ +export class UniqueSubject extends BehaviorSubject { + constructor(value: T = null) { + super(value); + } + + next(value: T): void { + if (!deepCompare(this.value, value)) { + super.next(value); + } + } +} diff --git a/src/sdk/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts index 5f8dfc55..2a1abff6 100644 --- a/src/sdk/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -81,12 +81,6 @@ export abstract class BaseAccountAPI { const { networkOptions } = env; - let provider; - - if (rpcProviderUrl) { - provider = new providers.JsonRpcProvider(rpcProviderUrl); - } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); - this.services = { networkService: new NetworkService(networkOptions, networkName), walletService: new WalletService(params.walletProvider, { @@ -293,7 +287,7 @@ export abstract class BaseAccountAPI { */ protected abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise; - protected abstract encodeBatch(targets: string[], datas: string[]): Promise; + protected abstract encodeBatch(targets: string[], values: BigNumberish[], datas: string[]): Promise; /** * sign a userOp's hash (userOpHash). @@ -392,13 +386,12 @@ export abstract class BaseAccountAPI { if (typeof target === 'string') { target = Array(data.length).fill(target); } - callData = await this.encodeBatch(target, data); + callData = await this.encodeBatch(target, detailsForUserOp.values, data); } - // const provider = this.services.walletService.getWalletProvider(); - + const provider = this.services.walletService.getWalletProvider(); const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? - (await this.provider.estimateGas({ + (await provider.estimateGas({ from: this.entryPointAddress, to: this.getAccountAddress(), data: callData, @@ -417,8 +410,8 @@ export abstract class BaseAccountAPI { */ async getUserOpHash(userOp: UserOperationStruct): Promise { const op = await resolveProperties(userOp); - // const provider = this.services.walletService.getWalletProvider(); - const chainId = await this.provider.getNetwork().then((net) => net.chainId); + const provider = this.services.walletService.getWalletProvider(); + const chainId = await provider.getNetwork().then((net) => net.chainId); return getUserOpHash(op, this.entryPointAddress, chainId); } @@ -441,8 +434,8 @@ export abstract class BaseAccountAPI { if (initCode == null || initCode === '0x') return 0; const deployerAddress = initCode.substring(0, 42); const deployerCallData = '0x' + initCode.substring(42); - // const provider = this.services.walletService.getWalletProvider(); - return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); + const provider = this.services.walletService.getWalletProvider(); + return await provider.estimateGas({ to: deployerAddress, data: deployerCallData }); } /** @@ -460,8 +453,8 @@ export abstract class BaseAccountAPI { let { maxFeePerGas, maxPriorityFeePerGas } = info; if (maxFeePerGas == null || maxPriorityFeePerGas == null) { - // const provider = this.services.walletService.getWalletProvider(); - const feeData = await this.provider.getFeeData(); + const provider = this.services.walletService.getWalletProvider(); + const feeData = await provider.getFeeData(); if (maxFeePerGas == null) { maxFeePerGas = feeData.maxFeePerGas ?? undefined; } diff --git a/src/sdk/base/EtherspotWalletAPI.ts b/src/sdk/base/EtherspotWalletAPI.ts index dc84706f..ae0cd6d8 100644 --- a/src/sdk/base/EtherspotWalletAPI.ts +++ b/src/sdk/base/EtherspotWalletAPI.ts @@ -1,4 +1,4 @@ -import { BigNumber, BigNumberish } from 'ethers'; +import { BigNumber, BigNumberish, ethers } from 'ethers'; import { EtherspotWallet, EtherspotWallet__factory, @@ -34,6 +34,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { factoryAddress?: string; // owner: Signer; index: number; + accountAddress?: string; /** * our account contract. @@ -73,6 +74,7 @@ export class EtherspotWalletAPI extends BaseAccountAPI { throw new Error('no factory to get initCode'); } } + return hexConcat([ this.factory.address, this.factory.interface.encodeFunctionData('createAccount', [ @@ -83,13 +85,28 @@ export class EtherspotWalletAPI extends BaseAccountAPI { ]); } + async getCounterFactualAddress(): Promise { + this.factory = EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider); + this.accountAddress = await this.factory.getAddress( + this.entryPointAddress, + this.services.walletService.walletAddress, + this.index, + ); + return this.accountAddress; + } + + + // async nounce(): Promise { + // return this.getNonce(); + // } + async getNonce(): Promise { console.log('checking nonce...'); if (await this.checkAccountPhantom()) { return BigNumber.from(0); } const accountContract = await this._getAccountContract(); - return await accountContract.nonce(); + return await accountContract.getNonce(); } /** @@ -117,8 +134,8 @@ export class EtherspotWalletAPI extends BaseAccountAPI { return this.entryPointView; } - async encodeBatch(targets: string[], datas: string[]): Promise { + async encodeBatch(targets: string[], values: BigNumberish[], datas: string[]): Promise { const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData('executeBatch', [targets, datas]); + return accountContract.interface.encodeFunctionData('executeBatch', [targets, values, datas]); } } diff --git a/src/sdk/base/TransactionDetailsForUserOp.ts b/src/sdk/base/TransactionDetailsForUserOp.ts index 34851eee..c4887e43 100644 --- a/src/sdk/base/TransactionDetailsForUserOp.ts +++ b/src/sdk/base/TransactionDetailsForUserOp.ts @@ -9,6 +9,13 @@ export interface TransactionDetailsForUserOp { // target data or multiple target datas for a batch data: string | string[]; value?: BigNumberish; + values?: BigNumberish[]; + gasLimit?: BigNumberish; + maxFeePerGas?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; +} + +export interface TransactionGasInfoForUserOp { gasLimit?: BigNumberish; maxFeePerGas?: BigNumberish; maxPriorityFeePerGas?: BigNumberish; diff --git a/src/sdk/common/interfaces.ts b/src/sdk/common/interfaces.ts index 72774e45..22beb8f9 100644 --- a/src/sdk/common/interfaces.ts +++ b/src/sdk/common/interfaces.ts @@ -1,4 +1,13 @@ -export interface TransactionRequest { +import { BigNumberish } from "ethers"; + +export interface BatchTransactionRequest { + to: string[]; + data?: string[]; + value?: BigNumberish[]; +} + +export interface TransactionRequest { to: string; - data: string; + data?: string; + value?: BigNumberish; } diff --git a/src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts b/src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts index 497a52fc..fcf51db2 100644 --- a/src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts +++ b/src/sdk/contracts/factories/src/wallet/EtherspotWallet__factory.ts @@ -280,6 +280,11 @@ const _abi = [ name: "dest", type: "address[]", }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, { internalType: "bytes[]", name: "func", @@ -304,6 +309,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -453,13 +471,24 @@ const _abi = [ type: "function", }, { - inputs: [], - name: "nonce", + inputs: [ + { + internalType: "bytes32", + name: "hash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", outputs: [ { - internalType: "uint256", - name: "", - type: "uint256", + internalType: "bytes4", + name: "magicValue", + type: "bytes4", }, ], stateMutability: "view", @@ -828,7 +857,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000616777bd353ae5f6f4b860c01b620000af60201b60201c565b6200007d67f4849dbf6086b19760c01b620000af60201b60201c565b62000099671331b88614a8024260c01b620000af60201b60201c565b620000a9620000b260201b60201c565b6200025d565b50565b600060019054906101000a900460ff161562000105576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000fc9062000200565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001775760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200016e919062000240565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b6000620001e860278362000179565b9150620001f5826200018a565b604082019050919050565b600060208201905081810360008301526200021b81620001d9565b9050919050565b600060ff82169050919050565b6200023a8162000222565b82525050565b60006020820190506200025760008301846200022f565b92915050565b60805161678d6200029560003960008181611933015281816119c101528181611f840152818161201201526120c2015261678d6000f3fe60806040526004361061019f5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063b61d27f611610064578063b61d27f61461062c578063bc197c8114610655578063c399ec8814610692578063f23a6e61146106bd576101fe565b8063a526d83b146105ad578063affed0e0146105d6578063b0d691fe14610601576101fe565b80637065cb48116100c65780637065cb48146104e1578063714041561461050a5780638f0684301461053357806398ef1ed814610570576101fe565b80634d44560d146104715780634f1ef2861461049a57806352d1902d146104b6576101fe565b806318dfb3c7116101595780633659cfe6116101335780633659cfe6146103d85780633a871cdd14610401578063485cc9551461043e5780634a58db1914610467576101fe565b806318dfb3c7146103495780631b71bb6e146103725780632f54bf6e1461039b576101fe565b806223de291461020357806301ffc9a71461022c5780630c68ba2114610269578063150b7a02146102a657806316d43401146102e3578063173825d914610320576101fe565b366101fe576101b867290bbd319612162360c01b6106fa565b343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190614662565b6106fd565b005b34801561023857600080fd5b50610253600480360381019061024e9190614789565b61071b565b60405161026091906147d1565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906147ec565b610900565b60405161029d91906147d1565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190614819565b610992565b6040516102da91906148b0565b60405180910390f35b3480156102ef57600080fd5b5061030a6004803603810190610305919061492d565b6109e2565b60405161031791906147d1565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906147ec565b6113bb565b005b34801561035557600080fd5b50610370600480360381019061036b9190614a61565b611483565b005b34801561037e57600080fd5b50610399600480360381019061039491906147ec565b6116c1565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906147ec565b61189f565b6040516103cf91906147d1565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906147ec565b611931565b005b34801561040d57600080fd5b5061042860048036038101906104239190614b07565b611ab9565b6040516104359190614b85565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614bde565b611bf7565b005b61046f611d9d565b005b34801561047d57600080fd5b5061049860048036038101906104939190614c5c565b611e4e565b005b6104b460048036038101906104af9190614ddd565b611f82565b005b3480156104c257600080fd5b506104cb6120be565b6040516104d89190614e48565b60405180910390f35b3480156104ed57600080fd5b50610508600480360381019061050391906147ec565b612177565b005b34801561051657600080fd5b50610531600480360381019061052c91906147ec565b61223f565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614e63565b612307565b60405161056791906147d1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614e63565b6123d4565b6040516105a491906147d1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906147ec565b6125fd565b005b3480156105e257600080fd5b506105eb6126c5565b6040516105f89190614b85565b60405180910390f35b34801561060d57600080fd5b50610616612731565b6040516106239190614f36565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190614f51565b612797565b005b34801561066157600080fd5b5061067c6004803603810190610677919061501b565b6128a8565b60405161068991906148b0565b60405180910390f35b34801561069e57600080fd5b506106a76128fc565b6040516106b49190614b85565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906150f7565b6129c0565b6040516106f191906148b0565b60405180910390f35b50565b610711671278753381487ed660c01b612a12565b5050505050505050565b600061073167f20d647ea02d480060c01b612a12565b61074567ffb589296d687db060c01b612a12565b6107596727ecf9b318901df560c01b612a12565b7f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156107d657506107d5675d4be9b73183ad3f60c01b612a15565b5b8061087657507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108595750610858674cb5733a4ebd736b60c01b612a15565b5b8015610875575061087467927753031b1e765d60c01b612a15565b5b5b806108f957507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156108f857506108f766bc16169e90631c60c01b612a15565b5b5b9050919050565b6000610916679a530c869daa649060c01b612a20565b61092a677819779a5121f4ad60c01b612a20565b61093e67dcc814792f5595a060c01b612a20565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006109a76642558288c0c26a60c01b612a12565b6109bb670cd59c881166cff460c01b612a12565b6109cf67d8d160ce8c3ef4cc60c01b612a12565b63150b7a0260e01b905095945050505050565b60006109f86777258f39a67c0acd60c01b612a23565b610a0c67c9d3460cf31b367060c01b612a23565b610a2067301450deda14998860c01b612a23565b60008673ffffffffffffffffffffffffffffffffffffffff163b9050610a5067ec35fa0e327aba3360c01b612a23565b610a646757c603851350fa0960c01b612a23565b6060610a7a67ed7102d9c731614b60c01b612a23565b610a8e67260c95324dc5522a60c01b612a23565b60007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a9050610ac691906151c0565b908a8a905092610ad8939291906151fe565b90610ae39190615251565b149050610afa67adb0f8e971c6f00460c01b612a23565b610b0e6775ac95bff94d832360c01b612a23565b8015610d5b57610b2867b7ce1fa3f7f6604d60c01b612a23565b610b3c679fc1490a6707ce8260c01b612a23565b610b50679cbd4322f03dcb3060c01b612a23565b6000610b66677c50636fd0d78e6e60c01b612a23565b610b7a67b6c96f6498872fdd60c01b612a23565b6060610b9067d225012c278bc14960c01b612a23565b888860009060208c8c9050610ba591906151c0565b92610bb2939291906151fe565b810190610bbf91906152b0565b809650819350829450505050610bdf67414eafbc10d5dfd460c01b612a23565b610bf3679735072f1875e8c560c01b612a23565b60008503610d3f57610c0f67ece2f114e83cba5460c01b612a23565b610c2367bb4b7709950fab6560c01b612a23565b610c3767e556fd7ed728116b60c01b612a23565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c5f91906153ac565b6000604051808303816000865af19150503d8060008114610c9c576040519150601f19603f3d011682016040523d82523d6000602084013e610ca1565b606091505b5091509150610cba675bb7adbcacc27af760c01b612a23565b610cce67925a11ac41b1a62f60c01b612a23565b81610d2457610ce7674b9b350a0c4e240d60c01b612a23565b806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610d1b919061540d565b60405180910390fd5b610d3867270a9300cfb5deb160c01b612a23565b5050610d54565b610d536719ddea40eb9c9d5e60c01b612a23565b5b5050610dcb565b610d6f671617c5f7b544c15460c01b612a23565b610d8367152cf4f885c3c7bd60c01b612a23565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b610ddf678968ba2400116cd160c01b612a23565b610df367d26f37fb13c4702060c01b612a23565b808015610e105750610e0f67e672c6829c01435e60c01b612a26565b5b80610e375750600083118015610e365750610e35672f1034641526e8e560c01b612a26565b5b5b156110a757610e506787b8bb2f9d833b2360c01b612a23565b610e646748ed04b5790955de60c01b612a23565b610e7867c07d3098ed811b0e60c01b612a23565b8873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610eb392919061542f565b602060405180830381865afa925050508015610eed57506040513d601f19601f82011682018060405250810190610eea9190615474565b60015b610f74573d8060008114610f1d576040519150601f19603f3d011682016040523d82523d6000602084013e610f22565b606091505b50610f37672c516c89798db2e060c01b612a23565b806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610f6b919061540d565b60405180910390fd5b610f88677a7dc9015ade993760c01b612a23565b610f9c676bd30bd513db1c1260c01b612a23565b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050610ffc67f77b76e97cdda63e60c01b612a23565b61101067f2ac3b0c93d4d96060c01b612a23565b60008514801561101d5750825b8015611027575086155b1561105e576110406732203bac67e9a5c660c01b612a23565b61105467bacd05270bf834fa60c01b612a23565b806000526001601ffd5b61107267db508d98998fd4cb60c01b612a23565b61108667bd809f1f7297a39860c01b612a23565b61109a671166c1324f0a4d4360c01b612a23565b80955050505050506113b2565b6110bb67fb73a16ec6f828a360c01b612a23565b6110cf67124b4f67fba3948f60c01b612a23565b6110e367a72081e2c67a966a60c01b612a23565b6110f7670ab810c1358d671760c01b612a23565b6041878790501461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490615524565b60405180910390fd5b61115167c0b4b2b739bdbc3e60c01b612a23565b611165670f81a533fa5be34e60c01b612a23565b61117967657c1339b273a74660c01b612a23565b6000878760009060209261118f939291906151fe565b9061119a9190615251565b90506111b067dc3d3b49fc92cadb60c01b612a23565b6111c46752ae34fa8263b21b60c01b612a23565b600088886020906040926111da939291906151fe565b906111e59190615251565b90506111fb67301232fd22fb824c60c01b612a23565b61120f67f519c889a1cef68c60c01b612a23565b60008989604081811061122557611224615544565b5b9050013560f81c60f81b60f81c9050611248679a20c64fb3f7324360c01b612a23565b61125c678a031af26ced764160c01b612a23565b601b8160ff16141580156112745750601c8160ff1614155b156112f05761128d67cd922db48d204f9b60c01b612a23565b6112a167833a8605e20290ce60c01b612a23565b6112b567b3da6c39eac2834e60c01b612a23565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906155e5565b60405180910390fd5b611304675514297355562d4860c01b612a23565b6113186757b333f889b6e2b360c01b612a23565b61132c676603fc4d7122128560c01b612a23565b8b73ffffffffffffffffffffffffffffffffffffffff1660018c838686604051600081526020016040526040516113669493929190615621565b6020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b6113cf6706cea3225e159afe60c01b6106fa565b6113e367768e02f4b4fe93d060c01b6106fa565b6113f767bcb43f0f61fb5a1260c01b6106fa565b61140b6705112cc091d04b2260c01b6106fa565b611413612a31565b611427677b6146229717de8560c01b6106fa565b61143b671a91445bcd7d6a3660c01b6106fa565b61144f67087786fe3118ce4560c01b6106fa565b6114636712ac3ecdf13b356f60c01b6106fa565b611477676a822ec913ef224160c01b6106fa565b61148081612b95565b50565b611497670b312c177376d2f160c01b6106fa565b6114ab67526a718f37dbef7960c01b6106fa565b6114bf67bc0095b6ec842fe060c01b6106fa565b6114d36765a7b825dc91e38260c01b6106fa565b6114db612e11565b6114ef67e65dfa654e10de0360c01b6106fa565b6115036738751a29e4bbac9a60c01b6106fa565b6115176764a3e3565274624260c01b6106fa565b61152b67e3532f2d278ffcc460c01b6106fa565b61153f67b28c9cc66aedc63960c01b6106fa565b611553674c0d2e74d59320d660c01b6106fa565b81819050848490501461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906156d8565b60405180910390fd5b6115af6733f49bcf3f677de260c01b6106fa565b6115c367fda055a3194df47960c01b6106fa565b6115d7670ca2693ca40a9c3d60c01b6106fa565b60005b848490508110156116ba576115f967e45fe9f7a89384cd60c01b6106fa565b61160d677885f77483c8c7a360c01b6106fa565b6116a785858381811061162357611622615544565b5b905060200201602081019061163891906147ec565b600085858581811061164d5761164c615544565b5b905060200281019061165f9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b80806116b29061576a565b9150506115da565b5050505050565b6116d567b0e8e7fc3aed8bf060c01b6106fa565b6116e9671246157b9919312560c01b6106fa565b6116fd67cbfddca365f5dede60c01b6106fa565b611705613058565b61171967ab4f446b15a2b75360c01b6106fa565b61172d67140f31a12b03a20160c01b6106fa565b61174167c2cd95be620e67ae60c01b6106fa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790615824565b60405180910390fd5b6117c4674b99dae5f525e91060c01b6106fa565b6117d867897f79a11a9b512360c01b6106fa565b6117ec67f01df9d5178d9e0460c01b6106fa565b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161183f929190615853565b60405180910390a161185b6705fb80e775388d3f60c01b6106fa565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006118b56784c34e023fb786f860c01b613174565b6118c9670d806432bac21d3b60c01b613174565b6118dd679da5a6f8cf654dc360c01b613174565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166119fe613177565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90615980565b60405180910390fd5b611a5d816131ce565b611ab681600067ffffffffffffffff811115611a7c57611a7b614cb2565b5b6040519080825280601f01601f191660200182016040528015611aae5781602001600182028036833780820191505090505b506000613229565b50565b6000611acf674a0b745640aaacbe60c01b613397565b611ae3673643bc4d265e004d60c01b613397565b611af767be21e9c3510eef0760c01b613397565b611aff61339a565b611b13670d9ae78f9ca6bca160c01b613397565b611b1d8484613475565b9050611b3367bac743df019f783060c01b613397565b611b47674633441562cbb38260c01b613397565b6000848060400190611b599190615707565b905003611baa57611b7467b9f604ce3adf50f460c01b613397565b611b886740dc8d2be550a2ae60c01b613397565b611b9c678d7f5bf9351f5d3760c01b613397565b611ba5846135e8565b611bbf565b611bbe67493644fd2e2f359760c01b613397565b5b611bd367f86dd1b6eddb849360c01b613397565b611be767e338ec934ff31c9e60c01b613397565b611bf0826136fa565b9392505050565b611c0b67c8d7dd5c6ec287ee60c01b6106fa565b60008060019054906101000a900460ff16159050808015611c3c5750600160008054906101000a900460ff1660ff16105b80611c695750611c4b3061383b565b158015611c685750600160008054906101000a900460ff1660ff16145b5b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90615a12565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611ce5576001600060016101000a81548160ff0219169083151502179055505b611cf967e0a1587b9fff733460c01b6106fa565b611d0d6799f49c2236f581d560c01b6106fa565b611d216713255a13306bce2760c01b6106fa565b611d35679103bdf53b9e3db060c01b6106fa565b611d3f838361385e565b8015611d985760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611d8f9190615a6d565b60405180910390a15b505050565b611db167a987bf12f6bf98ab60c01b6106fa565b611dc5671fbaaa4dbb3f884d60c01b6106fa565b611dd967e797a3f7fa46660c60c01b6106fa565b611de1612731565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b8152600401611e1a9190615a88565b6000604051808303818588803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b5050505050565b611e6267fbabf181d33082b660c01b6106fa565b611e7667bee35484a90cfd2660c01b6106fa565b611e8a673ceb9bb2daab856d60c01b6106fa565b611e9e6791fab911752e5b5c60c01b6106fa565b611ea6613058565b611eba672877b8446bdb5f0060c01b6106fa565b611ece676c6fc7cbb8b3b97860c01b6106fa565b611ee267eb87ca9da684e3db60c01b6106fa565b611ef6673d9d17fec85dda7860c01b6106fa565b611f0a675017b987e5f4e1e060c01b6106fa565b611f12612731565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b8152600401611f4c929190615ab2565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603612010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612007906158ee565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661204f613177565b73ffffffffffffffffffffffffffffffffffffffff16146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90615980565b60405180910390fd5b6120ae826131ce565b6120ba82826001613229565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590615b4d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61218b67b4c2b632b250bc6360c01b6106fa565b61219f67768e02f4b4fe93d060c01b6106fa565b6121b367bcb43f0f61fb5a1260c01b6106fa565b6121c76705112cc091d04b2260c01b6106fa565b6121cf612a31565b6121e3677b6146229717de8560c01b6106fa565b6121f76732bce9776427685f60c01b6106fa565b61220b675c4d3c86a9602c6f60c01b6106fa565b61221f670877748d77ec420260c01b6106fa565b6122336732ccb44361bec49260c01b6106fa565b61223c816139a0565b50565b612253676bacc25ce52307dd60c01b6106fa565b61226767bee35484a90cfd2660c01b6106fa565b61227b673ceb9bb2daab856d60c01b6106fa565b61228f6791fab911752e5b5c60c01b6106fa565b612297613058565b6122ab672877b8446bdb5f0060c01b6106fa565b6122bf67edec01844939018360c01b6106fa565b6122d3672d1676c1874371c960c01b6106fa565b6122e76767895a735b76188060c01b6106fa565b6122fb6762377381d2b1f71460c01b6106fa565b61230481613b5e565b50565b600061231d67a69e23ef0cf0d80560c01b612a23565b6123316789508a17c1e5baf860c01b612a23565b61234567f0e90fa9dac9b5a260c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401612387959493929190615b9a565b6020604051808303816000875af11580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190615bfd565b9050949350505050565b60006123ea678cc395c88e3ae24060c01b612a23565b6123fe670e6cd08ae62d699160c01b612a23565b612412671a6d203d14bbeb3560c01b612a23565b3073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401612454959493929190615b9a565b6020604051808303816000875af192505050801561249057506040513d601f19601f8201168201806040525081019061248d9190615bfd565b60015b6125c8573d80600081146124c0576040519150601f19603f3d011682016040523d82523d6000602084013e6124c5565b606091505b506124da6763fa3d4afb8cd55b60c01b612a23565b6124ee67c78e77a5e38dc67760c01b612a23565b60008151905061250867a2319ac582c5f8b960c01b612a23565b61251c679d791f94f379b3d460c01b612a23565b6001810361259c57612538674b6df8afb2c0610f60c01b612a23565b61254c671241dc8732fa093a60c01b612a23565b600160f81b8260008151811061256557612564615544565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050506125f5565b6125b067fb87cb9c02294f9f60c01b612a23565b6125c46773311759eab4f85760c01b612a23565b8082fd5b6125dc672f68b0ad8fd39c0a60c01b612a23565b6125f067ba867e4ef348d1a360c01b612a23565b809150505b949350505050565b612611675a98b12456966aba60c01b6106fa565b61262567bee35484a90cfd2660c01b6106fa565b612639673ceb9bb2daab856d60c01b6106fa565b61264d6791fab911752e5b5c60c01b6106fa565b612655613058565b612669672877b8446bdb5f0060c01b6106fa565b61267d67915d8b16ac69ed9860c01b6106fa565b612691671f5e91ee5a02596360c01b6106fa565b6126a5674b8e9096393c06f860c01b6106fa565b6126b967301fc09d047c18d960c01b6106fa565b6126c281613d1c565b50565b60006126db67e6997cbe175ef33460c01b6106fa565b6126ef677a25fccec1173dd960c01b6106fa565b61270367431301e0e2e31e9060c01b6106fa565b600560009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905090565b600061274767f561f09cfc8827bd60c01b6106fa565b61275b673350b6d208da79ee60c01b6106fa565b61276f671896327d0b3f375a60c01b6106fa565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127ab67e2dda3667fd3757160c01b6106fa565b6127bf67526a718f37dbef7960c01b6106fa565b6127d367bc0095b6ec842fe060c01b6106fa565b6127e76765a7b825dc91e38260c01b6106fa565b6127ef612e11565b61280367e65dfa654e10de0360c01b6106fa565b61281767aeaf6d5fe58842a960c01b6106fa565b61282b67370ad7169464cc0060c01b6106fa565b61283f6739a00ff772ffbf9060c01b6106fa565b6128536792e03ae1c25d108960c01b6106fa565b6128a2848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f34565b50505050565b60006128be67f6036d4dbbf1553b60c01b612a12565b6128d267e574cfd0134a53a360c01b612a12565b6128e667481cad8a93626dbc60c01b612a12565b63bc197c8160e01b905098975050505050505050565b6000612912673908573a227c011760c01b6106fa565b61292667f95a3d25f4a4d56660c01b6106fa565b61293a6701732dbf20a7ffe360c01b6106fa565b612942612731565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161297a9190615a88565b602060405180830381865afa158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb9190615c3f565b905090565b60006129d667d55e6083e458695760c01b612a12565b6129ea67229756682a8526f660c01b612a12565b6129fe672d0f5a7f66d6c2a060c01b612a12565b63f23a6e6160e01b90509695505050505050565b50565b600060019050919050565b50565b50565b600060019050919050565b612a4567216671dc6f7d651060c01b6106fa565b612a5967fc696b44f549a3bd60c01b6106fa565b612a6d677d2f775bb38d794b60c01b6106fa565b612a81672c1b7774324d16e460c01b6106fa565b612a8a3361189f565b8015612aa65750612aa5679d6b1a88bd04a29560c01b613f9a565b5b80612b1457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612af75750612af667c1169fb68056496660c01b613f9a565b5b8015612b135750612b1267290c2b81e499218360c01b613f9a565b5b5b80612b405750612b2333610900565b8015612b3f5750612b3e6777d0513cc85b13d160c01b613f9a565b5b5b612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690615cde565b60405180910390fd5b612b9367023020f196fe710560c01b6106fa565b565b612ba967595c0e9f3251c28760c01b613174565b612bbd676c9e8facf275455460c01b613174565b612bd1675fd1ba867bad8d9060c01b613174565b612be5675d4405176a4c718660c01b613174565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90615d4a565b60405180910390fd5b612c67678d884950e2a04aa760c01b613174565b612c7b672dca0c18590376fc60c01b613174565b612c8f67a4f7a20d65860e4d60c01b613174565b612ca3675167170fc48a61af60c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690615db6565b60405180910390fd5b612d4367d711364ae0826ec060c01b613174565b612d57670a57bd871732b8ad60c01b613174565b612d6b675d1d32267273ab9260c01b613174565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051612d9a9190615a88565b60405180910390a1612db667dcc232605f03b59860c01b613174565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612e256731b64f8837124c3160c01b6106fa565b612e3967648db564106906a760c01b6106fa565b612e4d67c4dbbfd60bd1214960c01b6106fa565b612e616701512b58157c381b60c01b6106fa565b612e69612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015612eb35750612eb26747f66328b063331a60c01b613f9a565b5b80612edf5750612ec23361189f565b8015612ede5750612edd67e429b1ab88ceb31060c01b613f9a565b5b5b612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590615e48565b60405180910390fd5b612f326762f06635bf7b4acd60c01b6106fa565b565b612f4867bdfd46f0589b81c760c01b6106fa565b612f5c67b0457063cebd82a360c01b6106fa565b612f70675b626d0fcf3aa6ce60c01b6106fa565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051612f9991906153ac565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b5091509150612ff4672fb56cccf4f3b66560c01b6106fa565b6130086747166df0733c52e860c01b6106fa565b8161303d576130216719461c9227bd654a60c01b6106fa565b6130356767b989a4f1f2a8f560c01b6106fa565b805160208201fd5b61305167c859f4ceb5b7418760c01b6106fa565b5050505050565b61306c67851edf0db3fe6a8060c01b6106fa565b61308067765412b7902e3abf60c01b6106fa565b61309467151d6c3106b9e49760c01b6106fa565b6130a8671b070d07d4380e9a60c01b6106fa565b6130b13361189f565b80156130cd57506130cc67d5ef82e5a5d379e060c01b613f9a565b5b8061311f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561311e575061311d670cc2ae0862027a8c60c01b613f9a565b5b5b61315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615eb4565b60405180910390fd5b61317267362a52eb7781e15260c01b6106fa565b565b50565b60006131a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6131e2675b243153b1324c8660c01b6106fa565b6131f667703050f3f8cbae0160c01b6106fa565b61320a67096f3ba87c8df4a960c01b6106fa565b61321e67360d12c388c6eb2e60c01b6106fa565b613226613058565b50565b6132557f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613faf565b60000160009054906101000a900460ff16156132795761327483613fb9565b613392565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132e157506040513d601f19601f820116820180604052508101906132de9190615ee9565b60015b613320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331790615f88565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c9061601a565b60405180910390fd5b50613391838383614072565b5b505050565b50565b6133ae67e67927338dfde90a60c01b613397565b6133c2670e51b57b7e9b4da560c01b613397565b6133d667e3f66e826ec687ff60c01b613397565b6133ea6792d1df458e7acb7960c01b613397565b6133f2612731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461345f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613456906160ac565b60405180910390fd5b61347367f59af56761c9812d60c01b613397565b565b600061348b67c29ba408c7eee76560c01b6106fa565b61349f673c1aef8cecb8edf860c01b6106fa565b6134b367edc08ed16faddf6a60c01b6106fa565b60006134be8361409e565b90506134d467fcbbf19e6a4683c460c01b6106fa565b6134e86765a9159f51e099f460c01b6106fa565b613556613551858061014001906134ff9190615707565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836140ce90919063ffffffff16565b61189f565b6135a05761356e67682feb9fbb195d8360c01b6106fa565b61358267514af5066901f36e60c01b6106fa565b613596670bad72a866512a0460c01b6106fa565b60019150506135e2565b6135b467025800585b55a6ff60c01b6106fa565b6135c86705b3b124a394a8c460c01b6106fa565b6135dc678bad695b7ee735c860c01b6106fa565b60009150505b92915050565b6135fc67f347b6eb768867bd60c01b6106fa565b61361067e4b8fad4d2d1902a60c01b6106fa565b6136246722ce8514c24b563d60c01b6106fa565b613638676bd35fd711427f6d60c01b6106fa565b80602001356005600081819054906101000a90046bffffffffffffffffffffffff1680929190613667906160e4565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff16146136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136da90616164565b60405180910390fd5b6136f7675143066244fa845f60c01b6106fa565b50565b61370e67cc5c47196db5bd6160c01b613397565b613722678b55e749b3c352ab60c01b613397565b61373667e6442311764077fa60c01b613397565b6000811461382357613752671589e0478f7a186060c01b613397565b61376667d37e8b3807985e7360c01b613397565b61377a67c2c62d2bb50a980360c01b613397565b60003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516137c2906161aa565b600060405180830381858888f193505050503d8060008114613800576040519150601f19603f3d011682016040523d82523d6000602084013e613805565b606091505b5050905061381d6714643eaa19656f6660c01b613397565b50613838565b61383767cc382f158ab6697a60c01b613397565b5b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6138726703748e24ba0bf9ec60c01b6106fa565b613886670bc8db960be8c07860c01b6106fa565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138db67019acf8eca98742f60c01b6106fa565b6138ef67ffb0ee9b4a9774fe60c01b6106fa565b6138f8816139a0565b61390c675b78c5bf4202c90360c01b6106fa565b6139206725b6d74483d24a8260c01b6106fa565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b6139b46717c7d6a68a08773960c01b613174565b6139c867cc8de6b882acb1a360c01b613174565b6139dc671ec2242cb4213daf60c01b613174565b6139f067e7bfe4742339224760c01b613174565b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a749061620b565b60405180910390fd5b613a91676270d7427db14f5b60c01b613174565b613aa56704aa357520b4416d60c01b613174565b613ab9672b9382deb815da6060c01b613174565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c381604051613ae89190615a88565b60405180910390a1613b0467c36c72a8ecc3a90660c01b613174565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613b7267c36ba9a4464b6ea960c01b612a20565b613b8667dbc59bf60721ec3760c01b612a20565b613b9a67a9b899a25d7f84f360c01b612a20565b613bae676ccf2b04ef43fe2c60c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3190616277565b60405180910390fd5b613c4e677f234f21a7a7167460c01b612a20565b613c62675dad748d723fc1a560c01b612a20565b613c7667bcc423d1b918455e60c01b612a20565b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5281604051613ca59190615a88565b60405180910390a1613cc167ea5e8a43da197a0d60c01b612a20565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b613d3067473271421f468fd260c01b612a20565b613d446792976a0e8d69a1f860c01b612a20565b613d586722fdc4cd5a73662060c01b612a20565b613d6c677f1705d0822221e360c01b612a20565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290616309565b60405180910390fd5b613def67d29ec12c81e5975160c01b612a20565b613e03675ce58ff31b29be9c60c01b612a20565b613e1767e300c4231196178660c01b612a20565b613e2b6756d066aad6d03b2860c01b612a20565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eaf90616375565b60405180910390fd5b613ecc67ceace18cb99efb4860c01b612a20565b613ee067b298b03df19232ce60c01b612a20565b613ef46771c3a697a02cf77360c01b612a20565b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96981604051613f239190615a88565b60405180910390a1613f3f673094a602565cca5360c01b612a20565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060019050919050565b6000819050919050565b6000819050919050565b613fc28161383b565b614001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff890616407565b60405180910390fd5b8061402e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613fa5565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61407b836140f5565b6000825111806140885750805b15614099576140978383614144565b505b505050565b6000816040516020016140b1919061649f565b604051602081830303815290604052805190602001209050919050565b60008060006140dd8585614171565b915091506140ea816141c2565b819250505092915050565b6140fe81613fb9565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060614169838360405180606001604052806027815260200161673160279139614328565b905092915050565b60008060418351036141b25760008060006020860151925060408601519150606086015160001a90506141a6878285856143ae565b945094505050506141bb565b60006002915091505b9250929050565b600060048111156141d6576141d56164c5565b5b8160048111156141e9576141e86164c5565b5b03156143255760016004811115614203576142026164c5565b5b816004811115614216576142156164c5565b5b03614256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424d90616540565b60405180910390fd5b6002600481111561426a576142696164c5565b5b81600481111561427d5761427c6164c5565b5b036142bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142b4906165ac565b60405180910390fd5b600360048111156142d1576142d06164c5565b5b8160048111156142e4576142e36164c5565b5b03614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b9061663e565b60405180910390fd5b5b50565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161435291906153ac565b600060405180830381855af49150503d806000811461438d576040519150601f19603f3d011682016040523d82523d6000602084013e614392565b606091505b50915091506143a386838387614490565b925050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156143e9576000600391509150614487565b60006001878787876040516000815260200160405260405161440e9493929190615621565b6020604051602081039080840390855afa158015614430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361447e57600060019250925050614487565b80600092509250505b94509492505050565b606083156144f25760008351036144ea576144aa8561383b565b6144e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e0906166aa565b60405180910390fd5b5b8290506144fd565b6144fc8383614505565b5b949350505050565b6000825111156145185781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454c919061670e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459482614569565b9050919050565b6145a481614589565b81146145af57600080fd5b50565b6000813590506145c18161459b565b92915050565b6000819050919050565b6145da816145c7565b81146145e557600080fd5b50565b6000813590506145f7816145d1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614622576146216145fd565b5b8235905067ffffffffffffffff81111561463f5761463e614602565b5b60208301915083600182028301111561465b5761465a614607565b5b9250929050565b60008060008060008060008060c0898b0312156146825761468161455f565b5b60006146908b828c016145b2565b98505060206146a18b828c016145b2565b97505060406146b28b828c016145b2565b96505060606146c38b828c016145e8565b955050608089013567ffffffffffffffff8111156146e4576146e3614564565b5b6146f08b828c0161460c565b945094505060a089013567ffffffffffffffff81111561471357614712614564565b5b61471f8b828c0161460c565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61476681614731565b811461477157600080fd5b50565b6000813590506147838161475d565b92915050565b60006020828403121561479f5761479e61455f565b5b60006147ad84828501614774565b91505092915050565b60008115159050919050565b6147cb816147b6565b82525050565b60006020820190506147e660008301846147c2565b92915050565b6000602082840312156148025761480161455f565b5b6000614810848285016145b2565b91505092915050565b6000806000806000608086880312156148355761483461455f565b5b6000614843888289016145b2565b9550506020614854888289016145b2565b9450506040614865888289016145e8565b935050606086013567ffffffffffffffff81111561488657614885614564565b5b6148928882890161460c565b92509250509295509295909350565b6148aa81614731565b82525050565b60006020820190506148c560008301846148a1565b92915050565b6000819050919050565b6148de816148cb565b81146148e957600080fd5b50565b6000813590506148fb816148d5565b92915050565b61490a816147b6565b811461491557600080fd5b50565b60008135905061492781614901565b92915050565b6000806000806000608086880312156149495761494861455f565b5b6000614957888289016145b2565b9550506020614968888289016148ec565b945050604086013567ffffffffffffffff81111561498957614988614564565b5b6149958882890161460c565b935093505060606149a888828901614918565b9150509295509295909350565b60008083601f8401126149cb576149ca6145fd565b5b8235905067ffffffffffffffff8111156149e8576149e7614602565b5b602083019150836020820283011115614a0457614a03614607565b5b9250929050565b60008083601f840112614a2157614a206145fd565b5b8235905067ffffffffffffffff811115614a3e57614a3d614602565b5b602083019150836020820283011115614a5a57614a59614607565b5b9250929050565b60008060008060408587031215614a7b57614a7a61455f565b5b600085013567ffffffffffffffff811115614a9957614a98614564565b5b614aa5878288016149b5565b9450945050602085013567ffffffffffffffff811115614ac857614ac7614564565b5b614ad487828801614a0b565b925092505092959194509250565b600080fd5b60006101608284031215614afe57614afd614ae2565b5b81905092915050565b600080600060608486031215614b2057614b1f61455f565b5b600084013567ffffffffffffffff811115614b3e57614b3d614564565b5b614b4a86828701614ae7565b9350506020614b5b868287016148ec565b9250506040614b6c868287016145e8565b9150509250925092565b614b7f816145c7565b82525050565b6000602082019050614b9a6000830184614b76565b92915050565b6000614bab82614589565b9050919050565b614bbb81614ba0565b8114614bc657600080fd5b50565b600081359050614bd881614bb2565b92915050565b60008060408385031215614bf557614bf461455f565b5b6000614c0385828601614bc9565b9250506020614c14858286016145b2565b9150509250929050565b6000614c2982614569565b9050919050565b614c3981614c1e565b8114614c4457600080fd5b50565b600081359050614c5681614c30565b92915050565b60008060408385031215614c7357614c7261455f565b5b6000614c8185828601614c47565b9250506020614c92858286016145e8565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cea82614ca1565b810181811067ffffffffffffffff82111715614d0957614d08614cb2565b5b80604052505050565b6000614d1c614555565b9050614d288282614ce1565b919050565b600067ffffffffffffffff821115614d4857614d47614cb2565b5b614d5182614ca1565b9050602081019050919050565b82818337600083830152505050565b6000614d80614d7b84614d2d565b614d12565b905082815260208101848484011115614d9c57614d9b614c9c565b5b614da7848285614d5e565b509392505050565b600082601f830112614dc457614dc36145fd565b5b8135614dd4848260208601614d6d565b91505092915050565b60008060408385031215614df457614df361455f565b5b6000614e02858286016145b2565b925050602083013567ffffffffffffffff811115614e2357614e22614564565b5b614e2f85828601614daf565b9150509250929050565b614e42816148cb565b82525050565b6000602082019050614e5d6000830184614e39565b92915050565b60008060008060608587031215614e7d57614e7c61455f565b5b6000614e8b878288016145b2565b9450506020614e9c878288016148ec565b935050604085013567ffffffffffffffff811115614ebd57614ebc614564565b5b614ec98782880161460c565b925092505092959194509250565b6000819050919050565b6000614efc614ef7614ef284614569565b614ed7565b614569565b9050919050565b6000614f0e82614ee1565b9050919050565b6000614f2082614f03565b9050919050565b614f3081614f15565b82525050565b6000602082019050614f4b6000830184614f27565b92915050565b60008060008060608587031215614f6b57614f6a61455f565b5b6000614f79878288016145b2565b9450506020614f8a878288016145e8565b935050604085013567ffffffffffffffff811115614fab57614faa614564565b5b614fb78782880161460c565b925092505092959194509250565b60008083601f840112614fdb57614fda6145fd565b5b8235905067ffffffffffffffff811115614ff857614ff7614602565b5b60208301915083602082028301111561501457615013614607565b5b9250929050565b60008060008060008060008060a0898b03121561503b5761503a61455f565b5b60006150498b828c016145b2565b985050602061505a8b828c016145b2565b975050604089013567ffffffffffffffff81111561507b5761507a614564565b5b6150878b828c01614fc5565b9650965050606089013567ffffffffffffffff8111156150aa576150a9614564565b5b6150b68b828c01614fc5565b9450945050608089013567ffffffffffffffff8111156150d9576150d8614564565b5b6150e58b828c0161460c565b92509250509295985092959890939650565b60008060008060008060a087890312156151145761511361455f565b5b600061512289828a016145b2565b965050602061513389828a016145b2565b955050604061514489828a016145e8565b945050606061515589828a016145e8565b935050608087013567ffffffffffffffff81111561517657615175614564565b5b61518289828a0161460c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151cb826145c7565b91506151d6836145c7565b92508282039050818111156151ee576151ed615191565b5b92915050565b600080fd5b600080fd5b60008085851115615212576152116151f4565b5b83861115615223576152226151f9565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b600061525d8383615239565b8261526881356148cb565b925060208210156152a8576152a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615244565b831692505b505092915050565b6000806000606084860312156152c9576152c861455f565b5b60006152d786828701614c47565b935050602084013567ffffffffffffffff8111156152f8576152f7614564565b5b61530486828701614daf565b925050604084013567ffffffffffffffff81111561532557615324614564565b5b61533186828701614daf565b9150509250925092565b600081519050919050565b600081905092915050565b60005b8381101561536f578082015181840152602081019050615354565b60008484015250505050565b60006153868261533b565b6153908185615346565b93506153a0818560208601615351565b80840191505092915050565b60006153b8828461537b565b915081905092915050565b600082825260208201905092915050565b60006153df8261533b565b6153e981856153c3565b93506153f9818560208601615351565b61540281614ca1565b840191505092915050565b6000602082019050818103600083015261542781846153d4565b905092915050565b60006040820190506154446000830185614e39565b818103602083015261545681846153d4565b90509392505050565b60008151905061546e8161475d565b92915050565b60006020828403121561548a5761548961455f565b5b60006154988482850161545f565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b600061550e603a836154a1565b9150615519826154b2565b604082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b60006155cf602d836154a1565b91506155da82615573565b604082019050919050565b600060208201905081810360008301526155fe816155c2565b9050919050565b600060ff82169050919050565b61561b81615605565b82525050565b60006080820190506156366000830187614e39565b6156436020830186615612565b6156506040830185614e39565b61565d6060830184614e39565b95945050505050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b60006156c26033836154a1565b91506156cd82615666565b604082019050919050565b600060208201905081810360008301526156f1816156b5565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112615724576157236156f8565b5b80840192508235915067ffffffffffffffff821115615746576157456156fd565b5b60208301925060018202360383131561576257615761615702565b5b509250929050565b6000615775826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157a7576157a6615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061580e6033836154a1565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b61584d81614589565b82525050565b60006040820190506158686000830185615844565b6158756020830184615844565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006158d8602c836154a1565b91506158e38261587c565b604082019050919050565b60006020820190508181036000830152615907816158cb565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061596a602c836154a1565b91506159758261590e565b604082019050919050565b600060208201905081810360008301526159998161595d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006159fc602e836154a1565b9150615a07826159a0565b604082019050919050565b60006020820190508181036000830152615a2b816159ef565b9050919050565b6000819050919050565b6000615a57615a52615a4d84615a32565b614ed7565b615605565b9050919050565b615a6781615a3c565b82525050565b6000602082019050615a826000830184615a5e565b92915050565b6000602082019050615a9d6000830184615844565b92915050565b615aac81614c1e565b82525050565b6000604082019050615ac76000830185615aa3565b615ad46020830184614b76565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000615b376038836154a1565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b6000615b7983856153c3565b9350615b86838584614d5e565b615b8f83614ca1565b840190509392505050565b6000608082019050615baf6000830188615844565b615bbc6020830187614e39565b8181036040830152615bcf818587615b6d565b9050615bde60608301846147c2565b9695505050505050565b600081519050615bf781614901565b92915050565b600060208284031215615c1357615c1261455f565b5b6000615c2184828501615be8565b91505092915050565b600081519050615c39816145d1565b92915050565b600060208284031215615c5557615c5461455f565b5b6000615c6384828501615c2a565b91505092915050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e6572206f722060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b6000615cc86028836154a1565b9150615cd382615c6c565b604082019050919050565b60006020820190508181036000830152615cf781615cbb565b9050919050565b7f4f776e65643a3a2063616e6e6f742072656d6f76652073656c66000000000000600082015250565b6000615d34601a836154a1565b9150615d3f82615cfe565b602082019050919050565b60006020820190508181036000830152615d6381615d27565b9050919050565b7f4f776e65643a3a206f776e657220646f65736e27742065786973740000000000600082015250565b6000615da0601b836154a1565b9150615dab82615d6a565b602082019050919050565b60006020820190508181036000830152615dcf81615d93565b9050919050565b7f457468657273706f7457616c6c65743a3a206e6f74204f776e6572206f72204560008201527f6e747279506f696e740000000000000000000000000000000000000000000000602082015250565b6000615e326029836154a1565b9150615e3d82615dd6565b604082019050919050565b60006020820190508181036000830152615e6181615e25565b9050919050565b7f457468657273706f7457616c6c65743a3a206f6e6c79206f776e657200000000600082015250565b6000615e9e601c836154a1565b9150615ea982615e68565b602082019050919050565b60006020820190508181036000830152615ecd81615e91565b9050919050565b600081519050615ee3816148d5565b92915050565b600060208284031215615eff57615efe61455f565b5b6000615f0d84828501615ed4565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000615f72602e836154a1565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006160046029836154a1565b915061600f82615fa8565b604082019050919050565b6000602082019050818103600083015261603381615ff7565b9050919050565b7f457468657273706f7457616c6c65743a204e6f742066726f6d20456e7472795060008201527f6f696e7400000000000000000000000000000000000000000000000000000000602082015250565b60006160966024836154a1565b91506160a18261603a565b604082019050919050565b600060208201905081810360008301526160c581616089565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b60006160ef826160cc565b91506bffffffffffffffffffffffff820361610d5761610c615191565b5b600182019050919050565b7f457468657273706f7457616c6c65743a3a20696e76616c6964206e6f6e636500600082015250565b600061614e601f836154a1565b915061615982616118565b602082019050919050565b6000602082019050818103600083015261617d81616141565b9050919050565b50565b6000616194600083615346565b915061619f82616184565b600082019050919050565b60006161b582616187565b9150819050919050565b7f4f776e65643a3a20616c726561647920616e206f776e65720000000000000000600082015250565b60006161f56018836154a1565b9150616200826161bf565b602082019050919050565b60006020820190508181036000830152616224816161e8565b9050919050565b7f477561726465643a3a20677561726469616e20646f65736e2774206578697374600082015250565b60006162616020836154a1565b915061626c8261622b565b602082019050919050565b6000602082019050818103600083015261629081616254565b9050919050565b7f477561726465643a3a207a65726f20616464726573732063616e27742062652060008201527f677561726469616e000000000000000000000000000000000000000000000000602082015250565b60006162f36028836154a1565b91506162fe82616297565b604082019050919050565b60006020820190508181036000830152616322816162e6565b9050919050565b7f477561726465643a3a20616c7265616479206120677561726469616e00000000600082015250565b600061635f601c836154a1565b915061636a82616329565b602082019050919050565b6000602082019050818103600083015261638e81616352565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006163f1602d836154a1565b91506163fc82616395565b604082019050919050565b60006020820190508181036000830152616420816163e4565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000616468601c83616427565b915061647382616432565b601c82019050919050565b6000819050919050565b616499616494826148cb565b61647e565b82525050565b60006164aa8261645b565b91506164b68284616488565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061652a6018836154a1565b9150616535826164f4565b602082019050919050565b600060208201905081810360008301526165598161651d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000616596601f836154a1565b91506165a182616560565b602082019050919050565b600060208201905081810360008301526165c581616589565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006166286022836154a1565b9150616633826165cc565b604082019050919050565b600060208201905081810360008301526166578161661b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000616694601d836154a1565b915061669f8261665e565b602082019050919050565b600060208201905081810360008301526166c381616687565b9050919050565b600081519050919050565b60006166e0826166ca565b6166ea81856154a1565b93506166fa818560208601615351565b61670381614ca1565b840191505092915050565b6000602082019050818103600083015261672881846166d5565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220409e8d136ed140ff75f4fa7a004a6a1dfe99e425561980f54e6553e5fa38328a64736f6c63430008110033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b6080516151226200023e600039600081816110c601528181611154015281816116f10152818161177f015261182f01526151226000f3fe6080604052600436106101ba5760003560e01c80634d44560d116100ec578063a526d83b1161008a578063bc197c8111610064578063bc197c811461066e578063c399ec88146106ab578063d087d288146106d6578063f23a6e611461070157610205565b8063a526d83b146105f1578063b0d691fe1461061a578063b61d27f61461064557610205565b80637065cb48116100c65780637065cb4814610525578063714041561461054e5780638f0684301461057757806398ef1ed8146105b457610205565b80634d44560d146104b55780634f1ef286146104de57806352d1902d146104fa57610205565b80631b71bb6e116101595780633a871cdd116101335780633a871cdd1461041c57806347e1da2a14610459578063485cc955146104825780634a58db19146104ab57610205565b80631b71bb6e1461038d5780632f54bf6e146103b65780633659cfe6146103f357610205565b8063150b7a0211610195578063150b7a02146102ad5780631626ba7e146102ea57806316d4340114610327578063173825d91461036457610205565b806223de291461020a57806301ffc9a7146102335780630c68ba211461027057610205565b3661020557343373ffffffffffffffffffffffffffffffffffffffff167f6bfe7d1a46050e376574ac8bf67e7ceefae9d5c3ea3f3d8f42d08fb5e10736ec60405160405180910390a3005b600080fd5b34801561021657600080fd5b50610231600480360381019061022c9190613074565b61073e565b005b34801561023f57600080fd5b5061025a6004803603810190610255919061319b565b610748565b60405161026791906131e3565b60405180910390f35b34801561027c57600080fd5b50610297600480360381019061029291906131fe565b610882565b6040516102a491906131e3565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf919061322b565b6108d8565b6040516102e191906132c2565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613313565b6108ed565b60405161031e91906132c2565b60405180910390f35b34801561033357600080fd5b5061034e6004803603810190610349919061339f565b610971565b60405161035b91906131e3565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906131fe565b610e48565b005b34801561039957600080fd5b506103b460048036038101906103af91906131fe565b610ee2565b005b3480156103c257600080fd5b506103dd60048036038101906103d891906131fe565b61106e565b6040516103ea91906131e3565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906131fe565b6110c4565b005b34801561042857600080fd5b50610443600480360381019061043e919061344c565b61124c565b60405161045091906134ca565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906135e7565b61127f565b005b34801561048e57600080fd5b506104a960048036038101906104a491906136d9565b611442565b005b6104b3611584565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190613757565b6115f9565b005b6104f860048036038101906104f391906138d8565b6116ef565b005b34801561050657600080fd5b5061050f61182b565b60405161051c9190613943565b60405180910390f35b34801561053157600080fd5b5061054c600480360381019061054791906131fe565b6118e4565b005b34801561055a57600080fd5b50610575600480360381019061057091906131fe565b61197e565b005b34801561058357600080fd5b5061059e6004803603810190610599919061395e565b611a08565b6040516105ab91906131e3565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061395e565b611a99565b6040516105e891906131e3565b60405180910390f35b3480156105fd57600080fd5b50610618600480360381019061061391906131fe565b611bbe565b005b34801561062657600080fd5b5061062f611c48565b60405161063c9190613a31565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190613a4c565b611c72565b005b34801561067a57600080fd5b5061069560048036038101906106909190613ac0565b611d4e565b6040516106a291906132c2565b60405180910390f35b3480156106b757600080fd5b506106c0611d66565b6040516106cd91906134ca565b60405180910390f35b3480156106e257600080fd5b506106eb611dee565b6040516106f891906134ca565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613b9c565b611e79565b60405161073591906132c2565b60405180910390f35b5050505050505050565b60007f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081357507f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600063150b7a0260e01b905095945050505050565b60008061093e8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611e8f565b90506109498161106e565b1561095e57631626ba7e60e01b91505061096a565b63ffffffff60e01b9150505b9392505050565b6000808673ffffffffffffffffffffffffffffffffffffffff163b9050606060007f649264926492649264926492649264926492649264926492649264926492649260001b878760208a8a90506109c89190613c65565b908a8a9050926109da93929190613ca3565b906109e59190613cf6565b1490508015610af05760006060888860009060208c8c9050610a079190613c65565b92610a1493929190613ca3565b810190610a219190613d55565b80965081935082945050505060008503610ae9576000808373ffffffffffffffffffffffffffffffffffffffff1683604051610a5d9190613e51565b6000604051808303816000865af19150503d8060008114610a9a576040519150601f19603f3d011682016040523d82523d6000602084013e610a9f565b606091505b509150915081610ae657806040517f9d0d6e2d000000000000000000000000000000000000000000000000000000008152600401610add9190613eb2565b60405180910390fd5b50505b5050610b38565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091505b8080610b445750600083115b15610cb0578873ffffffffffffffffffffffffffffffffffffffff16631626ba7e89846040518363ffffffff1660e01b8152600401610b84929190613ed4565b602060405180830381865afa925050508015610bbe57506040513d601f19601f82011682018060405250810190610bbb9190613f19565b60015b610c31573d8060008114610bee576040519150601f19603f3d011682016040523d82523d6000602084013e610bf3565b606091505b50806040517f6f2a9599000000000000000000000000000000000000000000000000000000008152600401610c289190613eb2565b60405180910390fd5b6000631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050600085148015610c8a5750825b8015610c94575086155b15610ca357806000526001601ffd5b8095505050505050610e3f565b60418787905014610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613fc9565b60405180910390fd5b60008787600090602092610d0c93929190613ca3565b90610d179190613cf6565b905060008888602090604092610d2f93929190613ca3565b90610d3a9190613cf6565b9050600089896040818110610d5257610d51613fe9565b5b9050013560f81c60f81b60f81c9050601b8160ff1614158015610d795750601c8160ff1614155b15610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db09061408a565b60405180910390fd5b8b73ffffffffffffffffffffffffffffffffffffffff1660018c83868660405160008152602001604052604051610df394939291906140c6565b6020604051602081039080840390855afa158015610e15573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff161496505050505050505b95945050505050565b610e513361106e565b80610e8757503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e975750610e9633610882565b5b610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90614157565b60405180910390fd5b610edf81611eb6565b50565b610eeb3361106e565b80610f2157503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906141c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614255565b60405180910390fd5b7f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611022929190614284565b60405180910390a180600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603611152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111499061431f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611191612042565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de906143b1565b60405180910390fd5b6111f081612099565b61124981600067ffffffffffffffff81111561120f5761120e6137ad565b5b6040519080825280601f01601f1916602001820160405280156112415781602001600182028036833780820191505090505b50600061211a565b50565b6000611256612288565b61126084846122ff565b905061126f8460200135612395565b61127882612398565b9392505050565b611287611c48565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c657506112c53361106e565b5b611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc9061441d565b60405180910390fd5b60008787905011801561131d57508484905087879050145b801561132e57508282905085859050145b61136d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611364906144af565b60405180910390fd5b60005b878790508110156114385761142d88888381811061139157611390613fe9565b5b90506020020160208101906113a691906131fe565b8787848181106113b9576113b8613fe9565b5b905060200201358686858181106113d3576113d2613fe9565b5b90506020028101906113e591906144de565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612434565b806001019050611370565b5050505050505050565b60008060019054906101000a900460ff161590508080156114735750600160008054906101000a900460ff1660ff16105b806114a05750611482306124b8565b15801561149f5750600160008054906101000a900460ff1660ff16145b5b6114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d6906145b3565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561151c576001600060016101000a81548160ff0219169083151502179055505b61152683836124db565b801561157f5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611576919061460e565b60405180910390a15b505050565b61158c611c48565b73ffffffffffffffffffffffffffffffffffffffff1663b760faf934306040518363ffffffff1660e01b81526004016115c59190614629565b6000604051808303818588803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b5050505050565b6116023361106e565b8061163857503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e906141c3565b60405180910390fd5b61167f611c48565b73ffffffffffffffffffffffffffffffffffffffff1663205c287883836040518363ffffffff1660e01b81526004016116b9929190614653565b600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160361177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061431f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166117bc612042565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611809906143b1565b60405180910390fd5b61181b82612099565b6118278282600161211a565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b2906146ee565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6118ed3361106e565b8061192357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611933575061193233610882565b5b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614157565b60405180910390fd5b61197b816125a5565b50565b6119873361106e565b806119bd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906141c3565b60405180910390fd5b611a0581612732565b50565b60003073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660016040518663ffffffff1660e01b8152600401611a4c95949392919061473b565b6020604051808303816000875af1158015611a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8f919061479e565b9050949350505050565b60003073ffffffffffffffffffffffffffffffffffffffff166316d434018686868660006040518663ffffffff1660e01b8152600401611add95949392919061473b565b6020604051808303816000875af1925050508015611b1957506040513d601f19601f82011682018060405250810190611b16919061479e565b60015b611bb1573d8060008114611b49576040519150601f19603f3d011682016040523d82523d6000602084013e611b4e565b606091505b5060008151905060018103611bad57600160f81b82600081518110611b7657611b75613fe9565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050611bb6565b8082fd5b809150505b949350505050565b611bc73361106e565b80611bfd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906141c3565b60405180910390fd5b611c4581612850565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c7a611c48565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cb95750611cb83361106e565b5b611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef9061441d565b60405180910390fd5b611d47858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612434565b5050505050565b600063bc197c8160e01b905098975050505050505050565b6000611d70611c48565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611da89190614629565b602060405180830381865afa158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de991906147e0565b905090565b6000611df8611c48565b73ffffffffffffffffffffffffffffffffffffffff166335567e1a3060006040518363ffffffff1660e01b8152600401611e3392919061486c565b602060405180830381865afa158015611e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7491906147e0565b905090565b600063f23a6e6160e01b90509695505050505050565b6000806000611e9e85856129de565b91509150611eab81612a2f565b819250505092915050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906148e1565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061494d565b60405180910390fd5b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da81604051611fdf9190614629565b60405180910390a16000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006120707f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612b95565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120a23361106e565b806120d857503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906141c3565b60405180910390fd5b50565b6121467f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612b9f565b60000160009054906101000a900460ff161561216a5761216583612ba9565b612283565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156121d257506040513d601f19601f820116820180604052508101906121cf9190614982565b60015b612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614a21565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d90614ab3565b60405180910390fd5b50612282838383612c62565b5b505050565b612290611c48565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490614b1f565b60405180910390fd5b565b60008061230b83612c8e565b905061237b6123768580610140019061232491906144de565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083611e8f90919063ffffffff16565b61106e565b61238957600191505061238f565b60009150505b92915050565b50565b600081146124315760003373ffffffffffffffffffffffffffffffffffffffff16827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906040516123e890614b65565b600060405180830381858888f193505050503d8060008114612426576040519150601f19603f3d011682016040523d82523d6000602084013e61242b565b606091505b50509050505b50565b6000808473ffffffffffffffffffffffffffffffffffffffff16848460405161245d9190613e51565b60006040518083038185875af1925050503d806000811461249a576040519150601f19603f3d011682016040523d82523d6000602084013e61249f565b606091505b5091509150816124b157805160208201fd5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612525816125a5565b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7de3ed105440056cd9149fc06ecd82c66b9c67841d6dcf50c16a08cc9a5ea2c460405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614bc6565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890614c32565b60405180910390fd5b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3816040516126d09190614629565b60405180910390a160018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614c9e565b60405180910390fd5b7fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52816040516127ed9190614629565b60405180910390a16000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614bc6565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294390614d0a565b60405180910390fd5b7f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9698160405161297b9190614629565b60405180910390a16001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806041835103612a1f5760008060006020860151925060408601519150606086015160001a9050612a1387828585612cbe565b94509450505050612a28565b60006002915091505b9250929050565b60006004811115612a4357612a42614d2a565b5b816004811115612a5657612a55614d2a565b5b0315612b925760016004811115612a7057612a6f614d2a565b5b816004811115612a8357612a82614d2a565b5b03612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614da5565b60405180910390fd5b60026004811115612ad757612ad6614d2a565b5b816004811115612aea57612ae9614d2a565b5b03612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190614e11565b60405180910390fd5b60036004811115612b3e57612b3d614d2a565b5b816004811115612b5157612b50614d2a565b5b03612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890614ea3565b60405180910390fd5b5b50565b6000819050919050565b6000819050919050565b612bb2816124b8565b612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be890614f35565b60405180910390fd5b80612c1e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612b95565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c6b83612da0565b600082511180612c785750805b15612c8957612c878383612def565b505b505050565b600081604051602001612ca19190614fcd565b604051602081830303815290604052805190602001209050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612cf9576000600391509150612d97565b600060018787878760405160008152602001604052604051612d1e94939291906140c6565b6020604051602081039080840390855afa158015612d40573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d8e57600060019250925050612d97565b80600092509250505b94509492505050565b612da981612ba9565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060612e1483836040518060600160405280602781526020016150c660279139612e1c565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051612e469190613e51565b600060405180830381855af49150503d8060008114612e81576040519150601f19603f3d011682016040523d82523d6000602084013e612e86565b606091505b5091509150612e9786838387612ea2565b925050509392505050565b60608315612f04576000835103612efc57612ebc856124b8565b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef29061503f565b60405180910390fd5b5b829050612f0f565b612f0e8383612f17565b5b949350505050565b600082511115612f2a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e91906150a3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fa682612f7b565b9050919050565b612fb681612f9b565b8114612fc157600080fd5b50565b600081359050612fd381612fad565b92915050565b6000819050919050565b612fec81612fd9565b8114612ff757600080fd5b50565b60008135905061300981612fe3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130345761303361300f565b5b8235905067ffffffffffffffff81111561305157613050613014565b5b60208301915083600182028301111561306d5761306c613019565b5b9250929050565b60008060008060008060008060c0898b03121561309457613093612f71565b5b60006130a28b828c01612fc4565b98505060206130b38b828c01612fc4565b97505060406130c48b828c01612fc4565b96505060606130d58b828c01612ffa565b955050608089013567ffffffffffffffff8111156130f6576130f5612f76565b5b6131028b828c0161301e565b945094505060a089013567ffffffffffffffff81111561312557613124612f76565b5b6131318b828c0161301e565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61317881613143565b811461318357600080fd5b50565b6000813590506131958161316f565b92915050565b6000602082840312156131b1576131b0612f71565b5b60006131bf84828501613186565b91505092915050565b60008115159050919050565b6131dd816131c8565b82525050565b60006020820190506131f860008301846131d4565b92915050565b60006020828403121561321457613213612f71565b5b600061322284828501612fc4565b91505092915050565b60008060008060006080868803121561324757613246612f71565b5b600061325588828901612fc4565b955050602061326688828901612fc4565b945050604061327788828901612ffa565b935050606086013567ffffffffffffffff81111561329857613297612f76565b5b6132a48882890161301e565b92509250509295509295909350565b6132bc81613143565b82525050565b60006020820190506132d760008301846132b3565b92915050565b6000819050919050565b6132f0816132dd565b81146132fb57600080fd5b50565b60008135905061330d816132e7565b92915050565b60008060006040848603121561332c5761332b612f71565b5b600061333a868287016132fe565b935050602084013567ffffffffffffffff81111561335b5761335a612f76565b5b6133678682870161301e565b92509250509250925092565b61337c816131c8565b811461338757600080fd5b50565b60008135905061339981613373565b92915050565b6000806000806000608086880312156133bb576133ba612f71565b5b60006133c988828901612fc4565b95505060206133da888289016132fe565b945050604086013567ffffffffffffffff8111156133fb576133fa612f76565b5b6134078882890161301e565b9350935050606061341a8882890161338a565b9150509295509295909350565b600080fd5b6000610160828403121561344357613442613427565b5b81905092915050565b60008060006060848603121561346557613464612f71565b5b600084013567ffffffffffffffff81111561348357613482612f76565b5b61348f8682870161342c565b93505060206134a0868287016132fe565b92505060406134b186828701612ffa565b9150509250925092565b6134c481612fd9565b82525050565b60006020820190506134df60008301846134bb565b92915050565b60008083601f8401126134fb576134fa61300f565b5b8235905067ffffffffffffffff81111561351857613517613014565b5b60208301915083602082028301111561353457613533613019565b5b9250929050565b60008083601f8401126135515761355061300f565b5b8235905067ffffffffffffffff81111561356e5761356d613014565b5b60208301915083602082028301111561358a57613589613019565b5b9250929050565b60008083601f8401126135a7576135a661300f565b5b8235905067ffffffffffffffff8111156135c4576135c3613014565b5b6020830191508360208202830111156135e0576135df613019565b5b9250929050565b6000806000806000806060878903121561360457613603612f71565b5b600087013567ffffffffffffffff81111561362257613621612f76565b5b61362e89828a016134e5565b9650965050602087013567ffffffffffffffff81111561365157613650612f76565b5b61365d89828a0161353b565b9450945050604087013567ffffffffffffffff8111156136805761367f612f76565b5b61368c89828a01613591565b92509250509295509295509295565b60006136a682612f9b565b9050919050565b6136b68161369b565b81146136c157600080fd5b50565b6000813590506136d3816136ad565b92915050565b600080604083850312156136f0576136ef612f71565b5b60006136fe858286016136c4565b925050602061370f85828601612fc4565b9150509250929050565b600061372482612f7b565b9050919050565b61373481613719565b811461373f57600080fd5b50565b6000813590506137518161372b565b92915050565b6000806040838503121561376e5761376d612f71565b5b600061377c85828601613742565b925050602061378d85828601612ffa565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137e58261379c565b810181811067ffffffffffffffff82111715613804576138036137ad565b5b80604052505050565b6000613817612f67565b905061382382826137dc565b919050565b600067ffffffffffffffff821115613843576138426137ad565b5b61384c8261379c565b9050602081019050919050565b82818337600083830152505050565b600061387b61387684613828565b61380d565b90508281526020810184848401111561389757613896613797565b5b6138a2848285613859565b509392505050565b600082601f8301126138bf576138be61300f565b5b81356138cf848260208601613868565b91505092915050565b600080604083850312156138ef576138ee612f71565b5b60006138fd85828601612fc4565b925050602083013567ffffffffffffffff81111561391e5761391d612f76565b5b61392a858286016138aa565b9150509250929050565b61393d816132dd565b82525050565b60006020820190506139586000830184613934565b92915050565b6000806000806060858703121561397857613977612f71565b5b600061398687828801612fc4565b9450506020613997878288016132fe565b935050604085013567ffffffffffffffff8111156139b8576139b7612f76565b5b6139c48782880161301e565b925092505092959194509250565b6000819050919050565b60006139f76139f26139ed84612f7b565b6139d2565b612f7b565b9050919050565b6000613a09826139dc565b9050919050565b6000613a1b826139fe565b9050919050565b613a2b81613a10565b82525050565b6000602082019050613a466000830184613a22565b92915050565b60008060008060608587031215613a6657613a65612f71565b5b6000613a7487828801612fc4565b9450506020613a8587828801612ffa565b935050604085013567ffffffffffffffff811115613aa657613aa5612f76565b5b613ab28782880161301e565b925092505092959194509250565b60008060008060008060008060a0898b031215613ae057613adf612f71565b5b6000613aee8b828c01612fc4565b9850506020613aff8b828c01612fc4565b975050604089013567ffffffffffffffff811115613b2057613b1f612f76565b5b613b2c8b828c0161353b565b9650965050606089013567ffffffffffffffff811115613b4f57613b4e612f76565b5b613b5b8b828c0161353b565b9450945050608089013567ffffffffffffffff811115613b7e57613b7d612f76565b5b613b8a8b828c0161301e565b92509250509295985092959890939650565b60008060008060008060a08789031215613bb957613bb8612f71565b5b6000613bc789828a01612fc4565b9650506020613bd889828a01612fc4565b9550506040613be989828a01612ffa565b9450506060613bfa89828a01612ffa565b935050608087013567ffffffffffffffff811115613c1b57613c1a612f76565b5b613c2789828a0161301e565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c7082612fd9565b9150613c7b83612fd9565b9250828203905081811115613c9357613c92613c36565b5b92915050565b600080fd5b600080fd5b60008085851115613cb757613cb6613c99565b5b83861115613cc857613cc7613c9e565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000613d028383613cde565b82613d0d81356132dd565b92506020821015613d4d57613d487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613ce9565b831692505b505092915050565b600080600060608486031215613d6e57613d6d612f71565b5b6000613d7c86828701613742565b935050602084013567ffffffffffffffff811115613d9d57613d9c612f76565b5b613da9868287016138aa565b925050604084013567ffffffffffffffff811115613dca57613dc9612f76565b5b613dd6868287016138aa565b9150509250925092565b600081519050919050565b600081905092915050565b60005b83811015613e14578082015181840152602081019050613df9565b60008484015250505050565b6000613e2b82613de0565b613e358185613deb565b9350613e45818560208601613df6565b80840191505092915050565b6000613e5d8284613e20565b915081905092915050565b600082825260208201905092915050565b6000613e8482613de0565b613e8e8185613e68565b9350613e9e818560208601613df6565b613ea78161379c565b840191505092915050565b60006020820190508181036000830152613ecc8184613e79565b905092915050565b6000604082019050613ee96000830185613934565b8181036020830152613efb8184613e79565b90509392505050565b600081519050613f138161316f565b92915050565b600060208284031215613f2f57613f2e612f71565b5b6000613f3d84828501613f04565b91505092915050565b600082825260208201905092915050565b7f5369676e617475726556616c696461746f72237265636f7665725369676e657260008201527f3a20696e76616c6964207369676e6174757265206c656e677468000000000000602082015250565b6000613fb3603a83613f46565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5369676e617475726556616c696461746f723a20696e76616c6964207369676e60008201527f617475726520762076616c756500000000000000000000000000000000000000602082015250565b6000614074602d83613f46565b915061407f82614018565b604082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b600060ff82169050919050565b6140c0816140aa565b82525050565b60006080820190506140db6000830187613934565b6140e860208301866140b7565b6140f56040830185613934565b6141026060830184613934565b95945050505050565b7f41434c3a3a206f6e6c79206f776e6572206f7220677561726469616e00000000600082015250565b6000614141601c83613f46565b915061414c8261410b565b602082019050919050565b6000602082019050818103600083015261417081614134565b9050919050565b7f41434c3a3a206f6e6c79206f776e657200000000000000000000000000000000600082015250565b60006141ad601083613f46565b91506141b882614177565b602082019050919050565b600060208201905081810360008301526141dc816141a0565b9050919050565b7f457468657273706f7457616c6c65743a3a20456e747279506f696e742061646460008201527f726573732063616e6e6f74206265207a65726f00000000000000000000000000602082015250565b600061423f603383613f46565b915061424a826141e3565b604082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b61427e81612f9b565b82525050565b60006040820190506142996000830185614275565b6142a66020830184614275565b9392505050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000614309602c83613f46565b9150614314826142ad565b604082019050919050565b60006020820190508181036000830152614338816142fc565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600061439b602c83613f46565b91506143a68261433f565b604082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f41434c3a3a206e6f74206f776e6572206f7220656e747279506f696e74000000600082015250565b6000614407601d83613f46565b9150614412826143d1565b602082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f457468657273706f7457616c6c65743a3a206578656375746542617463683a2060008201527f77726f6e67206172726179206c656e6774687300000000000000000000000000602082015250565b6000614499603383613f46565b91506144a48261443d565b604082019050919050565b600060208201905081810360008301526144c88161448c565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126144fb576144fa6144cf565b5b80840192508235915067ffffffffffffffff82111561451d5761451c6144d4565b5b602083019250600182023603831315614539576145386144d9565b5b509250929050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061459d602e83613f46565b91506145a882614541565b604082019050919050565b600060208201905081810360008301526145cc81614590565b9050919050565b6000819050919050565b60006145f86145f36145ee846145d3565b6139d2565b6140aa565b9050919050565b614608816145dd565b82525050565b600060208201905061462360008301846145ff565b92915050565b600060208201905061463e6000830184614275565b92915050565b61464d81613719565b82525050565b60006040820190506146686000830185614644565b61467560208301846134bb565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006146d8603883613f46565b91506146e38261467c565b604082019050919050565b60006020820190508181036000830152614707816146cb565b9050919050565b600061471a8385613e68565b9350614727838584613859565b6147308361379c565b840190509392505050565b60006080820190506147506000830188614275565b61475d6020830187613934565b818103604083015261477081858761470e565b905061477f60608301846131d4565b9695505050505050565b60008151905061479881613373565b92915050565b6000602082840312156147b4576147b3612f71565b5b60006147c284828501614789565b91505092915050565b6000815190506147da81612fe3565b92915050565b6000602082840312156147f6576147f5612f71565b5b6000614804848285016147cb565b91505092915050565b6000819050919050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600061485661485161484c8461480d565b6139d2565b614817565b9050919050565b6148668161483b565b82525050565b60006040820190506148816000830185614275565b61488e602083018461485d565b9392505050565b7f41434c3a3a2072656d6f76696e672073656c6600000000000000000000000000600082015250565b60006148cb601383613f46565b91506148d682614895565b602082019050919050565b600060208201905081810360008301526148fa816148be565b9050919050565b7f41434c3a3a206e6f6e2d6578697374616e74206f776e65720000000000000000600082015250565b6000614937601883613f46565b915061494282614901565b602082019050919050565b600060208201905081810360008301526149668161492a565b9050919050565b60008151905061497c816132e7565b92915050565b60006020828403121561499857614997612f71565b5b60006149a68482850161496d565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000614a0b602e83613f46565b9150614a16826149af565b604082019050919050565b60006020820190508181036000830152614a3a816149fe565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000614a9d602983613f46565b9150614aa882614a41565b604082019050919050565b60006020820190508181036000830152614acc81614a90565b9050919050565b7f6163636f756e743a206e6f742066726f6d20456e747279506f696e7400000000600082015250565b6000614b09601c83613f46565b9150614b1482614ad3565b602082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b50565b6000614b4f600083613deb565b9150614b5a82614b3f565b600082019050919050565b6000614b7082614b42565b9150819050919050565b7f41434c3a3a207a65726f20616464726573730000000000000000000000000000600082015250565b6000614bb0601283613f46565b9150614bbb82614b7a565b602082019050919050565b60006020820190508181036000830152614bdf81614ba3565b9050919050565b7f41434c3a3a20616c7265616479206f776e657200000000000000000000000000600082015250565b6000614c1c601383613f46565b9150614c2782614be6565b602082019050919050565b60006020820190508181036000830152614c4b81614c0f565b9050919050565b7f41434c3a3a206e6f6e2d6578697374616e7420677561726469616e0000000000600082015250565b6000614c88601b83613f46565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f41434c3a3a20616c726561647920677561726469616e00000000000000000000600082015250565b6000614cf4601683613f46565b9150614cff82614cbe565b602082019050919050565b60006020820190508181036000830152614d2381614ce7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614d8f601883613f46565b9150614d9a82614d59565b602082019050919050565b60006020820190508181036000830152614dbe81614d82565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614dfb601f83613f46565b9150614e0682614dc5565b602082019050919050565b60006020820190508181036000830152614e2a81614dee565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8d602283613f46565b9150614e9882614e31565b604082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000614f1f602d83613f46565b9150614f2a82614ec3565b604082019050919050565b60006020820190508181036000830152614f4e81614f12565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614f96601c83614f55565b9150614fa182614f60565b601c82019050919050565b6000819050919050565b614fc7614fc2826132dd565b614fac565b82525050565b6000614fd882614f89565b9150614fe48284614fb6565b60208201915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615029601d83613f46565b915061503482614ff3565b602082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b600081519050919050565b60006150758261505f565b61507f8185613f46565b935061508f818560208601613df6565b6150988161379c565b840191505092915050565b600060208201905081810360008301526150bd818461506a565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205bf3c36f8dbb60e2dcc45d5d4a23b6cae104f28501a9dbbf5144253ea98392e364736f6c63430008110033"; type EtherspotWalletConstructorParams = | [signer?: Signer] @@ -875,4 +904,4 @@ export class EtherspotWallet__factory extends ContractFactory { ): EtherspotWallet { return new Contract(address, _abi, signerOrProvider) as EtherspotWallet; } -} +} \ No newline at end of file diff --git a/src/sdk/contracts/src/wallet/EtherspotWallet.ts b/src/sdk/contracts/src/wallet/EtherspotWallet.ts index 44c4ba51..9b4abe03 100644 --- a/src/sdk/contracts/src/wallet/EtherspotWallet.ts +++ b/src/sdk/contracts/src/wallet/EtherspotWallet.ts @@ -13,10 +13,20 @@ import type { PopulatedTransaction, Signer, utils, -} from 'ethers'; -import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi'; -import type { Listener, Provider } from '@ethersproject/providers'; -import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from '../../common'; +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../common"; export type UserOperationStruct = { sender: PromiseOrValue; @@ -43,7 +53,7 @@ export type UserOperationStructOutput = [ BigNumber, BigNumber, string, - string, + string ] & { sender: string; nonce: BigNumber; @@ -60,216 +70,352 @@ export type UserOperationStructOutput = [ export interface EtherspotWalletInterface extends utils.Interface { functions: { - 'addDeposit()': FunctionFragment; - 'addGuardian(address)': FunctionFragment; - 'addOwner(address)': FunctionFragment; - 'entryPoint()': FunctionFragment; - 'execute(address,uint256,bytes)': FunctionFragment; - 'executeBatch(address[],bytes[])': FunctionFragment; - 'getDeposit()': FunctionFragment; - 'initialize(address,address)': FunctionFragment; - 'isGuardian(address)': FunctionFragment; - 'isOwner(address)': FunctionFragment; - 'isValidSig(address,bytes32,bytes)': FunctionFragment; - 'isValidSigImpl(address,bytes32,bytes,bool)': FunctionFragment; - 'isValidSigWithSideEffects(address,bytes32,bytes)': FunctionFragment; - 'nonce()': FunctionFragment; - 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)': FunctionFragment; - 'onERC1155Received(address,address,uint256,uint256,bytes)': FunctionFragment; - 'onERC721Received(address,address,uint256,bytes)': FunctionFragment; - 'proxiableUUID()': FunctionFragment; - 'removeGuardian(address)': FunctionFragment; - 'removeOwner(address)': FunctionFragment; - 'supportsInterface(bytes4)': FunctionFragment; - 'tokensReceived(address,address,address,uint256,bytes,bytes)': FunctionFragment; - 'updateEntryPoint(address)': FunctionFragment; - 'upgradeTo(address)': FunctionFragment; - 'upgradeToAndCall(address,bytes)': FunctionFragment; - 'validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)': FunctionFragment; - 'withdrawDepositTo(address,uint256)': FunctionFragment; + "addDeposit()": FunctionFragment; + "addGuardian(address)": FunctionFragment; + "addOwner(address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],uint256[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "getNonce()": FunctionFragment; + "initialize(address,address)": FunctionFragment; + "isGuardian(address)": FunctionFragment; + "isOwner(address)": FunctionFragment; + "isValidSig(address,bytes32,bytes)": FunctionFragment; + "isValidSigImpl(address,bytes32,bytes,bool)": FunctionFragment; + "isValidSigWithSideEffects(address,bytes32,bytes)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "removeGuardian(address)": FunctionFragment; + "removeOwner(address)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | 'addDeposit' - | 'addGuardian' - | 'addOwner' - | 'entryPoint' - | 'execute' - | 'executeBatch' - | 'getDeposit' - | 'initialize' - | 'isGuardian' - | 'isOwner' - | 'isValidSig' - | 'isValidSigImpl' - | 'isValidSigWithSideEffects' - | 'nonce' - | 'onERC1155BatchReceived' - | 'onERC1155Received' - | 'onERC721Received' - | 'proxiableUUID' - | 'removeGuardian' - | 'removeOwner' - | 'supportsInterface' - | 'tokensReceived' - | 'updateEntryPoint' - | 'upgradeTo' - | 'upgradeToAndCall' - | 'validateUserOp' - | 'withdrawDepositTo', + | "addDeposit" + | "addGuardian" + | "addOwner" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "getNonce" + | "initialize" + | "isGuardian" + | "isOwner" + | "isValidSig" + | "isValidSigImpl" + | "isValidSigWithSideEffects" + | "isValidSignature" + | "onERC1155BatchReceived" + | "onERC1155Received" + | "onERC721Received" + | "proxiableUUID" + | "removeGuardian" + | "removeOwner" + | "supportsInterface" + | "tokensReceived" + | "updateEntryPoint" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" ): FunctionFragment; - encodeFunctionData(functionFragment: 'addDeposit', values?: undefined): string; - encodeFunctionData(functionFragment: 'addGuardian', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'addOwner', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'entryPoint', values?: undefined): string; encodeFunctionData( - functionFragment: 'execute', - values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "addGuardian", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "addOwner", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] ): string; encodeFunctionData( - functionFragment: 'executeBatch', - values: [PromiseOrValue[], PromiseOrValue[]], + functionFragment: "getDeposit", + values?: undefined ): string; - encodeFunctionData(functionFragment: 'getDeposit', values?: undefined): string; - encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue, PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'isGuardian', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'isOwner', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getNonce", values?: undefined): string; encodeFunctionData( - functionFragment: 'isValidSig', - values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], + functionFragment: "initialize", + values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: 'isValidSigImpl', - values: [PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue], + functionFragment: "isGuardian", + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: 'isValidSigWithSideEffects', - values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], + functionFragment: "isOwner", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: 'nonce', values?: undefined): string; encodeFunctionData( - functionFragment: 'onERC1155BatchReceived', + functionFragment: "isValidSig", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSigImpl", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSigWithSideEffects", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "onERC1155BatchReceived", values: [ PromiseOrValue, PromiseOrValue, PromiseOrValue[], PromiseOrValue[], - PromiseOrValue, - ], + PromiseOrValue + ] ): string; encodeFunctionData( - functionFragment: 'onERC1155Received', + functionFragment: "onERC1155Received", values: [ PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue, - PromiseOrValue, - ], + PromiseOrValue + ] ): string; encodeFunctionData( - functionFragment: 'onERC721Received', - values: [PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue], + functionFragment: "onERC721Received", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "removeGuardian", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "removeOwner", + values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: 'proxiableUUID', values?: undefined): string; - encodeFunctionData(functionFragment: 'removeGuardian', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'removeOwner', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'supportsInterface', values: [PromiseOrValue]): string; encodeFunctionData( - functionFragment: 'tokensReceived', + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "tokensReceived", values: [ PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue, PromiseOrValue, - PromiseOrValue, - ], + PromiseOrValue + ] ): string; - encodeFunctionData(functionFragment: 'updateEntryPoint', values: [PromiseOrValue]): string; - encodeFunctionData(functionFragment: 'upgradeTo', values: [PromiseOrValue]): string; encodeFunctionData( - functionFragment: 'upgradeToAndCall', - values: [PromiseOrValue, PromiseOrValue], + functionFragment: "updateEntryPoint", + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: 'validateUserOp', - values: [UserOperationStruct, PromiseOrValue, PromiseOrValue], + functionFragment: "upgradeTo", + values: [PromiseOrValue] ): string; encodeFunctionData( - functionFragment: 'withdrawDepositTo', - values: [PromiseOrValue, PromiseOrValue], + functionFragment: "upgradeToAndCall", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] ): string; - decodeFunctionResult(functionFragment: 'addDeposit', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'addGuardian', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'addOwner', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'entryPoint', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'execute', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'executeBatch', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'getDeposit', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'isGuardian', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'isValidSig', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'isValidSigImpl', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'isValidSigWithSideEffects', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'onERC1155BatchReceived', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'onERC1155Received', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'onERC721Received', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'proxiableUUID', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'removeGuardian', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'removeOwner', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'supportsInterface', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'tokensReceived', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'updateEntryPoint', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'upgradeTo', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'upgradeToAndCall', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'validateUserOp', data: BytesLike): Result; - decodeFunctionResult(functionFragment: 'withdrawDepositTo', data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "addGuardian", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isGuardian", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isValidSig", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isValidSigImpl", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSigWithSideEffects", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155BatchReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "removeGuardian", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "removeOwner", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; events: { - 'AdminChanged(address,address)': EventFragment; - 'BeaconUpgraded(address)': EventFragment; - 'EntryPointChanged(address,address)': EventFragment; - 'EtherspotWalletInitialized(address,address)': EventFragment; - 'EtherspotWalletReceived(address,uint256)': EventFragment; - 'GuardianAdded(address)': EventFragment; - 'GuardianRemoved(address)': EventFragment; - 'Initialized(uint8)': EventFragment; - 'OwnerAdded(address)': EventFragment; - 'OwnerRemoved(address)': EventFragment; - 'Upgraded(address)': EventFragment; + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "EntryPointChanged(address,address)": EventFragment; + "EtherspotWalletInitialized(address,address)": EventFragment; + "EtherspotWalletReceived(address,uint256)": EventFragment; + "GuardianAdded(address)": EventFragment; + "GuardianRemoved(address)": EventFragment; + "Initialized(uint8)": EventFragment; + "OwnerAdded(address)": EventFragment; + "OwnerRemoved(address)": EventFragment; + "Upgraded(address)": EventFragment; }; - getEvent(nameOrSignatureOrTopic: 'AdminChanged'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'BeaconUpgraded'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'EntryPointChanged'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'EtherspotWalletInitialized'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'EtherspotWalletReceived'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'GuardianAdded'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'GuardianRemoved'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'OwnerAdded'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'OwnerRemoved'): EventFragment; - getEvent(nameOrSignatureOrTopic: 'Upgraded'): EventFragment; + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EtherspotWalletReceived"): EventFragment; + getEvent(nameOrSignatureOrTopic: "GuardianAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "GuardianRemoved"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnerAdded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnerRemoved"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; } export interface AdminChangedEventObject { previousAdmin: string; newAdmin: string; } -export type AdminChangedEvent = TypedEvent<[string, string], AdminChangedEventObject>; +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; export type AdminChangedEventFilter = TypedEventFilter; export interface BeaconUpgradedEventObject { beacon: string; } -export type BeaconUpgradedEvent = TypedEvent<[string], BeaconUpgradedEventObject>; +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; export type BeaconUpgradedEventFilter = TypedEventFilter; @@ -277,25 +423,37 @@ export interface EntryPointChangedEventObject { oldEntryPoint: string; newEntryPoint: string; } -export type EntryPointChangedEvent = TypedEvent<[string, string], EntryPointChangedEventObject>; +export type EntryPointChangedEvent = TypedEvent< + [string, string], + EntryPointChangedEventObject +>; -export type EntryPointChangedEventFilter = TypedEventFilter; +export type EntryPointChangedEventFilter = + TypedEventFilter; export interface EtherspotWalletInitializedEventObject { entryPoint: string; owner: string; } -export type EtherspotWalletInitializedEvent = TypedEvent<[string, string], EtherspotWalletInitializedEventObject>; +export type EtherspotWalletInitializedEvent = TypedEvent< + [string, string], + EtherspotWalletInitializedEventObject +>; -export type EtherspotWalletInitializedEventFilter = TypedEventFilter; +export type EtherspotWalletInitializedEventFilter = + TypedEventFilter; export interface EtherspotWalletReceivedEventObject { from: string; amount: BigNumber; } -export type EtherspotWalletReceivedEvent = TypedEvent<[string, BigNumber], EtherspotWalletReceivedEventObject>; +export type EtherspotWalletReceivedEvent = TypedEvent< + [string, BigNumber], + EtherspotWalletReceivedEventObject +>; -export type EtherspotWalletReceivedEventFilter = TypedEventFilter; +export type EtherspotWalletReceivedEventFilter = + TypedEventFilter; export interface GuardianAddedEventObject { newGuardian: string; @@ -307,7 +465,10 @@ export type GuardianAddedEventFilter = TypedEventFilter; export interface GuardianRemovedEventObject { removedGuardian: string; } -export type GuardianRemovedEvent = TypedEvent<[string], GuardianRemovedEventObject>; +export type GuardianRemovedEvent = TypedEvent< + [string], + GuardianRemovedEventObject +>; export type GuardianRemovedEventFilter = TypedEventFilter; @@ -349,12 +510,16 @@ export interface EtherspotWallet extends BaseContract { queryFilter( event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined, + toBlock?: string | number | undefined ): Promise>; - listeners(eventFilter?: TypedEventFilter): Array>; + listeners( + eventFilter?: TypedEventFilter + ): Array>; listeners(eventName?: string): Array; - removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; removeAllListeners(eventName?: string): this; off: OnEvent; on: OnEvent; @@ -362,16 +527,18 @@ export interface EtherspotWallet extends BaseContract { removeListener: OnEvent; functions: { - addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise<[string]>; @@ -380,32 +547,41 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; executeBatch( dest: PromiseOrValue[], + value: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + getNonce(overrides?: CallOverrides): Promise<[BigNumber]>; + initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; - isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigImpl( @@ -413,17 +589,21 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { magicValue: string }>; onERC1155BatchReceived( arg0: PromiseOrValue, @@ -431,7 +611,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise<[string]>; onERC1155Received( @@ -440,7 +620,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise<[string]>; onERC721Received( @@ -448,22 +628,25 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise<[string]>; proxiableUUID(overrides?: CallOverrides): Promise<[string]>; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; tokensReceived( arg0: PromiseOrValue, @@ -472,49 +655,51 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise<[void]>; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue }, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; - addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -523,32 +708,41 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; executeBatch( dest: PromiseOrValue[], + value: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; + getNonce(overrides?: CallOverrides): Promise; + initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigImpl( @@ -556,17 +750,21 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - nonce(overrides?: CallOverrides): Promise; + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; onERC1155BatchReceived( arg0: PromiseOrValue, @@ -574,7 +772,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC1155Received( @@ -583,7 +781,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC721Received( @@ -591,22 +789,25 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, @@ -615,44 +816,50 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue }, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; callStatic: { addDeposit(overrides?: CallOverrides): Promise; - addGuardian(_newGuardian: PromiseOrValue, overrides?: CallOverrides): Promise; + addGuardian( + _newGuardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - addOwner(_newOwner: PromiseOrValue, overrides?: CallOverrides): Promise; + addOwner( + _newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -660,32 +867,41 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; executeBatch( dest: PromiseOrValue[], + value: PromiseOrValue[], func: PromiseOrValue[], - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; getDeposit(overrides?: CallOverrides): Promise; + getNonce(overrides?: CallOverrides): Promise; + initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; - isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; isValidSigImpl( @@ -693,17 +909,21 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; - nonce(overrides?: CallOverrides): Promise; + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; onERC1155BatchReceived( arg0: PromiseOrValue, @@ -711,7 +931,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC1155Received( @@ -720,7 +940,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC721Received( @@ -728,16 +948,25 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; - removeGuardian(_guardian: PromiseOrValue, overrides?: CallOverrides): Promise; + removeGuardian( + _guardian: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - removeOwner(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; + removeOwner( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, @@ -746,91 +975,121 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; - updateEntryPoint(_newEntryPoint: PromiseOrValue, overrides?: CallOverrides): Promise; + updateEntryPoint( + _newEntryPoint: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - upgradeTo(newImplementation: PromiseOrValue, overrides?: CallOverrides): Promise; + upgradeTo( + newImplementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; }; filters: { - 'AdminChanged(address,address)'(previousAdmin?: null, newAdmin?: null): AdminChangedEventFilter; - AdminChanged(previousAdmin?: null, newAdmin?: null): AdminChangedEventFilter; - - 'BeaconUpgraded(address)'(beacon?: PromiseOrValue | null): BeaconUpgradedEventFilter; - BeaconUpgraded(beacon?: PromiseOrValue | null): BeaconUpgradedEventFilter; - - 'EntryPointChanged(address,address)'(oldEntryPoint?: null, newEntryPoint?: null): EntryPointChangedEventFilter; - EntryPointChanged(oldEntryPoint?: null, newEntryPoint?: null): EntryPointChangedEventFilter; - - 'EtherspotWalletInitialized(address,address)'( + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: PromiseOrValue | null + ): BeaconUpgradedEventFilter; + + "EntryPointChanged(address,address)"( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: null, + newEntryPoint?: null + ): EntryPointChangedEventFilter; + + "EtherspotWalletInitialized(address,address)"( entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null, + owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; EtherspotWalletInitialized( entryPoint?: PromiseOrValue | null, - owner?: PromiseOrValue | null, + owner?: PromiseOrValue | null ): EtherspotWalletInitializedEventFilter; - 'EtherspotWalletReceived(address,uint256)'( + "EtherspotWalletReceived(address,uint256)"( from?: PromiseOrValue | null, - amount?: PromiseOrValue | null, + amount?: PromiseOrValue | null ): EtherspotWalletReceivedEventFilter; EtherspotWalletReceived( from?: PromiseOrValue | null, - amount?: PromiseOrValue | null, + amount?: PromiseOrValue | null ): EtherspotWalletReceivedEventFilter; - 'GuardianAdded(address)'(newGuardian?: null): GuardianAddedEventFilter; + "GuardianAdded(address)"(newGuardian?: null): GuardianAddedEventFilter; GuardianAdded(newGuardian?: null): GuardianAddedEventFilter; - 'GuardianRemoved(address)'(removedGuardian?: null): GuardianRemovedEventFilter; + "GuardianRemoved(address)"( + removedGuardian?: null + ): GuardianRemovedEventFilter; GuardianRemoved(removedGuardian?: null): GuardianRemovedEventFilter; - 'Initialized(uint8)'(version?: null): InitializedEventFilter; + "Initialized(uint8)"(version?: null): InitializedEventFilter; Initialized(version?: null): InitializedEventFilter; - 'OwnerAdded(address)'(newOwner?: null): OwnerAddedEventFilter; + "OwnerAdded(address)"(newOwner?: null): OwnerAddedEventFilter; OwnerAdded(newOwner?: null): OwnerAddedEventFilter; - 'OwnerRemoved(address)'(removedOwner?: null): OwnerRemovedEventFilter; + "OwnerRemoved(address)"(removedOwner?: null): OwnerRemovedEventFilter; OwnerRemoved(removedOwner?: null): OwnerRemovedEventFilter; - 'Upgraded(address)'(implementation?: PromiseOrValue | null): UpgradedEventFilter; - Upgraded(implementation?: PromiseOrValue | null): UpgradedEventFilter; + "Upgraded(address)"( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; + Upgraded( + implementation?: PromiseOrValue | null + ): UpgradedEventFilter; }; estimateGas: { - addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -839,32 +1098,41 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; executeBatch( dest: PromiseOrValue[], + value: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; + getNonce(overrides?: CallOverrides): Promise; + initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigImpl( @@ -872,17 +1140,21 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - nonce(overrides?: CallOverrides): Promise; + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; onERC1155BatchReceived( arg0: PromiseOrValue, @@ -890,7 +1162,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC1155Received( @@ -899,7 +1171,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC721Received( @@ -907,22 +1179,25 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, @@ -931,50 +1206,52 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue }, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { - addDeposit(overrides?: PayableOverrides & { from?: PromiseOrValue }): Promise; + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; addGuardian( _newGuardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; addOwner( _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; entryPoint(overrides?: CallOverrides): Promise; @@ -983,32 +1260,41 @@ export interface EtherspotWallet extends BaseContract { dest: PromiseOrValue, value: PromiseOrValue, func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; executeBatch( dest: PromiseOrValue[], + value: PromiseOrValue[], func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; getDeposit(overrides?: CallOverrides): Promise; + getNonce(overrides?: CallOverrides): Promise; + initialize( anEntryPoint: PromiseOrValue, anOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - isGuardian(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isGuardian( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - isOwner(_address: PromiseOrValue, overrides?: CallOverrides): Promise; + isOwner( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; isValidSig( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigImpl( @@ -1016,17 +1302,21 @@ export interface EtherspotWallet extends BaseContract { _hash: PromiseOrValue, _signature: PromiseOrValue, allowSideEffects: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; isValidSigWithSideEffects( _signer: PromiseOrValue, _hash: PromiseOrValue, _signature: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - nonce(overrides?: CallOverrides): Promise; + isValidSignature( + hash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; onERC1155BatchReceived( arg0: PromiseOrValue, @@ -1034,7 +1324,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue[], arg3: PromiseOrValue[], arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC1155Received( @@ -1043,7 +1333,7 @@ export interface EtherspotWallet extends BaseContract { arg2: PromiseOrValue, arg3: PromiseOrValue, arg4: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; onERC721Received( @@ -1051,22 +1341,25 @@ export interface EtherspotWallet extends BaseContract { arg1: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; proxiableUUID(overrides?: CallOverrides): Promise; removeGuardian( _guardian: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; removeOwner( _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - supportsInterface(interfaceId: PromiseOrValue, overrides?: CallOverrides): Promise; + supportsInterface( + interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; tokensReceived( arg0: PromiseOrValue, @@ -1075,36 +1368,36 @@ export interface EtherspotWallet extends BaseContract { arg3: PromiseOrValue, arg4: PromiseOrValue, arg5: PromiseOrValue, - overrides?: CallOverrides, + overrides?: CallOverrides ): Promise; updateEntryPoint( _newEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeTo( newImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; upgradeToAndCall( newImplementation: PromiseOrValue, data: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue }, + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; validateUserOp( userOp: UserOperationStruct, userOpHash: PromiseOrValue, missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; withdrawDepositTo( withdrawAddress: PromiseOrValue, amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue }, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; -} +} \ No newline at end of file diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 55830f09..2ada4d0e 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -1,5 +1,4 @@ -export { LiteSdk } from './sdk'; -import { Sdk } from './sdk1'; +import { PrimeSdk } from './sdk'; export * from './account'; export * from './dto'; @@ -10,5 +9,5 @@ export * from './session'; export * from './state'; export * from './wallet'; -export { Sdk }; -export default Sdk; \ No newline at end of file +export { PrimeSdk }; +export default PrimeSdk; \ No newline at end of file diff --git a/src/sdk/interfaces.ts b/src/sdk/interfaces.ts index 888b991a..33ccfdad 100644 --- a/src/sdk/interfaces.ts +++ b/src/sdk/interfaces.ts @@ -2,6 +2,7 @@ import { StateStorage } from './state'; import { SessionStorage } from './session'; import { NetworkNames } from './network'; import { EnvLike } from './env'; +import { VerifyingPaymasterAPI } from './base'; export interface SdkOptions { env: EnvLike; @@ -11,4 +12,5 @@ export interface SdkOptions { omitWalletProviderNetworkCheck?: boolean; bundlerRpcUrl: string; rpcProviderUrl?: string; + paymasterApi?: VerifyingPaymasterAPI; } diff --git a/src/sdk/network/constants.ts b/src/sdk/network/constants.ts index 2adccd1b..35e87354 100644 --- a/src/sdk/network/constants.ts +++ b/src/sdk/network/constants.ts @@ -18,7 +18,7 @@ export const Networks: { bundler: 'https://mumbai-bundler.etherspot.io', contracts: { entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789', - walletFactory: '0xD05a6638b11fCf28157f43dAEDb3B541CCfcC7F8', + walletFactory: '0xBabd8268f9579b05E6042661081eF6015E1d34dE', uniswapV3SwapRouter: '0xE592427A0AEce92De3Edee1F18E0157C05861564', }, paymaster: { diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 7c22636f..b66d2bb7 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -1,131 +1,172 @@ -import { BigNumberish, Wallet, ethers, providers } from 'ethers'; -import { EtherspotWalletAPI, HttpRpcClient, VerifyingPaymasterAPI } from './base'; -import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; +import { BehaviorSubject } from 'rxjs'; +import { State, StateService } from './state'; +import { isWalletProvider, WalletProviderLike } from './wallet'; +import { SdkOptions } from './interfaces'; +import { Network } from "./network"; +import { Env } from "./env"; +import { BatchTransactionRequest, Exception, getGasFee, TransactionRequest } from "./common"; +import { BigNumber, BigNumberish, ethers, providers, Wallet } from 'ethers'; +import { Networks } from './network/constants'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; -import { getGasFee } from './common'; +import { EtherspotWalletAPI, HttpRpcClient } from './base'; +import { TransactionDetailsForUserOp, TransactionGasInfoForUserOp } from './base/TransactionDetailsForUserOp'; +import { CreateSessionDto, SignMessageDto, validateDto } from './dto'; +import { Session } from '.'; +import { ERC20__factory } from './contracts'; import { ERC20_ABI } from './helpers/abi/ERC20_ABI'; -export class LiteSdk { - private EtherspotWallet: EtherspotWalletAPI; +/** + * Prime-Sdk + * + * @category Prime-Sdk + */ +export class PrimeSdk { + + private etherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; - wallet: Wallet; - rpcProvider: ethers.providers.JsonRpcProvider; - - constructor( - private privateKey: string, - provider: string, - bundlerRpc: string, - chainId: number, - entryPoint: string, - accountFactory: string, - paymasterAPI: VerifyingPaymasterAPI | undefined, - ) { - this.rpcProvider = new ethers.providers.JsonRpcProvider(provider); - this.wallet = new Wallet(privateKey, this.rpcProvider); - // this.EtherspotWallet = new EtherspotWalletAPI({ - // provider: this.wallet.provider, - // owner: this.wallet, - // index: 0, - // entryPointAddress: entryPoint, - // factoryAddress: accountFactory, - // paymasterAPI: paymasterAPI, - // }); - this.bundler = new HttpRpcClient(bundlerRpc, entryPoint, chainId); - } - async getCounterFactualAddress(): Promise { - return this.EtherspotWallet.getCounterFactualAddress(); - } + private transactions: BatchTransactionRequest = {to: [], data: [], value: []}; - async getUserOpReceipt(userOpHash: string, timeout = 60000, interval = 5000): Promise { - const block = await this.wallet.provider.getBlock('latest'); - const endtime = Date.now() + timeout; - while (Date.now() < endtime) { - const events = await this.EtherspotWallet.epView.queryFilter( - this.EtherspotWallet.epView.filters.UserOperationEvent(userOpHash), - Math.max(100, block.number - 100), - ); - if (events.length > 0) { - console.log(events[0].args.actualGasUsed.toString()); - return events[0].transactionHash; - } - await new Promise((resolve) => setTimeout(resolve, interval)); + constructor(walletProvider: WalletProviderLike, optionsLike: SdkOptions) { + + if (!isWalletProvider(walletProvider)) { + throw new Exception('Invalid wallet provider'); } - return null; + + const env = Env.prepare(optionsLike.env); + + const { + networkName, // + rpcProviderUrl, + bundlerRpcUrl, + } = optionsLike; + + + let provider; + + if (rpcProviderUrl) { + provider = new providers.JsonRpcProvider(rpcProviderUrl); + } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); + + this.etherspotWallet = new EtherspotWalletAPI({ + owner: new Wallet(walletProvider.privateKey, provider), + provider, + walletProvider, + optionsLike, + entryPointAddress: Networks[networkName].contracts.entryPoint, + factoryAddress: Networks[networkName].contracts.walletFactory, + paymasterAPI: optionsLike.paymasterApi, + }) + + this.bundler = new HttpRpcClient(bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); + } - async sign(tx: TransactionDetailsForUserOp) { - const gas = await this.getGasFee(); - return this.EtherspotWallet.createSignedUserOp({ - ...tx, - ...gas, - }); + // exposes + get state(): StateService { + return this.etherspotWallet.services.stateService; } - async getHash(userOp: UserOperationStruct) { - return this.EtherspotWallet.getUserOpHash(userOp); + get state$(): BehaviorSubject { + return this.etherspotWallet.services.stateService.state$; } - async send(userOp: UserOperationStruct) { - return this.bundler.sendUserOpToBundler(userOp); + get supportedNetworks(): Network[] { + return this.etherspotWallet.services.networkService.supportedNetworks; } - async getGasFee() { - return getGasFee(this.wallet.provider as providers.JsonRpcProvider); + /** + * destroys + */ + destroy(): void { + this.etherspotWallet.context.destroy(); } - // added below + // wallet - async getAccountContract() { - return this.EtherspotWallet._getAccountContract(); - } + /** + * signs message + * @param dto + * @return Promise + */ + async signMessage(dto: SignMessageDto): Promise { + const { message } = await validateDto(dto, SignMessageDto); + + await this.etherspotWallet.require({ + network: false, + }); - get epView() { - return this.EtherspotWallet.epView; + return this.etherspotWallet.services.walletService.signMessage(message); } - async encodeExecute(target: string, value: BigNumberish, data: string): Promise { - const formatTarget = ethers.utils.getAddress(target); - return await this.EtherspotWallet.encodeExecute(formatTarget, value, data); + // session + + /** + * creates session + * @param dto + * @return Promise + */ + async createSession(dto: CreateSessionDto = {}): Promise { + const { ttl, fcmToken } = await validateDto(dto, CreateSessionDto); + + await this.etherspotWallet.require(); + + return this.etherspotWallet.services.sessionService.createSession(ttl, fcmToken); } - async encodeBatch(targets: string[], datas: string[]): Promise { - return this.EtherspotWallet.encodeBatch(targets, datas); + async getCounterFactualAddress(): Promise { + return this.etherspotWallet.getCounterFactualAddress(); } - async prefundIfRequired(amount: string, tokenAddress?: string): Promise { + + async depositFromKeyWallet(amount: string, tokenAddress?: string): Promise { try { const ewalletAddress = await this.getCounterFactualAddress(); if (tokenAddress) { const token = ethers.utils.getAddress(tokenAddress); - const erc20 = new ethers.Contract(token, ERC20_ABI, this.wallet); - const dec = await erc20.decimals(); - const balance = await erc20.balanceOf(ewalletAddress); + const erc20Contract = ERC20__factory.connect(token, this.etherspotWallet.services.walletService.getWalletProvider()); + const dec = await erc20Contract.functions.decimals(); + const approveData = erc20Contract.interface.encodeFunctionData('approve', [this.state.walletAddress, ethers.utils.parseUnits(amount, dec)]) + const transactionData = erc20Contract.interface.encodeFunctionData('transferFrom', [this.state.walletAddress, ewalletAddress, ethers.utils.parseUnits(amount, dec)]) + const balance = await erc20Contract.functions.balanceOf(ewalletAddress) + if (balance[0].lt(ethers.utils.parseEther(amount))) { + + const approvetx = await this.etherspotWallet.services.walletService.sendTransaction({ + to: tokenAddress, // EtherspotWallet address + data: approveData, // approval data + gasLimit: ethers.utils.hexlify(500000), + }); - if (balance.lt(ethers.utils.parseEther(amount))) { - const tx = await erc20.transfer(ewalletAddress, ethers.utils.parseUnits(amount, dec)); + await approvetx.wait(); + + const tx = await this.etherspotWallet.services.walletService.sendTransaction({ + to: tokenAddress, // EtherspotWallet address + data: transactionData, // transferFrom data + gasLimit: ethers.utils.hexlify(500000), + }); await tx.wait(); - return `Transfer successful. Account funded with ${amount} ${await erc20.symbol()}`; + return `Transfer successful. Account funded with ${amount} ${await erc20Contract.symbol()}`; } else { return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther( - balance, - )} ${await erc20.symbol()}`; + balance[0], + )} ${await erc20Contract.symbol()}`; } } else { - const balance = await this.rpcProvider.getBalance(ewalletAddress); + const balance = await this.etherspotWallet.provider.getBalance(ewalletAddress); + // Check if wallet balance is less than the amount to transfer if (balance.lt(ethers.utils.parseEther(amount))) { // Transfer funds to the wallet - const tx = await this.wallet.sendTransaction({ + const tx = await this.etherspotWallet.services.walletService.sendTransaction({ to: ewalletAddress, // EtherspotWallet address data: '0x', // no data value: ethers.utils.parseEther(amount), // 0.1 MATIC gasLimit: ethers.utils.hexlify(50000), }); await tx.wait(); - return `Transfer successful. Account funded with ${amount}`; + return `Transfer successful. Account funded with ${amount} ${tx}`; } else { return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther(balance)}`; } @@ -136,87 +177,84 @@ export class LiteSdk { } } - async getERC20Instance(tokenAddress: string) { - const token = ethers.utils.getAddress(tokenAddress); - return new ethers.Contract(token, ERC20_ABI, this.wallet); - } + async sign(gasDetails?: TransactionGasInfoForUserOp) { + const gas = await this.getGasFee(); - async erc20Balance(address: string, tokenAddress: string): Promise { - const erc20 = await this.getERC20Instance(tokenAddress); - return await erc20.balanceOf(address); - } + if (this.transactions.to.length < 1){ + throw new Error("cannot sign empty transaction batch"); + } - async erc20Approve(spender: string, amount: string, tokenAddress: string): Promise { - const ewalletAddress = await this.getCounterFactualAddress(); - try { - const erc20 = await this.getERC20Instance(tokenAddress); - const value = await this.formatAmount(amount, await erc20.decimals()); - const success = await erc20.approve(spender, value, { from: ewalletAddress }); - return success; - } catch (error) { - console.error(error); - return false; + const tx: TransactionDetailsForUserOp = { + target: this.transactions.to, + values: this.transactions.value, + data: this.transactions.data, + ...gasDetails, } - } - formatAmount(amount: string, decimals = 18): BigNumberish { - return ethers.utils.parseUnits(amount, decimals); + return this.etherspotWallet.createSignedUserOp({ + ...tx, + ...gas, + }); } - parseAmount(amount: string, decimals = 18): string { - return ethers.utils.formatUnits(amount, decimals); + async getGasFee() { + return getGasFee(this.etherspotWallet.provider as providers.JsonRpcProvider); } - async generateBatchExecutesData( - target: string, - recipients: string[], - values: string[], - ): Promise<{ dest: string[]; data: string[] }> { - const ac = await this.getAccountContract(); - const dest = Array.from({ length: recipients.length }, () => target); - const data = await Promise.all( - recipients.map(async (recipient, i) => - ac.interface.encodeFunctionData('execute', [recipient, this.formatAmount(values[i]), '0x']), - ), - ); - - return { dest, data }; + async send(userOp: UserOperationStruct) { + return this.bundler.sendUserOpToBundler(userOp); } - async generateERC20BatchTransfersData( - target: string, - recipients: string[], - values: string[], - ): Promise<{ dest: string[]; data: string[] }> { - const erc20 = await this.getERC20Instance(target); - const [sym, dec] = await Promise.all([erc20.symbol(), erc20.decimals()]); + async getNativeBalance() { + if (!this.etherspotWallet.accountAddress) { + await this.getCounterFactualAddress(); + } + const balance = await this.etherspotWallet.provider.getBalance(this.etherspotWallet.accountAddress); + return ethers.utils.formatEther(balance); + } - const transferDataPromises = recipients.map((recipient, i) => { - const transferData = erc20.interface.encodeFunctionData('transfer', [ - recipient, - this.formatAmount(values[i], dec), - ]); - return Promise.resolve(transferData); - }); + async getTokenBalance(tokenAddress: string) { + if (!this.etherspotWallet.accountAddress) { + await this.getCounterFactualAddress(); + } + const token = ethers.utils.getAddress(tokenAddress); + const erc20Contract = ERC20__factory.connect(token, this.etherspotWallet.services.walletService.getWalletProvider()); + const dec = await erc20Contract.functions.decimals(); + const balance = await erc20Contract.functions.balanceOf(this.etherspotWallet.accountAddress) + return ethers.utils.formatUnits(balance[0], dec); + } - const transferData = await Promise.all(transferDataPromises); + async getUserOpReceipt(userOpHash: string, timeout = 60000, interval = 5000): Promise { + const block = await this.etherspotWallet.provider.getBlock('latest'); + const endtime = Date.now() + timeout; + while (Date.now() < endtime) { + const events = await this.etherspotWallet.epView.queryFilter( + this.etherspotWallet.epView.filters.UserOperationEvent(userOpHash), + Math.max(100, block.number - 100), + ); + if (events.length > 0) { + console.log(events[0].args.actualGasUsed.toString()); + return events[0].transactionHash; + } + await new Promise((resolve) => setTimeout(resolve, interval)); + } + return null; + } - return { - dest: Array.from({ length: recipients.length }, () => erc20.address), - data: transferData, - }; + async getHash(userOp: UserOperationStruct) { + return this.etherspotWallet.getUserOpHash(userOp); } - async connectToContract(address: string, abi: any) { - const addr = ethers.utils.getAddress(address); - return new ethers.Contract(addr, abi, this.wallet); + async encodeExecute(target: string, value: BigNumberish, data: string): Promise { + const formatTarget = ethers.utils.getAddress(target); + return await this.etherspotWallet.encodeExecute(formatTarget, value, data); } - async generateUniSingleSwapParams(tokenIn: string, tokenOut: string, value: string) { + async getUniSingleSwapParams(tokenIn: string, tokenOut: string, value: string) { const wallet = await this.getCounterFactualAddress(); const amount = ethers.utils.parseEther(value); - const blockNum = await this.rpcProvider.getBlockNumber(); - const timestamp = (await this.rpcProvider.getBlock(blockNum)).timestamp; + const blockNum = await this.etherspotWallet.provider.getBlockNumber(); + const timestamp = (await this.etherspotWallet.provider.getBlock(blockNum)).timestamp; const params = { tokenIn: tokenIn, tokenOut: tokenOut, @@ -230,9 +268,37 @@ export class LiteSdk { return params; } - async mintTokenToOwner(tokenAddress: string, amount: string) { - const erc20 = await this.getERC20Instance(tokenAddress); - const formatAmount = this.formatAmount(amount, await erc20.decimals()); - await erc20.mint(this.wallet.address, formatAmount); + async addTransactionToBatch( + tx: TransactionRequest, + ): Promise { + this.transactions.to.push(tx.to); + this.transactions.value.push(tx.value ?? BigNumber.from(0)); + this.transactions.data.push(tx.data ?? '0x'); + return this.transactions; + } + + async clearTransactionsFromBatch(): Promise { + this.transactions.to = []; + this.transactions.data = []; + this.transactions.value = []; } + + async signSingleTransaction(tx: TransactionDetailsForUserOp) { + const gas = await this.getGasFee(); + + return this.etherspotWallet.createSignedUserOp({ + ...tx, + ...gas, + }); + } + + async getAccountContract() { + return this.etherspotWallet._getAccountContract(); + } + + async getERC20Instance(tokenAddress: string) { + const token = ethers.utils.getAddress(tokenAddress); + return new ethers.Contract(token, ERC20_ABI, this.etherspotWallet.provider); + } + } diff --git a/src/sdk/sdk1.ts b/src/sdk/sdk1.ts deleted file mode 100644 index b9059d56..00000000 --- a/src/sdk/sdk1.ts +++ /dev/null @@ -1,214 +0,0 @@ -import { BehaviorSubject } from 'rxjs'; -import { State, StateService } from './state'; -import { isWalletProvider, WalletProviderLike } from './wallet'; -import { SdkOptions } from './interfaces'; -import { Network } from "./network"; -import { Env } from "./env"; -import { Exception, getGasFee } from "./common"; -// import { EtherspotWalletAPI, VerifyingPaymasterAPI } from './base'; -import { BigNumber, ethers, providers, Wallet } from 'ethers'; -import { Networks } from './network/constants'; -import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; -import { EtherspotWalletAPI, HttpRpcClient } from './base'; -import { TransactionDetailsForUserOp } from './base/TransactionDetailsForUserOp'; -import { CreateSessionDto, SignMessageDto, validateDto } from './dto'; -import { Session } from '.'; -import { ERC20__factory } from './contracts'; - -/** - * Sdk - * - * @category Sdk - */ -export class Sdk { - - private EtherspotWallet: EtherspotWalletAPI; - private bundler: HttpRpcClient; - - constructor(walletProvider: WalletProviderLike, optionsLike: SdkOptions) { - - if (!isWalletProvider(walletProvider)) { - throw new Exception('Invalid wallet provider'); - } - - const env = Env.prepare(optionsLike.env); - - const { - networkName, // - rpcProviderUrl, - bundlerRpcUrl, - } = optionsLike; - - - let provider; - - if (rpcProviderUrl) { - provider = new providers.JsonRpcProvider(rpcProviderUrl); - } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); - - this.EtherspotWallet = new EtherspotWalletAPI({ - owner: new Wallet(walletProvider.privateKey, provider), - provider, - walletProvider, - optionsLike, - entryPointAddress: Networks[networkName].contracts.entryPoint, - factoryAddress: Networks[networkName].contracts.walletFactory, - paymasterAPI: null, - }) - - this.bundler = new HttpRpcClient(bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); - - } - - - // exposes - get state(): StateService { - return this.EtherspotWallet.services.stateService; - } - - get state$(): BehaviorSubject { - return this.EtherspotWallet.services.stateService.state$; - } - - get supportedNetworks(): Network[] { - return this.EtherspotWallet.services.networkService.supportedNetworks; - } - - /** - * destroys - */ - destroy(): void { - this.EtherspotWallet.context.destroy(); - } - - // wallet - - /** - * signs message - * @param dto - * @return Promise - */ - async signMessage(dto: SignMessageDto): Promise { - const { message } = await validateDto(dto, SignMessageDto); - - await this.EtherspotWallet.require({ - network: false, - }); - - return this.EtherspotWallet.services.walletService.signMessage(message); - } - - // session - - /** - * creates session - * @param dto - * @return Promise - */ - async createSession(dto: CreateSessionDto = {}): Promise { - const { ttl, fcmToken } = await validateDto(dto, CreateSessionDto); - - await this.EtherspotWallet.require(); - - return this.EtherspotWallet.services.sessionService.createSession(ttl, fcmToken); - } - - async getCounterFactualAddress(): Promise { - return this.EtherspotWallet.getCounterFactualAddress(); - } - - - async prefundIfRequired(amount: string, tokenAddress?: string): Promise { - try { - const ewalletAddress = await this.getCounterFactualAddress(); - - if (tokenAddress) { - const token = ethers.utils.getAddress(tokenAddress); - const erc20Contract = ERC20__factory.connect(token, this.EtherspotWallet.services.walletService.getWalletProvider()); - const dec = await erc20Contract.functions.decimals(); - const approveData = erc20Contract.interface.encodeFunctionData('approve', [this.state.walletAddress, ethers.utils.parseUnits(amount, dec)]) - const transactionData = erc20Contract.interface.encodeFunctionData('transferFrom', [this.state.walletAddress, ewalletAddress, ethers.utils.parseUnits(amount, dec)]) - const balance = await erc20Contract.functions.balanceOf(ewalletAddress) - if (balance[0].lt(ethers.utils.parseEther(amount))) { - - const approvetx = await this.EtherspotWallet.services.walletService.sendTransaction({ - to: tokenAddress, // EtherspotWallet address - data: approveData, // approval data - gasLimit: ethers.utils.hexlify(500000), - }); - - await approvetx.wait(); - console.log('approvetx: ', approvetx); - - const tx = await this.EtherspotWallet.services.walletService.sendTransaction({ - to: tokenAddress, // EtherspotWallet address - data: transactionData, // transferFrom data - gasLimit: ethers.utils.hexlify(500000), - }); - await tx.wait(); - return `Transfer successful. Account funded with ${amount} ${await erc20Contract.symbol()}`; - } else { - return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther( - balance[0], - )} ${await erc20Contract.symbol()}`; - } - } else { - console.log('address: ', ewalletAddress); - const balance = await this.EtherspotWallet.provider.getBalance(ewalletAddress); - - // Check if wallet balance is less than the amount to transfer - if (balance.lt(ethers.utils.parseEther(amount))) { - // Transfer funds to the wallet - const tx = await this.EtherspotWallet.services.walletService.sendTransaction({ - to: ewalletAddress, // EtherspotWallet address - data: '0x', // no data - value: ethers.utils.parseEther(amount), // 0.1 MATIC - gasLimit: ethers.utils.hexlify(50000), - }); - await tx.wait(); - return `Transfer successful. Account funded with ${amount} ${tx}`; - } else { - return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther(balance)}`; - } - } - } catch (e) { - console.log(e); - return `Transfer failed: ${e.message}`; - } - } - - async sign(tx: TransactionDetailsForUserOp) { - const gas = await this.getGasFee(); - - return this.EtherspotWallet.createSignedUserOp({ - ...tx, - ...gas, - }); - } - - async getGasFee() { - return getGasFee(this.EtherspotWallet.provider as providers.JsonRpcProvider); - } - - async send(userOp: UserOperationStruct) { - return this.bundler.sendUserOpToBundler(userOp); - } - - async getUserOpReceipt(userOpHash: string, timeout = 60000, interval = 5000): Promise { - const block = await this.EtherspotWallet.provider.getBlock('latest'); - const endtime = Date.now() + timeout; - while (Date.now() < endtime) { - const events = await this.EtherspotWallet.epView.queryFilter( - this.EtherspotWallet.epView.filters.UserOperationEvent(userOpHash), - Math.max(100, block.number - 100), - ); - if (events.length > 0) { - console.log(events[0].args.actualGasUsed.toString()); - return events[0].transactionHash; - } - await new Promise((resolve) => setTimeout(resolve, interval)); - } - return null; - } - -} diff --git a/src/sdk/wallet/providers/key.wallet-provider.ts b/src/sdk/wallet/providers/key.wallet-provider.ts index 6732d80a..2132d9c1 100644 --- a/src/sdk/wallet/providers/key.wallet-provider.ts +++ b/src/sdk/wallet/providers/key.wallet-provider.ts @@ -27,7 +27,6 @@ export class KeyWalletProvider implements WalletProvider { } async signMessage(message: BytesLike): Promise { - console.log('sign: ', message); return this.wallet.signMessage(message); } From 973b2e172d3bc692517579d8b1920ec331698f1a Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 14:07:26 +0530 Subject: [PATCH 12/20] removed privateKey that was used for testing --- examples/01-get-address.ts | 19 +++++++------------ examples/02-transfer-funds.ts | 2 +- examples/03-transfer-erc20.ts | 2 +- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index e82c1e78..6254ff76 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,23 +1,18 @@ -import { LiteSdk } from '../src'; -import { NetworkNames, getNetworkConfig } from './config'; +import { NetworkNames } from '../src/sdk/network/constants'; +import { PrimeSdk } from '../src'; + +import { getNetworkConfig } from './config'; +import { EnvNames } from '../src/sdk/env'; // add/change to correct network const config = getNetworkConfig(NetworkNames.Mumbai); async function main() { // initializating sdk... - const sdk = new LiteSdk( - process.env.WALLET_PRIVATE_KEY, // owner wallet private key - config.rpcProvider, // rpc provider - config.bundler, // bundler rpc - config.chainId, // chain id - config.contracts.entryPoint, // entry point - config.contracts.walletFactory, // etherspot wallet factory - undefined, - ); + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) // get EtherspotWallet address... - const address: string = await sdk.getCounterFactualAddress(); + const address: string = await primeSdk.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); } diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index b26c0bad..2e9e855b 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -13,7 +13,7 @@ const value: string = '0.01'; // transfer value async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index 3dd1e44a..e1f75451 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -14,7 +14,7 @@ const tokenAddress: string = '0x326C977E6efc84E512bB9C30f76E30c160eD06FB'; async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) console.log('address: ', primeSdk.state.walletAddress) From db06a62c89eee3d5673ee3c825e710b8ff63a56c Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 15:07:22 +0530 Subject: [PATCH 13/20] changed as per the feedback --- DEPLOYMENT_COSTS.md | 8 +- examples/01-get-address.ts | 6 +- package-lock.json | 114 +++++++++++++++++++------ package.json | 19 ++--- src/sdk/base/BaseAccountAPI.ts | 6 -- src/sdk/base/EtherspotWalletAPI.ts | 15 ---- src/sdk/sdk.ts | 1 - src/sdk/wallet/providers/interfaces.ts | 2 +- 8 files changed, 105 insertions(+), 66 deletions(-) diff --git a/DEPLOYMENT_COSTS.md b/DEPLOYMENT_COSTS.md index ef24fac5..1a90b110 100644 --- a/DEPLOYMENT_COSTS.md +++ b/DEPLOYMENT_COSTS.md @@ -4,7 +4,7 @@ | Transaction | Gas Cost (Avg) | |--------------|----------------| -| Wallet deployment | 382824 gwei | +| Wallet deployment | 180000 gwei | | Native token transfer | 102344 gwei | | ERC20 token transfer | 127683 gwei | | Token swap (Uniswap v3) | 308041 gwei (swap + approval: 185648 + 122393) | @@ -13,21 +13,21 @@ | Ethereum | Standard (53 gwei) | Fast (57 gwei) | |----------|--------------------|----------------| -| Wallet deployment | $37.62 | $40.45 | +| Wallet deployment | $19.32 | $20.25 | | Native token transfer | $10.07 | $10.83 | | ERC20 token transfer | $12.61 | $13.55 | | Token swap (Uniswap v3) | $30.27 | $32.67 | | Polygon | Low (425.6 gwei) | High (426.6 gwei) | |----------|--------------------|----------------| -| Wallet deployment | $0.17 | $0.17 | +| Wallet deployment | $0.09 | $0.09 | | Native token transfer | $0.05 | $0.05 | | ERC20 token transfer | $0.06 | $0.06 | | Token swap (Uniswap v3) | $0.14 | $0.14 | | Binance Smart Chain | Low (3 gwei) | High (3 gwei) | |----------|--------------------|----------------| -| Wallet deployment | $0.38 | $0.38 | +| Wallet deployment | $0.19 | $0.19 | | Native token transfer | $0.11 | $0.11 | | ERC20 token transfer | $0.13 | $0.13 | | Token swap (Uniswap v3) | $0.31 | $0.31 | \ No newline at end of file diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 6254ff76..174f73c9 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,15 +1,17 @@ import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; - import { getNetworkConfig } from './config'; import { EnvNames } from '../src/sdk/env'; +import * as dotenv from 'dotenv'; + +dotenv.config(); // add/change to correct network const config = getNetworkConfig(NetworkNames.Mumbai); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) // get EtherspotWallet address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/package-lock.json b/package-lock.json index 0403f212..59211b7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,19 @@ "version": "0.0.1", "license": "MIT", "dependencies": { - "@thehubbleproject/bls": "^0.5.1", - "axios": "^1.3.4", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.0", - "ethers": "^5.7.0", - "reflect-metadata": "^0.1.13" + "@thehubbleproject/bls": "0.5.1", + "axios": "1.3.4", + "class-transformer": "0.5.1", + "class-validator": "0.14.0", + "ethers": "5.7.0", + "reflect-metadata": "0.1.13" }, "devDependencies": { "@types/node": "13.13.9", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", - "dotenv": "^16.0.3", - "npm": "^9.6.4", + "dotenv": "16.0.3", + "npm": "9.6.4", "ts-node": "8.10.2", "typescript": "4.5.2" } @@ -453,9 +453,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", + "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", "funding": [ { "type": "individual", @@ -1494,9 +1494,9 @@ } }, "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.0.tgz", + "integrity": "sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA==", "funding": [ { "type": "individual", @@ -1523,10 +1523,10 @@ "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", + "@ethersproject/networks": "5.7.0", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", + "@ethersproject/providers": "5.7.0", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", @@ -1536,10 +1536,50 @@ "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", + "@ethersproject/web": "5.7.0", "@ethersproject/wordlists": "5.7.0" } }, + "node_modules/ethers/node_modules/@ethersproject/networks": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", + "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/ethers/node_modules/@ethersproject/web": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", + "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -6012,9 +6052,9 @@ } }, "@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", + "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -6757,9 +6797,9 @@ "peer": true }, "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.0.tgz", + "integrity": "sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA==", "requires": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -6776,10 +6816,10 @@ "@ethersproject/json-wallets": "5.7.0", "@ethersproject/keccak256": "5.7.0", "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", + "@ethersproject/networks": "5.7.0", "@ethersproject/pbkdf2": "5.7.0", "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", + "@ethersproject/providers": "5.7.0", "@ethersproject/random": "5.7.0", "@ethersproject/rlp": "5.7.0", "@ethersproject/sha2": "5.7.0", @@ -6789,8 +6829,30 @@ "@ethersproject/transactions": "5.7.0", "@ethersproject/units": "5.7.0", "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", + "@ethersproject/web": "5.7.0", "@ethersproject/wordlists": "5.7.0" + }, + "dependencies": { + "@ethersproject/networks": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", + "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/web": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", + "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + } } }, "external-editor": { diff --git a/package.json b/package.json index ab0eb837..5ea9a0db 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,6 @@ "01-get-address": "./node_modules/.bin/ts-node ./examples/01-get-address", "02-transfer-funds": "./node_modules/.bin/ts-node ./examples/02-transfer-funds", "03-transfer-erc20": "./node_modules/.bin/ts-node ./examples/03-transfer-erc20", - "04-batch-transfer": "./node_modules/.bin/ts-node ./examples/04-batch-transfer", - "05-batch-erc20-transfer": "./node_modules/.bin/ts-node ./examples/05-batch-erc20-transfer", - "06-swap-tokens": "./node_modules/.bin/ts-node ./examples/06-swap-tokens", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", @@ -41,19 +38,19 @@ "url": "https://github.com/etherspot/etherspot-lite-sdk/issues" }, "dependencies": { - "@thehubbleproject/bls": "^0.5.1", - "axios": "^1.3.4", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.0", - "ethers": "^5.7.0", - "reflect-metadata": "^0.1.13" + "@thehubbleproject/bls": "0.5.1", + "axios": "1.3.4", + "class-transformer": "0.5.1", + "class-validator": "0.14.0", + "ethers": "5.7.0", + "reflect-metadata": "0.1.13" }, "devDependencies": { "@types/node": "13.13.9", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", - "dotenv": "^16.0.3", - "npm": "^9.6.4", + "dotenv": "16.0.3", + "npm": "9.6.4", "ts-node": "8.10.2", "typescript": "4.5.2" } diff --git a/src/sdk/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts index 2a1abff6..d8a592b8 100644 --- a/src/sdk/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -169,12 +169,6 @@ export abstract class BaseAccountAPI { return this.services.sessionService.createSession(ttl, fcmToken); } - // async getCounterFactualAddress(): Promise { - // // return this.EtherspotWallet.getCounterFactualAddress(); - // return this.getCounterFactualAddress(); - // } - - // private diff --git a/src/sdk/base/EtherspotWalletAPI.ts b/src/sdk/base/EtherspotWalletAPI.ts index ae0cd6d8..7ccd9abf 100644 --- a/src/sdk/base/EtherspotWalletAPI.ts +++ b/src/sdk/base/EtherspotWalletAPI.ts @@ -6,10 +6,7 @@ import { EtherspotWalletFactory__factory, } from '../contracts'; import { arrayify, hexConcat } from 'ethers/lib/utils'; -import { Signer } from '@ethersproject/abstract-signer'; import { BaseApiParams, BaseAccountAPI } from './BaseAccountAPI'; -import { PaymasterAPI } from './PaymasterAPI'; -import { Service } from '../common'; /** * constructor params, added no top of base params: @@ -18,7 +15,6 @@ import { Service } from '../common'; * @param index nonce value used when creating multiple accounts for the same owner */ export interface EtherspotWalletApiParams extends BaseApiParams { - owner: Signer; factoryAddress?: string; index?: number; } @@ -32,7 +28,6 @@ export interface EtherspotWalletApiParams extends BaseApiParams { */ export class EtherspotWalletAPI extends BaseAccountAPI { factoryAddress?: string; - // owner: Signer; index: number; accountAddress?: string; @@ -45,13 +40,9 @@ export class EtherspotWalletAPI extends BaseAccountAPI { factory?: EtherspotWalletFactory; constructor(params: EtherspotWalletApiParams) { - console.log('params: ', params) super(params); this.factoryAddress = params.factoryAddress; - // this.owner = params.owner; this.index = params.index ?? 0; - - // console.log(this.services.walletService) } async _getAccountContract(): Promise { @@ -66,7 +57,6 @@ export class EtherspotWalletAPI extends BaseAccountAPI { * this value holds the "factory" address, followed by this account's information */ async getAccountInitCode(): Promise { - // console.log('factoryAddress', this.factoryAddress, this.provider) if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== '') { this.factory = EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider); @@ -95,11 +85,6 @@ export class EtherspotWalletAPI extends BaseAccountAPI { return this.accountAddress; } - - // async nounce(): Promise { - // return this.getNonce(); - // } - async getNonce(): Promise { console.log('checking nonce...'); if (await this.checkAccountPhantom()) { diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index b66d2bb7..23c56fdd 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -49,7 +49,6 @@ export class PrimeSdk { } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); this.etherspotWallet = new EtherspotWalletAPI({ - owner: new Wallet(walletProvider.privateKey, provider), provider, walletProvider, optionsLike, diff --git a/src/sdk/wallet/providers/interfaces.ts b/src/sdk/wallet/providers/interfaces.ts index abed3aae..ce30fe4e 100644 --- a/src/sdk/wallet/providers/interfaces.ts +++ b/src/sdk/wallet/providers/interfaces.ts @@ -38,4 +38,4 @@ export interface WalletLike { privateKey: string; } -export type WalletProviderLike = WalletLike; +export type WalletProviderLike = WalletLike | Web3Provider | WalletConnectConnector | Web3eip1193Provider; From 93993295a238e1cc257c776322cd5bacffa9a54c Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 15:10:33 +0530 Subject: [PATCH 14/20] changed examples --- examples/01-get-address.ts | 5 +--- examples/02-transfer-funds.ts | 6 +---- examples/03-transfer-erc20.ts | 5 +--- examples/config.ts | 49 ----------------------------------- 4 files changed, 3 insertions(+), 62 deletions(-) delete mode 100644 examples/config.ts diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 174f73c9..1a543b54 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,17 +1,14 @@ import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; -import { getNetworkConfig } from './config'; import { EnvNames } from '../src/sdk/env'; import * as dotenv from 'dotenv'; dotenv.config(); -// add/change to correct network -const config = getNetworkConfig(NetworkNames.Mumbai); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '0x513a984bbd054d9fb6d8ba656183185f55bad24a8f900a57a820077374fa9779' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) // get EtherspotWallet address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 2e9e855b..41e88842 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,19 +1,15 @@ import { BigNumber, BigNumberish, ethers } from 'ethers'; import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; - -import { getNetworkConfig } from './config'; import { EnvNames } from '../src/sdk/env'; import { printOp } from '../src/sdk/common/OperationUtils'; -// add/change these values -const config = getNetworkConfig(NetworkNames.Mumbai); const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address const value: string = '0.01'; // transfer value async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index e1f75451..f88ed8e0 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -1,20 +1,17 @@ import { ethers } from 'ethers'; import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; - -import { getNetworkConfig } from './config'; import { EnvNames } from '../src/sdk/env'; import { printOp } from '../src/sdk/common/OperationUtils'; // add/change these values -const config = getNetworkConfig(NetworkNames.Mumbai); const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address const value: string = '1'; // transfer value const tokenAddress: string = '0x326C977E6efc84E512bB9C30f76E30c160eD06FB'; async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: config.bundler }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/config.ts b/examples/config.ts deleted file mode 100644 index 0cd2cd14..00000000 --- a/examples/config.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as dotenv from 'dotenv'; - -dotenv.config(); - -export enum NetworkNames { - Mainnet = 'mainnet', - Mumbai = 'mumbai', -} - -export const NetworkConfig: { - [key: string]: { - chainId: number; - rpcProvider: string; - bundler: string; - contracts: { - entryPoint: string; - walletFactory: string; - uniswapV3SwapRouter: string; - }; - paymaster: { - use: boolean; - url: string; - }; - }; -} = { - [NetworkNames.Mumbai]: { - chainId: 80001, - rpcProvider: process.env.RPC_PROVIDER_URL, - bundler: 'https://mumbai-bundler.etherspot.io', - contracts: { - entryPoint: '0x0576a174D229E3cFA37253523E645A78A0C91B57', - walletFactory: '0x8C842380d657fb3826C46D3666e977C7A227cFA6', - uniswapV3SwapRouter: '0xE592427A0AEce92De3Edee1F18E0157C05861564', - }, - paymaster: { - use: false, - url: '', - }, - }, -}; - -export function getNetworkConfig(networkName: NetworkNames) { - const key = networkName.toString(); - const networkConfig = NetworkConfig[key]; - if (!networkConfig) { - throw new Error(`No network config found for network name '${key}'`); - } - return networkConfig; -} From f320bbf81c71e6e9cae8298800cbb4214e5f8fd7 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 16:25:50 +0530 Subject: [PATCH 15/20] updated package version --- package-lock.json | 8 ++++---- package.json | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59211b7a..ea8fdb18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "etherspot-lite", - "version": "0.0.1", + "name": "etherspot-prime", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "etherspot-lite", - "version": "0.0.1", + "name": "etherspot-prime", + "version": "1.0.0", "license": "MIT", "dependencies": { "@thehubbleproject/bls": "0.5.1", diff --git a/package.json b/package.json index 5ea9a0db..3f2fe2f4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "etherspot-lite", - "version": "0.0.1", - "description": "Etherspot-Lite SDK", + "name": "etherspot-prime", + "version": "1.0.0", + "description": "Etherspot-prime SDK", "keywords": [ "ether", "ethereum", @@ -32,10 +32,10 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/etherspot/etherspot-lite-sdk.git" + "url": "git+https://github.com/etherspot/etherspot-prime-sdk.git" }, "bugs": { - "url": "https://github.com/etherspot/etherspot-lite-sdk/issues" + "url": "https://github.com/etherspot/etherspot-prime-sdk/issues" }, "dependencies": { "@thehubbleproject/bls": "0.5.1", From e3e30c6aa815722f6ffb4c55b26f3cad0e923549 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 17:18:28 +0530 Subject: [PATCH 16/20] added optional bundler --- examples/01-get-address.ts | 2 +- package-lock.json | 4046 +--------------------------------- src/sdk/interfaces.ts | 2 +- src/sdk/network/constants.ts | 4 + src/sdk/sdk.ts | 13 +- 5 files changed, 16 insertions(+), 4051 deletions(-) diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 1a543b54..776b0f9b 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -8,7 +8,7 @@ dotenv.config(); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) + const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets }) // get EtherspotWallet address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/package-lock.json b/package-lock.json index ea8fdb18..5f81e826 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "etherspot-prime", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -5812,4049 +5812,5 @@ "node": ">=6" } } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "peer": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" - }, - "@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@thehubbleproject/bls": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@thehubbleproject/bls/-/bls-0.5.1.tgz", - "integrity": "sha512-g5zeMZ8js/yg6MjFoC+pt0eqfCL2jC46yLY1LbKNriyqftB1tE3jpG/FMMDIW3x9/yRg/AgUb8Nluqj15tQs+A==", - "requires": { - "ethers": "^5.5.3", - "mcl-wasm": "^1.0.0" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "13.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", - "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", - "dev": true - }, - "@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "peer": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "peer": true - } - } - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "peer": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "peer": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "peer": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "peer": true - }, - "class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" - }, - "class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "requires": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "peer": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "peer": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "peer": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "peer": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "peer": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "peer": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "peer": true - }, - "ethers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.0.tgz", - "integrity": "sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA==", - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.0", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.0", - "@ethersproject/wordlists": "5.7.0" - }, - "dependencies": { - "@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "peer": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "peer": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "peer": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "peer": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "peer": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "peer": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true, - "peer": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "peer": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "peer": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "peer": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "peer": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "peer": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "peer": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "peer": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libphonenumber-js": { - "version": "1.10.30", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.30.tgz", - "integrity": "sha512-PLGc+xfrQrkya/YK2/5X+bPpxRmyJBHM+xxz9krUdSgk4Vs2ZwxX5/Ow0lv3r9PDlDtNWb4u+it8MY5rZ0IyGw==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.0.6.tgz", - "integrity": "sha512-/KYSug255SQoOcrQBxkHeAub9qOcJD3B/n5livcsGKsbv4TOiefNmUAwpMP0Vea5AVBUApolr+iF0GqZixns1w==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "peer": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "peer": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "peer": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "peer": true - }, - "npm": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.4.tgz", - "integrity": "sha512-8/Mct0X/w77PmgIpSlXfNIOlrZBfT+8966zLCxOhwi1qZ2Ueyy99uWPSDW6bt2OKw1NzrvHJBSgkzAvn1iWuhw==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.2.7", - "@npmcli/config": "^6.1.5", - "@npmcli/map-workspaces": "^3.0.3", - "@npmcli/package-json": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.0.5", - "chalk": "^4.1.2", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.1", - "glob": "^9.3.2", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^3.0.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.15", - "libnpmexec": "^5.0.15", - "libnpmfund": "^4.0.15", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.3", - "libnpmpack": "^5.0.15", - "libnpmpublish": "^7.1.3", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.0.3", - "minimatch": "^7.4.3", - "minipass": "^4.2.5", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.3.1", - "nopt": "^7.1.0", - "npm-audit-report": "^4.0.0", - "npm-install-checks": "^6.1.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.3", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.1.1", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.0.0", - "read-package-json": "^6.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.8", - "ssri": "^10.0.2", - "tar": "^6.1.13", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.0", - "write-file-atomic": "^5.0.0" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "@npmcli/arborist": { - "version": "6.2.7", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^3.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^7.4.2", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/config": { - "version": "6.1.5", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/map-workspaces": "^3.0.2", - "ini": "^3.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/map-workspaces": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^9.3.1", - "minimatch": "^7.4.2", - "read-package-json-fast": "^3.0.0" - } - }, - "@npmcli/metavuln-calculator": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/package-json": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0" - } - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "which": "^3.0.0" - } - }, - "@npmcli/query": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "@npmcli/run-script": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "bundled": true, - "dev": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@tufjs/models": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^7.4.2" - } - }, - "abbrev": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "bundled": true, - "dev": true - }, - "bin-links": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "buffer": { - "version": "6.0.3", - "bundled": true, - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "17.0.5", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^9.3.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "6.0.1", - "bundled": true, - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "depd": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "diff": { - "version": "5.1.0", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "events": { - "version": "3.3.0", - "bundled": true, - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "bundled": true, - "dev": true - }, - "fs-minipass": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^4.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "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" - } - }, - "glob": { - "version": "9.3.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "minimatch": "^7.4.1", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - } - }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true, - "dev": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, - "ignore-walk": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^7.4.2" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^10.0.0", - "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true, - "dev": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.11.0", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "just-diff": { - "version": "6.0.2", - "bundled": true, - "dev": true - }, - "just-diff-apply": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "libnpmaccess": { - "version": "7.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmdiff": { - "version": "5.0.15", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.2.7", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^7.4.2", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - } - }, - "libnpmexec": { - "version": "5.0.15", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.2.7", - "@npmcli/run-script": "^6.0.0", - "chalk": "^4.1.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^1.0.0" - } - }, - "libnpmfund": { - "version": "4.0.15", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.2.7" - } - }, - "libnpmhook": { - "version": "9.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmorg": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmpack": { - "version": "5.0.15", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^6.2.7", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - } - }, - "libnpmpublish": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", - "semver": "^7.3.7", - "sigstore": "^1.0.0", - "ssri": "^10.0.1" - } - }, - "libnpmsearch": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmteam": { - "version": "5.0.3", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmversion": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.18.3", - "bundled": true, - "dev": true - }, - "make-fetch-happen": { - "version": "11.0.3", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minimatch": { - "version": "7.4.3", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "4.2.5", - "bundled": true, - "dev": true - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^4.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "ms": { - "version": "2.1.3", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.3.1", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "@npmcli/fs": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "cacache": { - "version": "16.1.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "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": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "make-fetch-happen": { - "version": "10.2.1", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.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.7.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": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "ssri": { - "version": "9.0.1", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "unique-filename": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "nopt": { - "version": "7.1.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "npm-bundled": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "bundled": true, - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "14.0.3", - "bundled": true, - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^4.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-user-validate": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "15.1.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^4.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } - }, - "parse-conflict-json": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-scurry": { - "version": "1.6.3", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.14.1", - "minipass": "^4.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "bundled": true, - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "process": { - "version": "0.11.10", - "bundled": true, - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-call-limit": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "read": "^2.0.0" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "read": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~1.0.0" - } - }, - "read-cmd-shim": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "read-package-json": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^9.3.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "readable-stream": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "7.3.8", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true, - "dev": true - }, - "sigstore": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.0.0" - } - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true, - "dev": true - }, - "socks": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.2.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "bundled": true, - "dev": true - }, - "ssri": { - "version": "10.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.13", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "tuf-js": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "@tufjs/models": "1.0.1", - "make-fetch-happen": "^11.0.1" - } - }, - "unique-filename": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "peer": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "peer": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "peer": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "peer": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "peer": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "peer": true - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "peer": true - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "peer": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "peer": true - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "peer": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "peer": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "peer": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "peer": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "peer": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "peer": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "peer": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "peer": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "peer": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "peer": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "peer": true - }, - "typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true, - "peer": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "peer": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "peer": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } } } diff --git a/src/sdk/interfaces.ts b/src/sdk/interfaces.ts index 33ccfdad..fa824dbd 100644 --- a/src/sdk/interfaces.ts +++ b/src/sdk/interfaces.ts @@ -10,7 +10,7 @@ export interface SdkOptions { stateStorage?: StateStorage; sessionStorage?: SessionStorage; omitWalletProviderNetworkCheck?: boolean; - bundlerRpcUrl: string; + bundlerRpcUrl?: string; rpcProviderUrl?: string; paymasterApi?: VerifyingPaymasterAPI; } diff --git a/src/sdk/network/constants.ts b/src/sdk/network/constants.ts index 35e87354..b305a7be 100644 --- a/src/sdk/network/constants.ts +++ b/src/sdk/network/constants.ts @@ -37,3 +37,7 @@ export const CHAIN_ID_TO_NETWORK_NAME: { [key: number]: NetworkNames } = Object. }), {}, ); + +export function getNetworkConfig(key: NetworkNames) { + return Networks[key]; +} diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 23c56fdd..2b1b6ef8 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -6,7 +6,7 @@ import { Network } from "./network"; import { Env } from "./env"; import { BatchTransactionRequest, Exception, getGasFee, TransactionRequest } from "./common"; import { BigNumber, BigNumberish, ethers, providers, Wallet } from 'ethers'; -import { Networks } from './network/constants'; +import { getNetworkConfig, Networks } from './network/constants'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { EtherspotWalletAPI, HttpRpcClient } from './base'; import { TransactionDetailsForUserOp, TransactionGasInfoForUserOp } from './base/TransactionDetailsForUserOp'; @@ -38,15 +38,20 @@ export class PrimeSdk { const { networkName, // rpcProviderUrl, - bundlerRpcUrl, } = optionsLike; + if (!optionsLike.bundlerRpcUrl) { + const networkConfig = getNetworkConfig(networkName); + console.log('bundler url: ', networkConfig.bundler); + optionsLike.bundlerRpcUrl = networkConfig.bundler; + } + let provider; if (rpcProviderUrl) { provider = new providers.JsonRpcProvider(rpcProviderUrl); - } else provider = new providers.JsonRpcProvider(bundlerRpcUrl); + } else provider = new providers.JsonRpcProvider(optionsLike.bundlerRpcUrl); this.etherspotWallet = new EtherspotWalletAPI({ provider, @@ -57,7 +62,7 @@ export class PrimeSdk { paymasterAPI: optionsLike.paymasterApi, }) - this.bundler = new HttpRpcClient(bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); + this.bundler = new HttpRpcClient(optionsLike.bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); } From 3ecc8889056902a3afe4be108257bf79d5766ca9 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 1 Jun 2023 17:21:56 +0530 Subject: [PATCH 17/20] removed unwanted console log --- src/sdk/sdk.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 2b1b6ef8..8bf423f4 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -42,7 +42,6 @@ export class PrimeSdk { if (!optionsLike.bundlerRpcUrl) { const networkConfig = getNetworkConfig(networkName); - console.log('bundler url: ', networkConfig.bundler); optionsLike.bundlerRpcUrl = networkConfig.bundler; } From 8de40170ce8452cde0c8ace161335e75fae243de Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 8 Jun 2023 04:46:56 +0530 Subject: [PATCH 18/20] changes as per feedback --- .gitignore | 3 + examples/01-get-address.ts | 4 +- examples/02-transfer-funds.ts | 14 +- examples/03-transfer-erc20.ts | 43 ++--- examples/04-transfer-nft.ts | 52 ++++++ examples/scripts/commands/NFTTransfer.ts | 45 +++++ examples/scripts/commands/address.ts | 10 ++ .../scripts/commands/batchErc20Transfer.ts | 66 +++++++ examples/scripts/commands/erc20Approve.ts | 44 +++++ examples/scripts/commands/erc20Transfer.ts | 46 +++++ examples/scripts/commands/index.ts | 76 +++++++++ examples/scripts/commands/transfer.ts | 32 ++++ examples/scripts/init.ts | 29 ++++ package-lock.json | 39 ++++- package.json | 9 +- src/sdk/base/BaseAccountAPI.ts | 12 +- src/sdk/base/EtherspotWalletAPI.ts | 1 - src/sdk/base/HttpRpcClient.ts | 8 +- src/sdk/common/interfaces.ts | 4 +- src/sdk/env/constants.ts | 25 --- src/sdk/env/env.ts | 37 ---- src/sdk/env/index.ts | 3 - src/sdk/env/interfaces.ts | 4 - src/sdk/index.ts | 1 - src/sdk/interfaces.ts | 5 +- src/sdk/network/constants.ts | 6 +- src/sdk/network/interfaces.ts | 4 - src/sdk/network/network.service.ts | 36 ++-- src/sdk/sdk.ts | 161 ++++-------------- 29 files changed, 538 insertions(+), 281 deletions(-) create mode 100644 examples/04-transfer-nft.ts create mode 100644 examples/scripts/commands/NFTTransfer.ts create mode 100644 examples/scripts/commands/address.ts create mode 100644 examples/scripts/commands/batchErc20Transfer.ts create mode 100644 examples/scripts/commands/erc20Approve.ts create mode 100644 examples/scripts/commands/erc20Transfer.ts create mode 100644 examples/scripts/commands/index.ts create mode 100644 examples/scripts/commands/transfer.ts create mode 100644 examples/scripts/init.ts delete mode 100644 src/sdk/env/constants.ts delete mode 100644 src/sdk/env/env.ts delete mode 100644 src/sdk/env/index.ts delete mode 100644 src/sdk/env/interfaces.ts diff --git a/.gitignore b/.gitignore index 76f60fce..bba7bf37 100644 --- a/.gitignore +++ b/.gitignore @@ -34,5 +34,8 @@ test.js # .env file .env +# config +examples/config.json + # contracts exposed src/contracts/factories/contracts-exposed/ diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index 776b0f9b..2058ee63 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -1,6 +1,4 @@ -import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; -import { EnvNames } from '../src/sdk/env'; import * as dotenv from 'dotenv'; dotenv.config(); @@ -8,7 +6,7 @@ dotenv.config(); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID) }) // get EtherspotWallet address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index 41e88842..6b11198e 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -1,7 +1,5 @@ -import { BigNumber, BigNumberish, ethers } from 'ethers'; -import { NetworkNames } from '../src/sdk/network/constants'; +import { ethers } from 'ethers'; import { PrimeSdk } from '../src'; -import { EnvNames } from '../src/sdk/env'; import { printOp } from '../src/sdk/common/OperationUtils'; const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address @@ -9,7 +7,7 @@ const value: string = '0.01'; // transfer value async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID) }) console.log('address: ', primeSdk.state.walletAddress) @@ -17,15 +15,11 @@ async function main() { const address: string = await primeSdk.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // transfer some native tokens to the EtherspotWallet (if required)... - const prefunded: string = await primeSdk.depositFromKeyWallet((+value + 0.01).toString()); - console.log('\x1b[33m%s\x1b[0m', prefunded); - // clear the transaction batch - await primeSdk.clearTransactionsFromBatch(); + await primeSdk.clearUserOpsFromBatch(); // add transactions to the batch - const transactionBatch = await primeSdk.addTransactionToBatch({to: recipient, value: ethers.utils.parseEther(value)}); + const transactionBatch = await primeSdk.addUserOpsToBatch({to: recipient, value: ethers.utils.parseEther(value)}); console.log('transactions: ', transactionBatch); // get balance of the account address diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index f88ed8e0..4e2e4104 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -1,17 +1,19 @@ import { ethers } from 'ethers'; -import { NetworkNames } from '../src/sdk/network/constants'; import { PrimeSdk } from '../src'; -import { EnvNames } from '../src/sdk/env'; import { printOp } from '../src/sdk/common/OperationUtils'; +import { ERC20_ABI } from '../src/sdk/helpers/abi/ERC20_ABI'; +import * as dotenv from 'dotenv'; + +dotenv.config(); // add/change these values -const recipient: string = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address -const value: string = '1'; // transfer value +const recipient: string = '0xD129dB5e418e389c3F7D3ae0B8771B3f76799A52'; // recipient wallet address +const value: string = '0.1'; // transfer value const tokenAddress: string = '0x326C977E6efc84E512bB9C30f76E30c160eD06FB'; async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: '' }, { networkName: NetworkNames.Mumbai, env: EnvNames.TestNets, bundlerRpcUrl: process.env.BUNDLER_URL }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID) }) console.log('address: ', primeSdk.state.walletAddress) @@ -19,41 +21,22 @@ async function main() { const address: string = await primeSdk.getCounterFactualAddress(); console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); - // transfer some native tokens to EtherspotWallet for gas payment (if required)... - const prefundedNative: string = await primeSdk.depositFromKeyWallet('0.01'); - console.log('\x1b[33m%s\x1b[0m', prefundedNative); - - // transfer some tokens to the EtherspotWallet (if required)... - const prefunded: string = await primeSdk.depositFromKeyWallet((+value).toString(), tokenAddress); - console.log('\x1b[33m%s\x1b[0m', prefunded); - + const provider = new ethers.providers.JsonRpcProvider(process.env.BUNDLER_URL) // get erc20 Contract Interface - const erc20Instance = await primeSdk.getERC20Instance(tokenAddress); + const erc20Instance = new ethers.Contract(tokenAddress, ERC20_ABI, provider); // get decimals from erc20 contract const decimals = await erc20Instance.functions.decimals(); - // get approval encoded data - const approvalData = await erc20Instance.interface.encodeFunctionData('approve', [address, ethers.utils.parseUnits(value, decimals)]); - // get transferFrom encoded data - const transactionData = await erc20Instance.interface.encodeFunctionData('transfer', [recipient, ethers.utils.parseUnits(value, decimals)]) + const transactionData = erc20Instance.interface.encodeFunctionData('transfer', [recipient, ethers.utils.parseUnits(value, decimals)]) // clear the transaction batch - await primeSdk.clearTransactionsFromBatch(); + await primeSdk.clearUserOpsFromBatch(); // add transactions to the batch - let transactionBatch = await primeSdk.addTransactionToBatch({to: tokenAddress, data: approvalData}); - console.log('transactions: ', transactionBatch); - - // add transactions to the batch - transactionBatch = await primeSdk.addTransactionToBatch({to: tokenAddress, data: transactionData}); - console.log('transactions: ', transactionBatch); - - // get balance of the account address - const balance = await primeSdk.getNativeBalance(); - - console.log('balances: ', balance); + let userOpsBatch = await primeSdk.addUserOpsToBatch({to: tokenAddress, data: transactionData}); + console.log('transactions: ', userOpsBatch); // sign transactions added to the batch const op = await primeSdk.sign(); diff --git a/examples/04-transfer-nft.ts b/examples/04-transfer-nft.ts new file mode 100644 index 00000000..1e5a85e7 --- /dev/null +++ b/examples/04-transfer-nft.ts @@ -0,0 +1,52 @@ +import { ethers } from 'ethers'; +import { PrimeSdk } from '../src'; +import { printOp } from '../src/sdk/common/OperationUtils'; +import * as dotenv from 'dotenv'; + +dotenv.config(); + +// add/change these values +const recipient: string = '0xD129dB5e418e389c3F7D3ae0B8771B3f76799A52'; // recipient wallet address +const tokenAddress: string = '0xe55C5793a52AF819fBf3e87a23B36708E6FDd2Cc'; +const tokenId = 4; + +async function main() { + // initializating sdk... + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID) }) + + console.log('address: ', primeSdk.state.walletAddress) + + // get address of EtherspotWallet... + const address: string = await primeSdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); + + const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' + ]) + + const erc721Data = erc721Interface.encodeFunctionData('safeTransferFrom', [address, recipient, tokenId]); + + // clear the transaction batch + await primeSdk.clearUserOpsFromBatch(); + + // add transactions to the batch + let userOpsBatch = await primeSdk.addUserOpsToBatch({to: tokenAddress, data: erc721Data}); + console.log('transactions: ', userOpsBatch); + + // sign transactions added to the batch + const op = await primeSdk.sign(); + console.log(`Signed UserOp: ${await printOp(op)}`); + + // sending to the bundler... + const uoHash = await primeSdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + const txHash = await primeSdk.getUserOpReceipt(uoHash); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/examples/scripts/commands/NFTTransfer.ts b/examples/scripts/commands/NFTTransfer.ts new file mode 100644 index 00000000..ee25abd4 --- /dev/null +++ b/examples/scripts/commands/NFTTransfer.ts @@ -0,0 +1,45 @@ +import { ethers } from "ethers"; +// @ts-ignore +import config from "../../config.json"; +import { PrimeSdk } from "../../../src"; +import { printOp } from "../../../src/sdk/common/OperationUtils"; + +export default async function main( + tknid: number, + t: string, + tkn: string, +) { + const primeSdk = new PrimeSdk({ privateKey: config.signingKey }, { chainId: config.chainId, rpcProviderUrl: config.rpcProviderUrl }) + + const address = await primeSdk.getCounterFactualAddress(); + + const tokenId = tknid; + const tokenAddress = ethers.utils.getAddress(tkn); + const to = ethers.utils.getAddress(t); + console.log(`Transferring NFT ${tknid} ...`); + + const erc721Interface = new ethers.utils.Interface([ + 'function safeTransferFrom(address _from, address _to, uint256 _tokenId)' + ]) + + const erc721Data = erc721Interface.encodeFunctionData('safeTransferFrom', [address, to, tokenId]); + + // clear the transaction batch + await primeSdk.clearUserOpsFromBatch(); + + + await primeSdk.addUserOpsToBatch({to: tokenAddress, data: erc721Data}); + console.log(`Added transaction to batch`); + + const op = await primeSdk.sign(); + console.log(`Signed UserOp: ${await printOp(op)}`); + + // sending to the bundler... + const uoHash = await primeSdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + const txHash = await primeSdk.getUserOpReceipt(uoHash); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); +} diff --git a/examples/scripts/commands/address.ts b/examples/scripts/commands/address.ts new file mode 100644 index 00000000..877502a6 --- /dev/null +++ b/examples/scripts/commands/address.ts @@ -0,0 +1,10 @@ +// @ts-ignore +import config from "../../config.json"; +import { PrimeSdk } from "../../../src"; + +export default async function main() { + const primeSdk = new PrimeSdk({ privateKey: config.signingKey }, { chainId: 80001 }) + const address = await primeSdk.getCounterFactualAddress(); + + console.log(`Etherspot address: ${address}`); +} diff --git a/examples/scripts/commands/batchErc20Transfer.ts b/examples/scripts/commands/batchErc20Transfer.ts new file mode 100644 index 00000000..99268e28 --- /dev/null +++ b/examples/scripts/commands/batchErc20Transfer.ts @@ -0,0 +1,66 @@ +import { ethers } from "ethers"; +import { ERC20_ABI } from '../../../src/sdk/helpers/abi/ERC20_ABI'; +// @ts-ignore +import config from "../../config.json"; +import { PrimeSdk } from '../../../src'; +import { printOp } from "../../../src/sdk/common/OperationUtils"; + +// This example requires several layers of calls: +// EntryPoint +// ┕> sender.executeBatch +// ┕> token.transfer (recipient 1) +// ⋮ +// ┕> token.transfer (recipient N) +export default async function main( + tkn: string, + t: Array, + amt: string, +) { + const primeSdk = new PrimeSdk({ privateKey: config.signingKey }, { chainId: config.chainId }) + + const address = await primeSdk.getCounterFactualAddress(); + console.log(`Etherspot address: ${address}`) + + const provider = new ethers.providers.JsonRpcProvider(config.rpcProviderUrl); + const token = ethers.utils.getAddress(tkn); + const erc20 = new ethers.Contract(token, ERC20_ABI, provider); + const [symbol, decimals] = await Promise.all([ + erc20.symbol(), + erc20.decimals(), + ]); + const amount = ethers.utils.parseUnits(amt, decimals); + // clear the transaction batch + await primeSdk.clearUserOpsFromBatch(); + + let dest: Array = []; + let data: Array = []; + t.map((addr) => addr.trim()).forEach((addr) => { + dest = [...dest, erc20.address]; + data = [ + ...data, + erc20.interface.encodeFunctionData("transfer", [ + ethers.utils.getAddress(addr), + amount, + ]), + ]; + }); + console.log( + `Batch transferring ${amt} ${symbol} to ${dest.length} recipients...` + ); + + for (let i=0;i", "The recipient address") + .requiredOption("-amt, --amount ", "Amount in ETH to transfer") + .action(async (opts) => + transfer(opts.to, opts.amount) + ); + +program + .command("erc20Transfer") + .description("Transfer ERC-20 token") + .requiredOption("-tkn, --token
", "The token address") + .requiredOption("-t, --to
", "The recipient address") + .requiredOption("-amt, --amount ", "Amount of the token to transfer") + .action(async (opts) => + erc20Transfer(opts.token, opts.to, opts.amount) + ); + +program + .command("erc20Approve") + .description("Approve spender for ERC-20 token") + .requiredOption("-tkn, --token
", "The token address") + .requiredOption("-s, --spender
", "The spender address") + .requiredOption("-amt, --amount ", "Amount of the token to transfer") + .action(async (opts) => + erc20Approve(opts.token, opts.spender, opts.amount) + ); + +program + .command("batchErc20Transfer") + .description("Batch transfer ERC-20 token") + .requiredOption("-tkn, --token
", "The token address") + .requiredOption( + "-t, --to ", + "Comma separated list of recipient addresses" + ) + .requiredOption("-amt, --amount ", "Amount of the token to transfer") + .action(async (opts) => + batchErc20Transfer(opts.token, opts.to.split(","), opts.amount) + ); + +program + .command("NFTTransfer") + .description("Transfer ERC-721 token") + .requiredOption("-tkn, --token
", "The token address") + .requiredOption("-t, --to
", "The recipient address") + .requiredOption("-tknid, --tokenId ", "tokenId of the NFT to transfer") + .action(async (opts) => + nftTransfer(opts.token, opts.to, opts.tokenId) + ); + +program.parse(); diff --git a/examples/scripts/commands/transfer.ts b/examples/scripts/commands/transfer.ts new file mode 100644 index 00000000..d86ad3c1 --- /dev/null +++ b/examples/scripts/commands/transfer.ts @@ -0,0 +1,32 @@ +import { ethers } from "ethers"; +// @ts-ignore +import config from "../../config.json"; +import { PrimeSdk } from "../../../src"; +import { printOp } from "../../../src/sdk/common/OperationUtils"; + + +export default async function main(t: string, amt: string) { + const primeSdk = new PrimeSdk({ privateKey: config.signingKey }, { chainId: config.chainId, rpcProviderUrl: config.rpcProviderUrl }) + const address = await primeSdk.getCounterFactualAddress(); + + const target = ethers.utils.getAddress(t); + const value = ethers.utils.parseEther(amt); + + // clear the transaction batch + await primeSdk.clearUserOpsFromBatch(); + + await primeSdk.addUserOpsToBatch({to: target, value}); + console.log(`Added transaction to batch`); + + const op = await primeSdk.sign(); + console.log(`Signed UserOp: ${await printOp(op)}`); + + // sending to the bundler... + const uoHash = await primeSdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + const txHash = await primeSdk.getUserOpReceipt(uoHash); + console.log('\x1b[33m%s\x1b[0m', `Transaction hash: ${txHash}`); +} diff --git a/examples/scripts/init.ts b/examples/scripts/init.ts new file mode 100644 index 00000000..5c85ebdc --- /dev/null +++ b/examples/scripts/init.ts @@ -0,0 +1,29 @@ +import fs from 'fs/promises'; +import path from "path"; +import prettier from "prettier"; +import { ethers } from "ethers"; + +const INIT_CONFIG = { + rpcProviderUrl: "https://mumbai-bundler.etherspot.io", + signingKey: new ethers.Wallet(ethers.utils.randomBytes(32)).privateKey, + chainId: 80001, + paymaster: { + rpcUrl: "", + context: {}, + }, +}; +const CONFIG_PATH = path.resolve(__dirname, "../config.json"); + +async function main() { + return fs.writeFile( + CONFIG_PATH, + prettier.format(JSON.stringify(INIT_CONFIG, null, 2), { parser: "json" }) + ); +} + +main() + .then(() => console.log(`Config written to ${CONFIG_PATH}`)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/package-lock.json b/package-lock.json index 5f81e826..8726c623 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,11 +13,14 @@ "axios": "1.3.4", "class-transformer": "0.5.1", "class-validator": "0.14.0", + "commander": "^10.0.1", "ethers": "5.7.0", + "prettier": "^2.8.8", "reflect-metadata": "0.1.13" }, "devDependencies": { - "@types/node": "13.13.9", + "@types/node": "^18.11.9", + "@types/prettier": "^2.7.3", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "16.0.3", @@ -757,9 +760,15 @@ "dev": true }, "node_modules/@types/node": { - "version": "13.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", - "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", + "version": "18.16.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", + "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/validator": { @@ -1144,6 +1153,14 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5266,6 +5283,20 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", diff --git a/package.json b/package.json index 3f2fe2f4..55e58afd 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,9 @@ "prebuild": "rimraf ./dist", "build": "npm run compile", "compile": "tsc -p ./tsconfig.build.json", - "compile-watch": "npm run compile -- --watch" + "compile-watch": "npm run compile -- --watch", + "init": "ts-node examples/scripts/init.ts", + "command": "ts-node examples/scripts/commands/index.ts" }, "repository": { "type": "git", @@ -42,11 +44,14 @@ "axios": "1.3.4", "class-transformer": "0.5.1", "class-validator": "0.14.0", + "commander": "^10.0.1", "ethers": "5.7.0", + "prettier": "^2.8.8", "reflect-metadata": "0.1.13" }, "devDependencies": { - "@types/node": "13.13.9", + "@types/node": "^18.11.9", + "@types/prettier": "^2.7.3", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "16.0.3", diff --git a/src/sdk/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts index d8a592b8..2b07a54a 100644 --- a/src/sdk/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -8,7 +8,7 @@ import { resolveProperties } from 'ethers/lib/utils'; import { PaymasterAPI } from './PaymasterAPI'; import { ErrorSubject, Exception, getUserOpHash, NotPromise, packUserOp, Service } from '../common'; import { calcPreVerificationGas, GasOverheads } from './calcPreVerificationGas'; -import { AccountService, AccountTypes, CreateSessionDto, Env, EnvNames, isWalletProvider, Network, NetworkNames, NetworkService, SdkOptions, Session, SessionService, SignMessageDto, State, StateService, validateDto, WalletProviderLike, WalletService } from '..'; +import { AccountService, AccountTypes, CreateSessionDto, isWalletProvider, Network, NetworkNames, NetworkService, SdkOptions, Session, SessionService, SignMessageDto, State, StateService, validateDto, WalletProviderLike, WalletService } from '..'; import { Context } from '../context'; export interface BaseApiParams { @@ -68,10 +68,10 @@ export abstract class BaseAccountAPI { throw new Exception('Invalid wallet provider'); } - const env = Env.prepare(optionsLike.env); + // const env = Env.prepare(optionsLike.env); const { - networkName, // + chainId, // omitWalletProviderNetworkCheck, stateStorage, sessionStorage, @@ -79,10 +79,10 @@ export abstract class BaseAccountAPI { bundlerRpcUrl, } = optionsLike; - const { networkOptions } = env; + // const { networkOptions } = env; this.services = { - networkService: new NetworkService(networkOptions, networkName), + networkService: new NetworkService(chainId), walletService: new WalletService(params.walletProvider, { omitProviderNetworkCheck: omitWalletProviderNetworkCheck, provider: rpcProviderUrl, @@ -484,7 +484,7 @@ export abstract class BaseAccountAPI { return { ...partialUserOp, preVerificationGas: this.getPreVerificationGas(partialUserOp), - signature: '', + signature: '0x', }; } diff --git a/src/sdk/base/EtherspotWalletAPI.ts b/src/sdk/base/EtherspotWalletAPI.ts index 7ccd9abf..b622ba12 100644 --- a/src/sdk/base/EtherspotWalletAPI.ts +++ b/src/sdk/base/EtherspotWalletAPI.ts @@ -107,7 +107,6 @@ export class EtherspotWalletAPI extends BaseAccountAPI { async signUserOpHash(userOpHash: string): Promise { return await this.services.walletService.signMessage(arrayify(userOpHash)); - } async updateEntryPoint(newEntryPoint: string) { diff --git a/src/sdk/base/HttpRpcClient.ts b/src/sdk/base/HttpRpcClient.ts index 78466b45..d099da57 100644 --- a/src/sdk/base/HttpRpcClient.ts +++ b/src/sdk/base/HttpRpcClient.ts @@ -1,5 +1,5 @@ import { JsonRpcProvider } from '@ethersproject/providers'; -import { ethers } from 'ethers'; +import { BigNumber, ethers } from 'ethers'; import { resolveProperties } from 'ethers/lib/utils'; import { UserOperationStruct } from '../contracts/src/aa-4337/core/BaseAccount'; import Debug from 'debug'; @@ -31,6 +31,12 @@ export class HttpRpcClient { } } + async getVerificationGasInfo(tx: UserOperationStruct): Promise { + const hexifiedUserOp = deepHexlify(await resolveProperties(tx)); + const response = await this.userOpJsonRpcProvider.send('eth_estimateUserOperationGas', [hexifiedUserOp, this.entryPointAddress]); + return response; + } + /** * send a UserOperation to the bundler * @param userOp1 diff --git a/src/sdk/common/interfaces.ts b/src/sdk/common/interfaces.ts index 22beb8f9..6b82a2bf 100644 --- a/src/sdk/common/interfaces.ts +++ b/src/sdk/common/interfaces.ts @@ -1,12 +1,12 @@ import { BigNumberish } from "ethers"; -export interface BatchTransactionRequest { +export interface BatchUserOpsRequest { to: string[]; data?: string[]; value?: BigNumberish[]; } -export interface TransactionRequest { +export interface UserOpsRequest { to: string; data?: string; value?: BigNumberish; diff --git a/src/sdk/env/constants.ts b/src/sdk/env/constants.ts deleted file mode 100644 index 504d8bfd..00000000 --- a/src/sdk/env/constants.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NetworkNames } from '../network'; -import { Env } from './env'; - -export enum EnvNames { - MainNets = 'mainnets', - TestNets = 'testnets', -} - -export const SUPPORTED_ENVS: { [key: string]: Env } = { - [EnvNames.MainNets]: { - networkOptions: { - supportedNetworkNames: [ - // NetworkNames.Mainnet, // - ], - }, - }, - [EnvNames.TestNets]: { - networkOptions: { - supportedNetworkNames: [ - // NetworkNames.Goerli, - NetworkNames.Mumbai, - ], - }, - }, -}; diff --git a/src/sdk/env/env.ts b/src/sdk/env/env.ts deleted file mode 100644 index 85b81255..00000000 --- a/src/sdk/env/env.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NetworkOptions } from '../network'; -import { EnvNames, SUPPORTED_ENVS } from './constants'; - -export class Env { - static defaultName: EnvNames = EnvNames.MainNets; - - static prepare(env: EnvNames | Env): Env { - let partial: Env = null; - - if (env) { - switch (typeof env) { - case 'string': - partial = SUPPORTED_ENVS[env]; - break; - - case 'object': - if (env.networkOptions) { - partial = env; - } - break; - } - - if (!partial || !partial.networkOptions) { - throw new Error(`Unsupported env`); - } - } else { - partial = SUPPORTED_ENVS[this.defaultName || EnvNames.TestNets]; - } - - return new Env(partial); - } - networkOptions: NetworkOptions; - - constructor(partial: Partial) { - Object.assign(this, partial); - } -} diff --git a/src/sdk/env/index.ts b/src/sdk/env/index.ts deleted file mode 100644 index ed4b69a6..00000000 --- a/src/sdk/env/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './env'; -export * from './interfaces'; -export { EnvNames } from './constants'; diff --git a/src/sdk/env/interfaces.ts b/src/sdk/env/interfaces.ts deleted file mode 100644 index 63df1276..00000000 --- a/src/sdk/env/interfaces.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { EnvNames } from './constants'; -import { Env } from './env'; - -export type EnvLike = EnvNames | Env; diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 2ada4d0e..115704bd 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -2,7 +2,6 @@ import { PrimeSdk } from './sdk'; export * from './account'; export * from './dto'; -export * from './env'; export * from './interfaces'; export * from './network'; export * from './session'; diff --git a/src/sdk/interfaces.ts b/src/sdk/interfaces.ts index fa824dbd..dbeda006 100644 --- a/src/sdk/interfaces.ts +++ b/src/sdk/interfaces.ts @@ -1,12 +1,9 @@ import { StateStorage } from './state'; import { SessionStorage } from './session'; -import { NetworkNames } from './network'; -import { EnvLike } from './env'; import { VerifyingPaymasterAPI } from './base'; export interface SdkOptions { - env: EnvLike; - networkName: NetworkNames; + chainId: number; stateStorage?: StateStorage; sessionStorage?: SessionStorage; omitWalletProviderNetworkCheck?: boolean; diff --git a/src/sdk/network/constants.ts b/src/sdk/network/constants.ts index b305a7be..5584eadd 100644 --- a/src/sdk/network/constants.ts +++ b/src/sdk/network/constants.ts @@ -4,6 +4,8 @@ export enum NetworkNames { Mumbai = 'mumbai', } +export const SupportedNetworks = [80001] + export const NETWORK_NAME_TO_CHAIN_ID: { [key: string]: number; } = { @@ -13,7 +15,7 @@ export const NETWORK_NAME_TO_CHAIN_ID: { export const Networks: { [key: string]: NetworkConfig } = { - [NetworkNames.Mumbai]: { + [80001]: { chainId: 80001, bundler: 'https://mumbai-bundler.etherspot.io', contracts: { @@ -38,6 +40,6 @@ export const CHAIN_ID_TO_NETWORK_NAME: { [key: number]: NetworkNames } = Object. {}, ); -export function getNetworkConfig(key: NetworkNames) { +export function getNetworkConfig(key: number) { return Networks[key]; } diff --git a/src/sdk/network/interfaces.ts b/src/sdk/network/interfaces.ts index fda87e23..a6160099 100644 --- a/src/sdk/network/interfaces.ts +++ b/src/sdk/network/interfaces.ts @@ -18,7 +18,3 @@ export interface NetworkConfig { url: string; }; }; - -export interface NetworkOptions { - supportedNetworkNames: NetworkNames[]; -} diff --git a/src/sdk/network/network.service.ts b/src/sdk/network/network.service.ts index f1f573ff..3acb94cd 100644 --- a/src/sdk/network/network.service.ts +++ b/src/sdk/network/network.service.ts @@ -1,8 +1,8 @@ import { Observable } from 'rxjs'; import { NetworkConfig } from '.'; import { ObjectSubject, Service, Exception, prepareAddress } from '../common'; -import { NETWORK_NAME_TO_CHAIN_ID, NetworkNames, Networks } from './constants'; -import { Network, NetworkOptions } from './interfaces'; +import { NETWORK_NAME_TO_CHAIN_ID, NetworkNames, Networks, CHAIN_ID_TO_NETWORK_NAME, SupportedNetworks } from './constants'; +import { Network } from './interfaces'; export class NetworkService extends Service { readonly network$ = new ObjectSubject(null); @@ -11,15 +11,12 @@ export class NetworkService extends Service { readonly supportedNetworks: Network[]; readonly externalContractAddresses = new Map(); - constructor(private options: NetworkOptions, defaultNetworkName?: NetworkNames) { + constructor(defaultChainId?: number) { super(); - - const { supportedNetworkNames } = options; - - this.supportedNetworks = supportedNetworkNames - .map((name) => { - const chainId = NETWORK_NAME_TO_CHAIN_ID[name]; - return !chainId + this.supportedNetworks = SupportedNetworks + .map((chainId) => { + const name = CHAIN_ID_TO_NETWORK_NAME[chainId]; + return !name ? null : { chainId, @@ -32,8 +29,8 @@ export class NetworkService extends Service { throw new Exception('Invalid network config'); } - this.defaultNetwork = defaultNetworkName - ? this.supportedNetworks.find(({ name }) => name === defaultNetworkName) + this.defaultNetwork = defaultChainId + ? this.supportedNetworks.find(({ chainId }) => chainId === defaultChainId) : this.supportedNetworks[0]; if (!this.defaultNetwork) { @@ -59,15 +56,18 @@ export class NetworkService extends Service { this.network$.next(this.supportedNetworks.find(({ name }) => name === networkName) || null); } - isNetworkNameSupported(networkName: string): boolean { - return !!this.supportedNetworks.find(({ name }) => name === networkName); + // isNetworkNameSupported(networkName: string): boolean { + // return !!this.supportedNetworks.find(({ name }) => name === networkName); + // } + + isNetworkSupported(chainId: number): boolean { + return SupportedNetworks.includes(chainId); } - getNetworkConfig(networkName: NetworkNames): NetworkConfig { - const key = networkName; - const networkConfig = Networks[key]; + getNetworkConfig(chainId: number): NetworkConfig { + const networkConfig = Networks[chainId]; if (!networkConfig) { - throw new Error(`No network config found for network name '${key}'`); + throw new Error(`No network config found for network '${chainId}'`); } return networkConfig; } diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 8bf423f4..d49fb197 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -3,9 +3,8 @@ import { State, StateService } from './state'; import { isWalletProvider, WalletProviderLike } from './wallet'; import { SdkOptions } from './interfaces'; import { Network } from "./network"; -import { Env } from "./env"; -import { BatchTransactionRequest, Exception, getGasFee, TransactionRequest } from "./common"; -import { BigNumber, BigNumberish, ethers, providers, Wallet } from 'ethers'; +import { BatchUserOpsRequest, Exception, getGasFee, UserOpsRequest } from "./common"; +import { BigNumber, ethers, providers } from 'ethers'; import { getNetworkConfig, Networks } from './network/constants'; import { UserOperationStruct } from './contracts/src/aa-4337/core/BaseAccount'; import { EtherspotWalletAPI, HttpRpcClient } from './base'; @@ -13,7 +12,6 @@ import { TransactionDetailsForUserOp, TransactionGasInfoForUserOp } from './base import { CreateSessionDto, SignMessageDto, validateDto } from './dto'; import { Session } from '.'; import { ERC20__factory } from './contracts'; -import { ERC20_ABI } from './helpers/abi/ERC20_ABI'; /** * Prime-Sdk @@ -25,7 +23,7 @@ export class PrimeSdk { private etherspotWallet: EtherspotWalletAPI; private bundler: HttpRpcClient; - private transactions: BatchTransactionRequest = {to: [], data: [], value: []}; + private userOpsBatch: BatchUserOpsRequest = {to: [], data: [], value: []}; constructor(walletProvider: WalletProviderLike, optionsLike: SdkOptions) { @@ -33,15 +31,13 @@ export class PrimeSdk { throw new Exception('Invalid wallet provider'); } - const env = Env.prepare(optionsLike.env); - const { - networkName, // + chainId, // rpcProviderUrl, } = optionsLike; if (!optionsLike.bundlerRpcUrl) { - const networkConfig = getNetworkConfig(networkName); + const networkConfig = getNetworkConfig(chainId); optionsLike.bundlerRpcUrl = networkConfig.bundler; } @@ -56,12 +52,12 @@ export class PrimeSdk { provider, walletProvider, optionsLike, - entryPointAddress: Networks[networkName].contracts.entryPoint, - factoryAddress: Networks[networkName].contracts.walletFactory, + entryPointAddress: Networks[chainId].contracts.entryPoint, + factoryAddress: Networks[chainId].contracts.walletFactory, paymasterAPI: optionsLike.paymasterApi, }) - this.bundler = new HttpRpcClient(optionsLike.bundlerRpcUrl, Networks[networkName].contracts.entryPoint, Networks[networkName].chainId); + this.bundler = new HttpRpcClient(optionsLike.bundlerRpcUrl, Networks[chainId].contracts.entryPoint, Networks[chainId].chainId); } @@ -122,82 +118,36 @@ export class PrimeSdk { return this.etherspotWallet.getCounterFactualAddress(); } - - async depositFromKeyWallet(amount: string, tokenAddress?: string): Promise { - try { - const ewalletAddress = await this.getCounterFactualAddress(); - - if (tokenAddress) { - const token = ethers.utils.getAddress(tokenAddress); - const erc20Contract = ERC20__factory.connect(token, this.etherspotWallet.services.walletService.getWalletProvider()); - const dec = await erc20Contract.functions.decimals(); - const approveData = erc20Contract.interface.encodeFunctionData('approve', [this.state.walletAddress, ethers.utils.parseUnits(amount, dec)]) - const transactionData = erc20Contract.interface.encodeFunctionData('transferFrom', [this.state.walletAddress, ewalletAddress, ethers.utils.parseUnits(amount, dec)]) - const balance = await erc20Contract.functions.balanceOf(ewalletAddress) - if (balance[0].lt(ethers.utils.parseEther(amount))) { - - const approvetx = await this.etherspotWallet.services.walletService.sendTransaction({ - to: tokenAddress, // EtherspotWallet address - data: approveData, // approval data - gasLimit: ethers.utils.hexlify(500000), - }); - - await approvetx.wait(); - - const tx = await this.etherspotWallet.services.walletService.sendTransaction({ - to: tokenAddress, // EtherspotWallet address - data: transactionData, // transferFrom data - gasLimit: ethers.utils.hexlify(500000), - }); - await tx.wait(); - return `Transfer successful. Account funded with ${amount} ${await erc20Contract.symbol()}`; - } else { - return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther( - balance[0], - )} ${await erc20Contract.symbol()}`; - } - } else { - const balance = await this.etherspotWallet.provider.getBalance(ewalletAddress); - - // Check if wallet balance is less than the amount to transfer - if (balance.lt(ethers.utils.parseEther(amount))) { - // Transfer funds to the wallet - const tx = await this.etherspotWallet.services.walletService.sendTransaction({ - to: ewalletAddress, // EtherspotWallet address - data: '0x', // no data - value: ethers.utils.parseEther(amount), // 0.1 MATIC - gasLimit: ethers.utils.hexlify(50000), - }); - await tx.wait(); - return `Transfer successful. Account funded with ${amount} ${tx}`; - } else { - return `Sufficient balance already exists. Current balance is ${ethers.utils.formatEther(balance)}`; - } - } - } catch (e) { - console.log(e); - return `Transfer failed: ${e.message}`; - } - } - async sign(gasDetails?: TransactionGasInfoForUserOp) { const gas = await this.getGasFee(); - if (this.transactions.to.length < 1){ + if (this.userOpsBatch.to.length < 1){ throw new Error("cannot sign empty transaction batch"); } const tx: TransactionDetailsForUserOp = { - target: this.transactions.to, - values: this.transactions.value, - data: this.transactions.data, + target: this.userOpsBatch.to, + values: this.userOpsBatch.value, + data: this.userOpsBatch.data, ...gasDetails, } - return this.etherspotWallet.createSignedUserOp({ + let partialtx = await this.etherspotWallet.createSignedUserOp({ ...tx, ...gas, }); + + const bundlerGasEstimate = await this.bundler.getVerificationGasInfo(partialtx); + + if (bundlerGasEstimate.preVerificationGas) { + partialtx.preVerificationGas = bundlerGasEstimate.preVerificationGas; + partialtx.verificationGasLimit = bundlerGasEstimate.verificationGas; + partialtx.callGasLimit = bundlerGasEstimate.callGasLimit; + console.log(partialtx); + } + + return await this.etherspotWallet.signUserOp(partialtx); + } async getGasFee() { @@ -244,64 +194,27 @@ export class PrimeSdk { return null; } - async getHash(userOp: UserOperationStruct) { + async getUserOpHash(userOp: UserOperationStruct) { return this.etherspotWallet.getUserOpHash(userOp); } - async encodeExecute(target: string, value: BigNumberish, data: string): Promise { - const formatTarget = ethers.utils.getAddress(target); - return await this.etherspotWallet.encodeExecute(formatTarget, value, data); - } - - async getUniSingleSwapParams(tokenIn: string, tokenOut: string, value: string) { - const wallet = await this.getCounterFactualAddress(); - const amount = ethers.utils.parseEther(value); - const blockNum = await this.etherspotWallet.provider.getBlockNumber(); - const timestamp = (await this.etherspotWallet.provider.getBlock(blockNum)).timestamp; - const params = { - tokenIn: tokenIn, - tokenOut: tokenOut, - fee: 500, - recipient: wallet, - deadline: timestamp + 1000, - amountIn: amount, - amountOutMinimum: 0, - sqrtPriceLimitX96: 0, - }; - return params; + async addUserOpsToBatch( + tx: UserOpsRequest, + ): Promise { + this.userOpsBatch.to.push(tx.to); + this.userOpsBatch.value.push(tx.value ?? BigNumber.from(0)); + this.userOpsBatch.data.push(tx.data ?? '0x'); + return this.userOpsBatch; } - async addTransactionToBatch( - tx: TransactionRequest, - ): Promise { - this.transactions.to.push(tx.to); - this.transactions.value.push(tx.value ?? BigNumber.from(0)); - this.transactions.data.push(tx.data ?? '0x'); - return this.transactions; - } - - async clearTransactionsFromBatch(): Promise { - this.transactions.to = []; - this.transactions.data = []; - this.transactions.value = []; - } - - async signSingleTransaction(tx: TransactionDetailsForUserOp) { - const gas = await this.getGasFee(); - - return this.etherspotWallet.createSignedUserOp({ - ...tx, - ...gas, - }); + async clearUserOpsFromBatch(): Promise { + this.userOpsBatch.to = []; + this.userOpsBatch.data = []; + this.userOpsBatch.value = []; } async getAccountContract() { return this.etherspotWallet._getAccountContract(); } - async getERC20Instance(tokenAddress: string) { - const token = ethers.utils.getAddress(tokenAddress); - return new ethers.Contract(token, ERC20_ABI, this.etherspotWallet.provider); - } - } From e473994d5c6eb75cbe9c233353b1616c9f3f3960 Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Tue, 13 Jun 2023 20:04:15 +0530 Subject: [PATCH 19/20] removed unwanted logs and added totalGasEstimated --- package-lock.json | 14 +++++++------- package.json | 8 ++++---- src/sdk/base/BaseAccountAPI.ts | 1 - src/sdk/common/ERC4337Utils.ts | 1 - src/sdk/sdk.ts | 14 ++++++++++---- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8726c623..db9568f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "etherspot-prime", + "name": "@etherspot/prime-sdk", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "etherspot-prime", + "name": "@etherspot/prime-sdk", "version": "1.0.0", "license": "MIT", "dependencies": { @@ -19,8 +19,8 @@ "reflect-metadata": "0.1.13" }, "devDependencies": { - "@types/node": "^18.11.9", - "@types/prettier": "^2.7.3", + "@types/node": "18.11.9", + "@types/prettier": "2.7.3", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "16.0.3", @@ -760,9 +760,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "node_modules/@types/prettier": { diff --git a/package.json b/package.json index 55e58afd..3326f740 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "etherspot-prime", + "name": "@etherspot/prime-sdk", "version": "1.0.0", - "description": "Etherspot-prime SDK", + "description": "Etherspot Prime (Account Abstraction) SDK", "keywords": [ "ether", "ethereum", @@ -50,8 +50,8 @@ "reflect-metadata": "0.1.13" }, "devDependencies": { - "@types/node": "^18.11.9", - "@types/prettier": "^2.7.3", + "@types/node": "18.11.9", + "@types/prettier": "2.7.3", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "dotenv": "16.0.3", diff --git a/src/sdk/base/BaseAccountAPI.ts b/src/sdk/base/BaseAccountAPI.ts index 2b07a54a..4b57d95e 100644 --- a/src/sdk/base/BaseAccountAPI.ts +++ b/src/sdk/base/BaseAccountAPI.ts @@ -469,7 +469,6 @@ export abstract class BaseAccountAPI { chainId: 80001, }; - // console.log('partialUserOp: ', partialUserOp); let paymasterAndData: string | undefined; if (this.paymasterAPI != null) { diff --git a/src/sdk/common/ERC4337Utils.ts b/src/sdk/common/ERC4337Utils.ts index 416dc595..ddbeca92 100644 --- a/src/sdk/common/ERC4337Utils.ts +++ b/src/sdk/common/ERC4337Utils.ts @@ -74,7 +74,6 @@ export function packUserOp (op: NotPromise, forSignature = export function getUserOpHash(op: NotPromise, entryPoint: string, chainId: number): string { const userOpHash = keccak256(packUserOp(op, true)); const enc = defaultAbiCoder.encode(['bytes32', 'address', 'uint256'], [userOpHash, entryPoint, chainId]); - console.log(userOpHash, entryPoint, chainId, enc); return keccak256(enc); } diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index d49fb197..aa73a48e 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -140,10 +140,9 @@ export class PrimeSdk { const bundlerGasEstimate = await this.bundler.getVerificationGasInfo(partialtx); if (bundlerGasEstimate.preVerificationGas) { - partialtx.preVerificationGas = bundlerGasEstimate.preVerificationGas; - partialtx.verificationGasLimit = bundlerGasEstimate.verificationGas; - partialtx.callGasLimit = bundlerGasEstimate.callGasLimit; - console.log(partialtx); + partialtx.preVerificationGas = BigNumber.from(bundlerGasEstimate.preVerificationGas); + partialtx.verificationGasLimit = BigNumber.from(bundlerGasEstimate.verificationGas); + partialtx.callGasLimit = BigNumber.from(bundlerGasEstimate.callGasLimit); } return await this.etherspotWallet.signUserOp(partialtx); @@ -217,4 +216,11 @@ export class PrimeSdk { return this.etherspotWallet._getAccountContract(); } + async totalGasEstimated(userOp: UserOperationStruct): Promise { + const callGasLimit = BigNumber.from(await userOp.callGasLimit); + const verificationGasLimit = BigNumber.from(await userOp.verificationGasLimit); + const preVerificationGas = BigNumber.from(await userOp.preVerificationGas); + return callGasLimit.add(verificationGasLimit).add(preVerificationGas); + } + } From c2588ec255b1585ac3e53f673ba6bae7cde7977f Mon Sep 17 00:00:00 2001 From: vignesha22 Date: Thu, 15 Jun 2023 00:18:27 +0530 Subject: [PATCH 20/20] added v1 provider --- .../wallet/providers/dynamic.wallet-provider.ts | 3 --- src/sdk/wallet/providers/interfaces.ts | 6 ++---- src/sdk/wallet/providers/key.wallet-provider.ts | 16 ++-------------- .../providers/meta-mask.wallet-provider.ts | 9 +-------- .../wallet/providers/utils/is-wallet-provider.ts | 4 ++-- .../providers/wallet-connect.wallet-provider.ts | 6 +----- src/sdk/wallet/providers/web3.wallet-provider.ts | 9 +-------- .../providers/web3eip1193.wallet-provider.ts | 9 +-------- src/sdk/wallet/wallet.service.ts | 10 +++------- 9 files changed, 13 insertions(+), 59 deletions(-) diff --git a/src/sdk/wallet/providers/dynamic.wallet-provider.ts b/src/sdk/wallet/providers/dynamic.wallet-provider.ts index 6fa2098e..34636d19 100644 --- a/src/sdk/wallet/providers/dynamic.wallet-provider.ts +++ b/src/sdk/wallet/providers/dynamic.wallet-provider.ts @@ -1,7 +1,6 @@ import { NetworkNames, prepareNetworkName } from '../../network'; import { prepareAddress, UniqueSubject } from '../../common'; import { WalletProvider } from './interfaces'; -import { TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; export abstract class DynamicWalletProvider implements WalletProvider { readonly address$ = new UniqueSubject(); @@ -21,8 +20,6 @@ export abstract class DynamicWalletProvider implements WalletProvider { abstract signMessage(message: any): Promise; - abstract sendTransaction(transaction: TransactionRequest): Promise; - protected setAddress(address: string): void { this.address$.next(prepareAddress(address)); } diff --git a/src/sdk/wallet/providers/interfaces.ts b/src/sdk/wallet/providers/interfaces.ts index ce30fe4e..e2912a3e 100644 --- a/src/sdk/wallet/providers/interfaces.ts +++ b/src/sdk/wallet/providers/interfaces.ts @@ -1,4 +1,4 @@ -import { BytesLike, providers, Wallet } from 'ethers'; +import { BytesLike, Wallet } from 'ethers'; import { UniqueSubject } from '../../common'; import { NetworkNames } from '../../network'; @@ -11,7 +11,6 @@ export interface WalletProvider { readonly networkName$?: UniqueSubject; signMessage(message: BytesLike): Promise; - sendTransaction(transaction: providers.TransactionRequest): Promise } export interface Web3Provider { @@ -30,7 +29,6 @@ export interface WalletConnectConnector { accounts: string[]; chainId: number; signPersonalMessage(params: any[]): Promise; - sendTransaction(transaction: providers.TransactionRequest): Promise; on(event: string, callback: (error: Error | null, payload: any | null) => void): void; } @@ -38,4 +36,4 @@ export interface WalletLike { privateKey: string; } -export type WalletProviderLike = WalletLike | Web3Provider | WalletConnectConnector | Web3eip1193Provider; +export type WalletProviderLike = string | WalletLike | WalletProvider; diff --git a/src/sdk/wallet/providers/key.wallet-provider.ts b/src/sdk/wallet/providers/key.wallet-provider.ts index 2132d9c1..e67a0067 100644 --- a/src/sdk/wallet/providers/key.wallet-provider.ts +++ b/src/sdk/wallet/providers/key.wallet-provider.ts @@ -1,4 +1,3 @@ -import { Signer } from '@ethersproject/abstract-signer'; import { Wallet, BytesLike, providers } from 'ethers'; import { WalletProvider } from './interfaces'; @@ -8,26 +7,15 @@ export class KeyWalletProvider implements WalletProvider { readonly wallet: Wallet; - readonly signer: Signer; - - readonly provider: providers.JsonRpcProvider; - - constructor(privateKey: string, provider: providers.JsonRpcProvider) { - this.wallet = new Wallet(privateKey, provider); - - this.signer = new Wallet(privateKey, provider) + constructor(privateKey: string) { + this.wallet = new Wallet(privateKey); const { address } = this.wallet; this.address = address; } - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.wallet.sendTransaction(transaction) - } - async signMessage(message: BytesLike): Promise { return this.wallet.signMessage(message); } - } diff --git a/src/sdk/wallet/providers/meta-mask.wallet-provider.ts b/src/sdk/wallet/providers/meta-mask.wallet-provider.ts index b45a86ed..6877514e 100644 --- a/src/sdk/wallet/providers/meta-mask.wallet-provider.ts +++ b/src/sdk/wallet/providers/meta-mask.wallet-provider.ts @@ -1,4 +1,4 @@ -import { BytesLike, providers } from 'ethers'; +import { BytesLike } from 'ethers'; import { toHex } from '../../common'; import { DynamicWalletProvider } from './dynamic.wallet-provider'; @@ -79,13 +79,6 @@ export class MetaMaskWalletProvider extends DynamicWalletProvider { } } - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.sendRequest('eth_sendTransaction', [{ - from: this.address, // The user's active address. - ...transaction, - }]) - } - protected async sendRequest(method: string, params?: any): Promise { const { ethereum } = window; diff --git a/src/sdk/wallet/providers/utils/is-wallet-provider.ts b/src/sdk/wallet/providers/utils/is-wallet-provider.ts index e8b70a4e..908d474b 100644 --- a/src/sdk/wallet/providers/utils/is-wallet-provider.ts +++ b/src/sdk/wallet/providers/utils/is-wallet-provider.ts @@ -15,9 +15,9 @@ export function isWalletProvider(provider: WalletProviderLike): boolean { if (utils.isHexString(privateKey, 32)) { result = true; } else { - // const { type, signMessage } = provider as WalletProvider; + const { type, signMessage } = provider as WalletProvider; - // result = !!type && typeof signMessage === 'function'; + result = !!type && typeof signMessage === 'function'; } break; } diff --git a/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts b/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts index 08499a15..0eb298ce 100644 --- a/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts +++ b/src/sdk/wallet/providers/wallet-connect.wallet-provider.ts @@ -1,4 +1,4 @@ -import { BytesLike, providers } from 'ethers'; +import { BytesLike } from 'ethers'; import { toHex } from '../../common'; import { DynamicWalletProvider } from './dynamic.wallet-provider'; import { WalletConnectConnector } from './interfaces'; @@ -61,8 +61,4 @@ export class WalletConnectWalletProvider extends DynamicWalletProvider { this.setAddress(address); this.setNetworkName(chainId); } - - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.connector.sendTransaction(transaction); - } } diff --git a/src/sdk/wallet/providers/web3.wallet-provider.ts b/src/sdk/wallet/providers/web3.wallet-provider.ts index 5ad2e973..5faf7c82 100644 --- a/src/sdk/wallet/providers/web3.wallet-provider.ts +++ b/src/sdk/wallet/providers/web3.wallet-provider.ts @@ -1,4 +1,4 @@ -import { BytesLike, providers } from 'ethers'; +import { BytesLike } from 'ethers'; import { prepareAddress, toHex } from '../../common'; import { NetworkNames, prepareNetworkName } from '../../network'; import { Web3Provider } from './interfaces'; @@ -89,11 +89,4 @@ export class Web3WalletProvider extends DynamicWalletProvider { ); }); } - - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.sendRequest('eth_sendTransaction', [{ - from: this.address, // The user's active address. - ...transaction, - }]) - } } diff --git a/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts b/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts index 1145d161..029ba7a0 100644 --- a/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts +++ b/src/sdk/wallet/providers/web3eip1193.wallet-provider.ts @@ -1,4 +1,4 @@ -import { BytesLike, providers } from 'ethers'; +import { BytesLike } from 'ethers'; import { prepareAddress, toHex } from '../../common'; import { NetworkNames, prepareNetworkName } from '../../network'; import { Web3eip1193Provider } from './interfaces'; @@ -62,11 +62,4 @@ export class Web3eip1193WalletProvider extends DynamicWalletProvider { return error; } } - - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.sendRequest('eth_sendTransaction', [{ - from: this.address, // The user's active address. - ...transaction, - }]) - } } diff --git a/src/sdk/wallet/wallet.service.ts b/src/sdk/wallet/wallet.service.ts index 0a4d1e6a..3884dc9d 100644 --- a/src/sdk/wallet/wallet.service.ts +++ b/src/sdk/wallet/wallet.service.ts @@ -43,10 +43,6 @@ export class WalletService extends Service { return this.provider ? this.provider.signMessage(message) : null; } - async sendTransaction(transaction: providers.TransactionRequest): Promise { - return this.provider ? this.provider.sendTransaction(transaction) : null; - } - protected switchWalletProvider(providerLike: WalletProviderLike): void { let provider: WalletProvider = null; if (providerLike) { @@ -56,15 +52,15 @@ export class WalletService extends Service { const walletLike = providerLike as EtherWallet; const isNotJsonRpcProvider = walletLike.provider?.constructor.name !== 'JsonRpcProvider'; if (privateKey && isNotJsonRpcProvider) { - provider = new KeyWalletProvider(privateKey, this.getWalletProvider()); + provider = new KeyWalletProvider(privateKey); } else { - // provider = providerLike as WalletProvider; + provider = providerLike as WalletProvider; } break; } case 'string': - provider = new KeyWalletProvider(providerLike, this.getWalletProvider()); + provider = new KeyWalletProvider(providerLike); break; } }